برای مقایسه زمان سفر اپلیکیشن مسیریاب نشان از وبسرویس مسیریابی پلتفرم نقشه نشان (Neshan Direction + ETA API)، نقشه آنلاین Waze و Google Maps استفاده میکنیم. روش کار به این شکل هست که مسیرهای متعددی با توزیع مکانی خاص رو مورد بررسی قرار میدیم. هر روز برای هر مسیر انتخابی ۷۲۰ بار گزارش میگیریم (هر دو دقیقه یک ریکوئست) و خصوصیات مختلف این مسیرها رو به دقت مونیتور میکنیم.
در برخی موارد هم حالتهای ویژه ای هستن که چون برای کاربران مهم هستن نسبت بهشون اهتمام ویژه ای داریم (مثلاً مسیرهایی که در تهران وارد طرح میشن). تو این پست یک مسیر از غرب تهران به داخل طرح ترافیک در مرکز تهران رو انتخاب کردم که با هم مرور کنیم.
مبدا: پونک، بزرگراه آبشناسان، نرسیده به سردار جنگل. (35.769852, 51.325989)
مقصد: قیام، خراسان، بین خوش لهجه و بیگی. (35.665794, 51.443714)
نمودار بالا فقط شِمایی از تغییرات زمان سفر این سه سرویس را نشان میدهد. خط آبی، زمان سفر گوگل مپز، خط قرمز، زمان سفر مسیریاب نشان و خط سبز، زمان سفر مسیریاب ویز هستند.
برای اینکه بازه های تصاویر بالا بزرگ بودن و ممکنه خیلی قابل مقایسه نباشه یک نمودار از بازه زمانی کوتاه تری رو با هم ببینیم:
تفاوت های موجود در این نمودار ها از جاهای مختلفی سرچشمه میگیره.مهم ترین دلیل برای این مساله تفاوت در الگوریتم مسیریابی نشان، ویز و گوگل مپز هست. این مورد باعث میشه که مسیرها عینا مثل هم نباشند و گاهی حتی تفاوت فاحشی داشته باشند. ولی بطور عمومی مشخص هست که مرتبه زمان سفرهای نشان خصوصا نسبت به ویز اوضاع خوبی داره با توجه به اینکه مسیرها مقداری متفاوت هستند.
یکی دیگه از کارایی که ما خیلی بهش دقت داریم این هست که کاربران مون چقدر نسبت به زمانی که بهشون میدیم دیرتر یا زودتر میرسند؟ سوال مهمی هست که دید بهتری رو میده. برای این مورد ما زمانی که به کاربر میدیم و زمانی که در واقع به مقصد میرسه رو بصورت لایو مونیتور میکنیم. این جا نکته خیلی مهمی هست و اونم اینه که حالت های مختلفی پیش میاد که همه شون با جزئیات دارن مونیتور میشن. مثلا کاربرانی که مسیر رو با ما میرن. یا اینکه مقداری رو با ما میرن و مقداری رو خودشون تصمیم میگیرند که مسیر رو تغییر بدن. من این جا میخوام درباره همه کاربران عزیز نشان صحبت کنم. اونها که از ما مسیر گرفتن بدون در نظر گرفتن اینکه چند درصد از مسیر رو با ما بودن یا نه. در بازه چند ساعت، داستان سفر همه کاربران نشان در تهران این بوده:
ما کاربران رو تو نمودار فوق به ۳ بخش عمده تفکیک میکنیم. اونها که زمان تخمینی نشان با اون چیزی که در واقعیت رسیدن قابل قبول بوده با رنگ سبز نشون شون دادیم. اونها که دیرتر از زمانی که ما گفتیم رسیدن و خطا از نظرشون احتمالا قابل قبول نیست رو با قرمز نشون دادیم. و اونها که زودتر از حد خطا قبول رسیدن رو با بنفش نشون دادیم.
این نمودار نکته خیلی جالبی داره. بیش از اونکه فکرشو بکنید داستان داشتیم تا این نمودار رو بکشیم. نکته توی تعریف اون <حد قابل قبول> هست. حد قابل قبول چیه؟ ما اومدیم با نظرسنجی که انجام دادیم آستانه قابل قبول بودن زمان سفر رو تعیین کردیم. مثلا تو مسیری که نشان میگه ۳۰ دقیقه تو راه هستید، اگر کاربر بیش از ۴ دقیقه دیرتر برسه اون رو در دسته قرمز ها و اگر ۴ دقیقه زودتر برسه اون رو در دسته بنفش ها قرار میدیم. یا برای مسیر ۱۵ دقیقه، کاربر انتظار نداره خطای تخمین زمان سفر از ۲ دقیقه بیشتر باشه. مدل کردن این عدد ها و چسبوندن چند تا چیز بهشون ما رو به یه سری فرمول عجیب غریب رسوند که خب واقعا با دیدنش میگفتیم خب ایول ما خیلی کار خفنی کردیم ولی از کجا معلوم این درست باشه؟ روشن کردن اینکه خود این معیار چقدر درسته یه پروسه دیگه بود. در نهایت ما تونستیم خطا های زمان سفر رو به طرز بسیار تر و تمیز توی یه نمودار گوسی توصیف کنیم. در واقع اون تابع آستانه خطا به ما کمک کرد که دیگه بصورت discrete خطا ها رو نسنجیم و بدونیم که در واقع چی خطا هست و چی خطا نیست.
نکته بعدی که تو این نمودار خیلی حائز اهمیت هست اینه که من اینجا اونهایی که کلا ازمون مسیر گرفتن رو نشون دادم. مقدار خیلی زیادی از اونها که خطای بیش از حد آستانه رو تحمل میکنن (بیش از ۵۰ درصدشون) همون هایی هستن که دقیقا مسیر نشان رو نمیرن و خب طبیعتا زمانی که پیش بینی کردیم در همون ابتدا مقداری دچار خطا میشه.
اگر بخوام گزارش رو دقیق تر کنم اون دسته از کاربران نشان که مسیرشون بیش از ۸۰ درصد با مسیری که مسیریاب داده تطابق داره بطور میانگین بیش از ۸۵ درصدشون خطایی کمتر از آستانه رو تو مسیرها میبینند.
یک مورد مهم دیگه پایدار بودن مسیرها است. پایدار بودن مسیرها یعنی اینکه مسیر ها پشت هم تغییر نکنند و اینطور نباشه که هر بار که کاربر مسیر میگیره، با اختلاف چند دقیقه ناگهان مسیر تغییر کنه. ما زمان زیادی رو صرف ثبات مسیر هامون کردیم. پایدار نگه داشتن مسیرها از یکجا به بعد کار بشدت پیچیده ای میشه. چرا؟ چونکه شما کافی هست فقط دویست متر از مسیر رو اشتباه پیش بینی کرده باشی. الگوریتم مسیریابی یک کوچه رو که جابجا کنه یهو ۵۰ درصد از مسیر جدید با مسیر قبلی تطابق نداره. زیبا نیست؟ :)
این سرویس میاد و هر ۲ دقیقه مسیر هایی که زمان شون رو داریم مونیتور میکنیم رو متر به متر با قبلی مقایسه میکنه. تو عکس بالا از تجریش به آزادی (خط بنفش) با مسیر از آزادی به تجریش ( خط آبی) رو مشاهده میکنید. پایداری مسیر خیلی داستان داره و ما داریم روش کار میکنیم ولی خب اوضاع مون نسبت به قبل به مراتب خیلی بهتر هست.
خب حالا موقع این هست که این گزارش ها رو کنار هم بذاریم و ببینیم اوضاع چطوره؟ بذارید مقداری زوم کنیم تو این نمودار ها و یکی از جاهایی که ترند ها مقداری متفاوت هست رو دقیق تر چک کنیم:
همونطور که مشخص هست نشان در این ساعت داره مسیر تقریبا ثابت و زمان سفر ثابتی رو میده. و گوگل و ویز هر دو دارن به سمت زمان سفر های بالاتر میرن. البته این رو باید با نیم ساعت فاصله بگیریم چون کسایی که ساعت ۱۸ استارت مسیریابی رو زدن حدودا از ۱۸:۳۰ به بعد میرسند به مقصد.
خب جاهایی که پیک ویز رو میبینیم ولی نشان چندان تغییری تو زمان سفر نداشته، خطا های زمان سفر کاربران افزایش چندانی نداشته و حدود ساعت ۱۹ ماکزیمم دقت زمان سفرمون رو شاهد هستیم (خط سبز).
ولی همیشه اوضاع اینطوری نیست. برای مثال هم زمان با بازی ایران ـ قرقیزستان ترافیک خیابان ها بشدت افت شدیدی رو شاهد بود ولی الگوریتم های ما با تاخیر متوجه شرایط آنومالی شدن، در حالی که ویز تقریبا با ۲۰ دقیقه تاخیر اوضاع رو درک کرد. البته ما همزمان داشتیم رو سرویس تست مسیریابی مون اوضاع رو مونیتور میکردیم و سرویس تست مون با سرعت خیلی خوبی متوجه اوضاع شد ولی خب معمولا سرویس تست ما ۳-۴ ماه از سرویس عملیاتی جلوتر هست تا دلیور بشه و به دست کاربر برسه.
ما سرویس های مونیتورینگ دیگه ای هم داریم که اینجا اشاره نکردم. مثلا برای یکی از این مونیتورینگ ها نزدیک به ۱۵ ماه فکر و ایده پردازی شده. سرویسی که بگه کاربر چه حسی نسبت به کل مسیر داشت؟ اصلا به نظرتون چجوری میشه همچین چیزی رو مدل ریاضی براش داشت؟ شرمنده روی ماهتون ولی اینو هنوز نمیتونم منتشر کنم. امیدوارم یه روز این رو براتون دمو کنیم :)