| دادههای این سوال را میتوانید از [این لینک](/problemset/assignments/4367/download_problem_initial_project/197304/) دانلود کنید.|
| :--: |
انتهای هر سال، شرکتها به بررسی و بازنگری استراتژیها و میزان تاثیرگذاری آنها میپردازند. همچنین با تحلیل دادههای سال گذشته، مشغول به هدفگذاری برای سال آینده میشوند.
در این سوال قصد داریم با دیتایی که از جزئیات فاکتورهای خرید مشتریان در اختیار داریم، به حل یک مسئله از طریق یادگیری نظارتشده بپردازیم.
فرض کنید دیتای خریدهای مشتریان شرکت، طی دو سال گذشته (۲۰۲۱ و ۲۰۲۲) را در اختیار دارید. همچنین در دیتای آموزش، ریکوردهایی از جزئیات خرید برخی از مشتریان در سال ۲۰۲۳ وجود دارد.
### روند حل سوال
+ در ابتدا باید به پیشپردازش دیتا بپردازید.
+ در ادامه مسیر، دیتایی که به عنوان دیتای آموزش (Train) به مدل میدهید باید به گونهای باشد که هر سطر آن مربوط به یک **مشتری** باشد و ستون هدف، نشاندهنده مجموع هزینهای که مشتری در سال ۲۰۲۳ پرداخت خواهد کرد، باشد.
<details class="orange">
<summary>**نکته**</summary>
+ در طی حل سوال باید خودتان ستون هدف را از دیتای آموزش استخراج کنید.
+ در راستای احتساب مجموع هزینه، از حاصل ضرب `Quantity` در `UnitPrice` استفاده کنید.
+ به میلادی و شمسی بودن ستون `InvoiceDate` در دیتای آموزش و تست دقت کنید.
</details>
<details class="green">
<summary>**راهنمایی**</summary>
هرجا که نیازمند یک تاریخِ از پیش تعیینشده بودید، میتوانید از روز اول سال ۲۰۲۳ استفاده کنید.
</details>
# مجموعهداده
ستونهای دیتای در دسترس به شکل زیر است:
| نام ستون | توضیحات |
|:------------------:|:--------------------------:|
|`Invoice`| شناسه منحصر به فرد فاکتور |
|`Description`| توضیحات محصول خریداری شده |
|`Quantity`| تعداد سفارش از یک نوع محصول در فاکتور |
|`UnitPrice`| قیمت یک نوع محصول به ازای یک واحد از آن |
|`Customer ID`| شناسه منحصر به فرد مشتری |
|`Country`| نام کشور محل سکونت مشتری |
|`StockCode`| کد انبار فراهم کننده محصول |
|`InvoiceDate`| تاریخ ایجاد فاکتور |
+ **توجه:** در صورتی که شناسهی `Invoice` با حرف C شروع شود، یعنی فاکتور **لغو** شده است.
# خواسته نهایی
در نهایت باید برای هر مشتری (`Customer ID`) که در دیتای تست قرار دارد، پیشبینی کنید که آن مشتری در سال ۲۰۲۳ در مجموع چقدر هزینه خواهد کرد.
# ارزیابی
برای ارزیابی مدل شما از معیار [R2_score](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.r2_score.html) استفاده خواهد شد.
<details class="red">
<summary>
**توجه**
</summary>
در طول مسابقه امتیازی که مشاهده میکنید، فقط نتیجهی `R2_score` روی ۳۰ درصد از فایلی است که برای کوئرا آپلود میکنید. بعد از پایان زمان مسابقه، **امتیاز نهایی** شما روی کل دیتا محاسبه میشود.
این کار به منظور جلوگیری از `overfitting` و حفظ عمومیت مدل انجام میشود تا مطمئن شویم مدلهایی که دچار بیشبرازش شدهاند، در امتیازهی نهایی، افت میکنند.
</details>
# خروجی سوال
+ خروجی شما باید یک فایل `CSV` باشد که دارای **۲ ستون و ۶۶۱ سطر** (**بدون احتساب سطر مربوط به نام ستونها**) است. در هر سطر باید بهازای یک مشتری (`Customer ID`)، مقدار پیشبینی (`Prediction`) مدل خود را ذخیره کنید.
+ نام فایل پاسخ شما باید بهصورت `submission.csv` باشد.
+ نام ستونهای شما باید دقیقاً مطابق خروجی نمونه باشد.
توجه کنید که ستون `Customer ID` باید به ترتیب از آیدی شماره ۰ شروع و به ۶۶۰ ختم شود.
+ **فرمت** ۴ سطر اول محتوای فایل `CSV` شما باید دقیقا مشابه نمونه زیر باشد
+ اعداد ستون `Prediction` صرفاً برای مثال گذاشته شدهاند و پاسخ صحیح نیستند!
## نمونه خروجی
| Customer ID | Prediction |
|:------------------:|:------------------:|
| 0 | 2100.2334 |
| 1 | 909.230 |
| 2 | 230.1202 |
| 3 | 12222.0 |
<details class="yellow">
<summary>
**نکات مهم درمورد فایل ارسالی**
</summary>
+ جلوی هر آیدی، دقیقاً باید پیشبینی مدل برای همان آیدی قرار بگیرد (در صورت نیاز میتوانید از `merge` استفاده کنید).
+ توجه کنید که ستونهای گفته شده حتما دارای `header` باشد.
+ مراقب باشید در فایل نهایی اندیس ذخیره نشود و فقط دو ستون مذکور باشند.
</details>
<details class="red">
<summary>
**هشدار**
</summary>
فراموش نکنید که **قبل از پایان زمان مسابقه**، **باید** تمامی کدهای این مسابقه را از قسمت **بارگذاری کُد** برای ما ارسال کنید. در غیر اینصورت، شما از این مسابقه، امتیازی کسب نمیکنید.
توجه داشته باشید که اگر از `jupter notebook` استفاده میکنید بایستی همانند توضیحات قسمت **بارگذاری کُد**، خروجی `.py` را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای `jupyter` همانند `.ipynb` مورد قبول نیستند.
</details>