| فایل اولیهی سوال را میتوانید از [این لینک](/problemset/assignments/4367/download_problem_initial_project/316835/) دانلود کنید.|
| :--: |
شرکت HonkHonk یک شرکت موفق تاکسی اینترنتی متمرکز در شهر نیویورک هست. این شرکت نزدیک به یک دهه بر روی بهبود دقت و منطق سیستم قیمتگذاری سفرهای خود تحقیق کرده و وقت گذاشته است. نتیجه این تلاشها، یک تابع قیمتگذار پویا با ۳۵۰۰ خط کد شده است.
کد این تابع به شدت محرمانه و حساس هست. به همین دلیل تنها یک نسخه از آن بر روی یک سرور خصوصی نزد مدیرعامل ذخیره شده است. جناب مدیرعامل این سرور در زیر میز خود نگه داشته است تا خیال همه راحت باشد.
یک روز که جناب مدیرعامل مشغول نوشیدن چای بود، طی یک حادثه ناگوار واژگونی لیوان چای آقای مدیرعامل باعث سوختن سرور و پاک شدن اطلاعات درون آن میشود.
حال آقای مدیرعامل برای جلوگیری از ورشکستگی شرکت تصمیم دارد یک سیستم جدید بسازد و جایگزین تابع قیمتگذار قبلی بکند. به همین منظور به کمک فوری شما برای رهایی از این چالش نیاز دارد.
تنها جمله زیر از نحوه کارکرد تابع قیمتگذار قبلی در دسترس است:
> این تابع قیمتگذاری پویا ارائه میداد. قیمت سفرها با توجه به فاکتورهای زمانی، مکانی، آبوهوا و ... محاسبه میشد.
جناب مدیرعامل پس از تلاشهای فراوان، توانسته یک مجموعه داده بسیار ارزشمند از سفرهای انجام شده در چند ماه متوالی در سال ۲۰۱۶ در شهر نیویورک، که توسط شرکت HonkHonk انجام شده و تابع قیمتگذار اصلی هزینه سفر را مشخص کرده است، تهیه کند و در اختیار شما قرار دهد. همینطور جناب مدیرعامل برای بررسی از کیفیت سیستم پیشنهادی شما، قسمتی از این مجموعه داده را نزد خود نگه داشته تا از کیفیت خروجی شما مطمئن باشد.
<details class="yellow">
<summary>**دادگان**</summary>
| نام ستون | توضیحات |
| :----------------------: | :-----------------------------: |
| `id` | یک شناسه منحصر به فرد برای هر سفر. |
| `pickup_datetime` | تاریخ و زمان شروع سفر. |
| `dropoff_datetime` | تاریخ و زمان پایان سفر. |
| `passenger_count` | تعداد مسافران در خودرو. |
| `pickup_longitude` | طول جغرافیایی مکان مبدا سفر. |
| `pickup_latitude` | عرض جغرافیایی مکان مبدا سفر. |
| `dropoff_longitude` | طول جغرافیایی مکان مقصد سفر. |
| `dropoff_latitude` | عرض جغرافیایی مکان مقصد سفر. |
| `store_and_fwd_flag` | نشاندهنده اینکه آیا اطلاعات سفر قبل از ارسال به سرور، در حافظه خودرو ذخیره شده بود یا خیر. (Y/N) |
| `trip_duration` | کل مدت زمان سفر به ثانیه. |
| `total_price` | **(متغیر هدف)** قیمت نهایی و کل سفر به دلار (فقط در `train.csv` موجود است). |
</details>
ماموریت شما این است که با استفاده از این مجموعه داده و تکنیکهای برنامهنویسی، هوش مصنوعی و یادگیری ماشین و همینطور جمعآوری دادههای کمکی مورد نیاز، یک سیستم قیمتگذار پویا برای شرکت HonkHonk طراحی کنید.
**برای این مأموریت آمادهاید؟!**
## معیار ارزیابی
عملکرد مدل شما بر اساس **خطای جذر میانگین مربعات (Root Mean Squared Error - RMSE)** ارزیابی میشود. برای تبدیل این خطا به یک «امتیاز» قابل مقایسه در بازه ۰ تا ۱۰۰، از یک تابع امتیازدهی غیرخطی استفاده میکنیم که در آن امتیاز بالاتر، نشاندهنده عملکرد برتر است.
این سیستم امتیازدهی، خطای مدل شما (RMSE) را در مقایسه با **انحراف معیار (Standard Deviation)** مقادیر واقعی (`std(Y_true)`) میسنجد. انحراف معیار، پراکندگی یا نوسان ذاتی دادههای ترافیک را اندازهگیری میکند. در نتیجه، یک مدل موفق نهتنها باید دقیق باشد، بلکه خطای آن باید نسبت به این نوسانات طبیعی، مقدار ناچیزی باشد.
\[
Score = 100 \times e^{\left(-\frac{\text{RMSE}}{\text{std}(Y_{\text{true}})}\right)}
\]
یک امتیاز ۱۰۰ به معنای پیشبینی کاملاً دقیق (خطای صفر) است. این فرمول به صورت نمایی عمل میکند؛ یعنی به مدلهایی که خطای آنها به مراتب کوچکتر از نوسانات طبیعی دادهها باشد، امتیاز بالایی اختصاص میدهد و با افزایش خطا، امتیاز به سرعت کاهش مییابد.
<details class="red">
<summary>
**توجه**
</summary>
در طول مسابقه امتیازی که مشاهده میکنید، فقط نتیجهی ارزیابی مدل شما روی ۳۰ درصد از دادههای آزمون است. بعد از پایان زمان مسابقه، **امتیاز نهایی** شما روی ۷۰ درصد مابقی محاسبه میشود.
این کار به منظور جلوگیری از بیشبرازش (`overfitting`) و حفظ عمومیت مدل انجام میشود تا مطمئن شویم مدلهایی که دچار بیشبرازش شدهاند، در امتیازدهی نهایی، افت میکنند.
</details>
## نحوهی ارسال پاسخ
برای پاسخ به این سوال ابتدا فایل نوتبوک قرار گرفته در فایل اولیه را باز کنید و سپس مراحل را مطابق آنچه که از شما خواسته شده انجام دهید. در نهایت، پس از اجرای سلول جوابساز (آخرین سلول فایل نوتبوک) فایل `result.zip` ساخته شده را ارسال نمایید.
<details class="red">
<summary>
**هشدار مهم**
</summary>
توجه داشته باشید که پیش از اجرای سلول جوابساز، تغییرات اعمال شده در نوتبوک را با استفاده از کلید میانبر `ctrl+s` ذخیره کرده باشید در غیر این صورت، در پایان مسابقه **نمره** شما به **صفر** تغییر خواهد کرد.
همچنین اگر از کولب برای اجرای این فایل نوتبوک استفاده میکنید، قبل از ارسال فایل `result.zip`، آخرین نسخهی نوتبوک خود را دانلود کرده و داخل فایل ارسالی قرار دهید.
</details>