اگر از تاکسیاینترنتی اسنپ برای حمل و نقل استفاده کرده باشید و به قول معروف «اسنپ زده باشید!»، حتما با تصویر زیر آشنا هستید. 😉
در این تصویر، تعداد رانندگان اطراف یک درخواست کننده سفر، نشان داده شدهاند. اما شما (طبیعتا!) تعداد مسافرانی که در آن لحظه از اسنپ درخواست سفر کردهاند را نمیبینید.
دادگان
در این سوال، مجموعه اسنپکب، ارائه دهنده خدمت تاکسی اینترنتی اسنپ، تاریخچه تعداد مسافرانی که در هر دقیقه، درخواست سفر کردهاند را از این لینک ، در اختیار شما قرار دادهاست.
هنگامی که این فایل را از حالت فشرده خارج کنید. پوشه cab
را میبینید. در صورتی که وارد این پوشه شوید، فایلهای آموزش (train.csv
) و آزمایش (test.csv
) در اختیار شما خواهند بود. فایل آموزش، اطلاعات درخواست مسافران به ازای هر دقیقه را در یک بازه ۲ ماهه، در اختیار شما قرار میدهد که جزییات آن، در جدول زیر آمدهاست:
نام ستون | توضیحات ستون |
---|---|
time | زمان ثبت درخواستها (با دقت دقیقه) |
y | تابعی از تعداد مسافران منتظر راننده |
صورت مسئله
معیار y
، نشاندهنده وضعیت جاری کسب و کار و میزان مشتریان ورودی در لحظه است. به همین دلیل، این معیار (KPI) و رصد آن در طول زمان، دارای اهمیت بسیار ویژهای برای مجموعه اسنپکب است. 🤗
یکی از عوامل ناخواسته و خارج از کنترلی که این معیار را تحت تاثیر منفی قرار میدهد، مشکلات فنی یا به قولی Technical Incident
ها هستند که گاهی باعث از دسترس خارج شدن مقطعی و یا حتی کامل سامانه دریافت درخواست اسنپکب میشوند. 😢
در نتیجه اگر نمودار سری زمانی این دادگان را رسم کنید؛ با افتادگیهایی ناشی از همین اتفاقات (مانند شکل زیر) روبرو خواهید شد:
در شکل بالا، نمودار قرمز رنگ، نحوه تغییر معیار y
را در طول زمان نشان میدهد. همانگونه که در تصویر معلوم است، از دقایقی قبل از ساعت ۱۵:۳۰ تا حدود ۱۶:۴۰، سامانه دچار مشکل شده و درخواستهای سفر کاهش پیدا کرده بودند. در همین نمودار، خطچین زردرنگ نشانگر انتظار ما از رفتار سیستم است اگر خطایی رخ نداده بود و از آن با نام مقدار ایدهآل y
یاد میکنیم.
بهعبارت دیگر، مقدار ایدهآل y
در زمانهایی که مشکل فنی نیست برابر است با مقدار y
و در زمانهایی که مشکل فنی وجود دارد، بایستی مقدار آن به شکلی باشد که بین سریزمانی قبل و بعد از حادثه، یک نمودار smooth
و یا به اصطلاح صاف مانند شکل بالا، ایجاد شود.
حال، اسنپکب از شما انتظار دارد که با استفاده از روشهای یادگیریماشین، یادگیری عمیق و یا سریهای زمانی، اقدام به پیشبینی مقدار ایدهآل y
در دادگان آزمایش بکنید. 😎
توجه
لطفا به نکات زیر توجه داشته باشید:
- شناسایی زمانهای بروز مشکل فنی، جزوی از چالش این مسئله است و تعریف دقیقی برای آنها ارائه نشدهاست.
- شما در دادگان آموزش، مقدار ایدهآل
y
را در لحظات رخدادن حادثه ندارید. در نتیجه، چالشهای مرتبط با آن نیز، جزوی از این مسئله است.
راهنمایی
شاید نکات زیر، بتوانند به شما در حل این مسئله کمک بکنند:
- شناسایی بازههای مشکلات فنی و اصلاح آنها در دادگان آموزش و یا در پیشبینیهای دادگان آزمایش با استفاده از روشهای مرتبط مانند
Moving Average
- استفاده از یادگیری نظارتشده (
supervised
) - استفاده از الگوریتمهای مرتبط با سری زمانی
- یا استفاده از هر روش دیگر مرتبط با تحلیل داده، یادگیری ماشین و عمیق
ارزیابی
برای ارزیابی مُدل شما از معیار (metric
) زیر استفاده میشود:
$$metric = \frac{\sum_{i=1}^{i=n} |y_i-prediction_i|}{\sum_{i=1}^{i=n} y_i} $$
در فرمول بالا، $y_i$ مقدار ایدهآل معیار $y$ برای زمان $i$ است و $prediction_i$ نیز مقدار پیشبینی شده مُدل شما برای آن زمان میباشد. همچنین تعداد نمونههای دادگان را از شماره ۱ تا $n$ در نظر میگیریم. در نهایت، امتیاز شما از این مرحله بر اساس فرمول زیر محاسبه میگردد: $$score = (0.2 - metric) \times1000$$
هدف شما، بایستی ساختن مُدلی با $metric<0.2$ باشد.
توضیحات
با توجه به این که metric
برابر یا بزرگتر از ۰.۲ به عنوان مدل مناسب این مسئله، از سمت تیم اسنپکب مورد قبول قرار نمیگیرد. پس هرمدلی که چنین عملکردی را روی دادگان آزمایش داشتهباشد، صفر امتیاز از این سوال کسب میکند.
توجه
لطفا در هنگام کار با این دادگان، به نکات زیر توجه داشته باشید:
- مقدار
metric
مدل شما، تا سه رقم اعشار محاسبه (رُند) و در فرمول امتیازدهی بالا، قرار داده میشود. - این سوال، امتیاز منفی ندارد. حتی اگر
score
شما، منفی شود. از این سوال حداقل صفر امتیاز میگیرید. 😜 - بیشترین امتیاز ممکن از این سوال ۲۰۰ و کمترین امتیاز ممکن، صفر است.
خروجی
پیشبینیهای مدل خود بر روی دادگان آزمایش (test.csv
) را در فایلی با نام output.csv
قرار دهید. این فایل باید دارای یک ستون با نام prediction
باشد که ردیف iام آن، پیشبینی شما برای سطر iام دادگان آزمایش باشد (دقت کنید که این ستون باید حتما دارای header
باشد).
بعد از آمادهسازی فایل output.csv
، آن را برای ما بارگذاری کنید.
نمونه خروجی فایل output.csv
(فقط سه خط اول به همراه نام ستون)
prediction
7835
6431
8304
توجه
حتما فایل output.csv
باید دارای ۴,۳۲۰ سطر (بدون در نظر گرفتن header
) و یک ستون باشد.
همچنین نام ستون بایستی بدون space
در قبل و بعد از نام آن، باشد. در غیر این صورت، سیستم داوری نمرهای به شما نخواهد داد.
هشدار 😱
فراموش نکنید که قبل از پایان زمان مسابقه، بایستی تمامی کدهای این مسابقه را از قسمت بارگذاری کُد برای ما ارسال کنید. در غیر این صورت، شما از این مسابقه، امتیازی کسب نمی کنید.
توجه داشته باشید که اگر از jupter notebook
استفاده می کنید بایستی همانند توضیحات قسمت بارگذاری کُد، خروجی .py
را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای jupyter
همانند .ipynb
مورد قبول واقع نخواهند شد.
ارسال پاسخ برای این سؤال