سلام
به مسابقه **تحلیل داده** از **مسیر داده** لیگ **کُدکاپ ۱۴۰۰** خوش آمدید.
برای آشنایی با سیستم داوری مسابقات تحلیل داده، ویدئو زیر را مشاهده کنید.
%video.arvan_https://player.arvancloud.ir/index.html?config=https://qvideo.arvanvod.ir/0YLXKYyxOa/17eQK5q9Gd/origin_config.json%
قبل از شروع مسابقه، ابتدا موارد زیر را مطالعه کنید:
+ این مسابقه، دارای ۳ سوال برای ۳ ساعت میباشد.
+ محدودیتی برای شما در انتخاب ابزار نرم افزاری یا زبان برنامهنویسی وجود ندارد.
+ برای مطالعه قوانین شرکت در مسابقه به [اینجا](https://quera.ir/course/assignments/2693/problems/33523) مراجعه کنید.
+ در طول زمان مسابقه میتوانید سوالهای خود را از قسمت "سوال بپرسید" مطرح کنید.
+ پیش از پایان زمان مسابقه، کُد سوالات خود را در بخش "بارگذاری کد" قرار دهید.
+ این مسابقه در مجموع ۳۵۰ امتیاز دارد و افراد برتر، آنهایی هستند که بیشترین امتیازها را در مجموع کسب کنند.
+ بعد از پایان زمان مسابقه، امتیاز افرادی که از روشهای غیرمتناسب با هدف مسابقه (مانند تابع تصادفی) استفاده کرده باشند، صفر میشود و این امر تخلف به حساب میآید.
+ شما مجاز به استفاده از دادگان به اشتراک گذاشته شده در این مسابقه، برای سایر اهداف (آموزشی و غیرآموزشی) **نیستید**.
+ وبینار آموزشی این مسابقه در روز شنبه ۶ آذر ساعت ۱۸ برگزار خواهد شد که ابتدا آمار مسابقه را بررسی میکنیم و در ادامه راه حل سوالات را خواهیم دید. برای شرکت در وبینار، از طریق [این لینک](https://evand.com/events/%D9%88%D8%A8%DB%8C%D9%86%D8%A7%D8%B1-%D8%AD%D9%84-%D9%85%D8%B3%D8%A7%D8%A6%D9%84-%D9%85%D8%B3%D8%A7%D8%A8%D9%82%D9%87-data-analysis-%DA%A9%D8%AF%DA%A9%D8%A7%D9%BE-%DB%B6-3868) اقدام به ثبتنام کنید.
+ لینک وبینار و فایلهای توضیح داده شده در وبینار، بعد از گذشت چند روز از پایان مسابقه در https://github.com/QueraTeam/data-contests قرار داده میشوند.
+ بعد از برگزاری وبینار آموزشی، یک نظرسنجی در مورد مسابقه برای **شما** ارسال میگردد. لطفا با پُر کردن این نظرسنجی به ما در بهبود کیفیت مسابقات آینده تحلیل داده کمک کنید.
از آنجایی که اوضاع مالی محمد، سجاد و هادی خیلی خوب شده، تصمیم گرفتند برای تنوع، امسال تعطیلات خود را به جای حیاط خلوت خانه حامد، در یک کشور خارجی سپری کنند. برای همین منظور، این افراد پس از انتخاب کشور مدنظر خود، چهار بلیط فرست کلس تهیه، چمدان های خود را بسته و راهی سفر پرماجرای خود شدند.
![توضیح تصویر](https://iranmehrcollege.com/uploads/thumbs//article/2018/12/869x488_1013%D9%88%D8%A7%DA%98%DA%AF%D8%A7%D9%86%20%D9%85%D8%AE%D8%B5%D9%88%D8%B5%20%DA%AF%D8%B1%D8%AF%D8%B4%DA%AF%D8%B1%DB%8C%20%D8%A8%D9%87%20%D8%B2%D8%A8%D8%A7%D9%86%20%D8%A7%D9%86%DA%AF%D9%84%DB%8C%D8%B3%DB%8C.jpg)
آن ها پس از رسیدن به مقصد، به هتل ۵ ستاره از پیش رزرو شده خود رفتند و چمدانهای خود را باز کردند. در همان لحظه محمد احساس سرگیجه و تب و لرز کرد. فردای آن روز حال محمد بدتر شد و مجبور شدند به یک بیمارستان تخصصی برای درمان محمد بروند و پس از درمان، هزینه سنگینی را برای دارو و ویزیت پرداخت کردند. فردای آن روز، حال محمد بهتر شد. پس از ولخرجیهای بسیار این چهار نفر و رفتن به رستوران و مراکز تفریحی گران!، به هتل برگشته و وسایل خود را برای برگشت به ایران آماده کردند، اما...
گذرنامه و ویزاهای حامد و سجاد گم شده و دیگر به دلیل تمام شدن پولشان، نمیتوانند گذرنامه و ویزای جدید بگیرند. هادی که دوست باتجربهتر این اکیپ محسوب میشد، به محمد و حامد و سجاد گفت، اگر قبل از سفر، خودمان را بیمه **مسافرتی** میکردیم، هم هزینههای ویزیت و دارو محمد را متحمل نمیشدیم و هم میتوانستیم ویزا و گذرنامه حامد و سجاد را دوباره تهیه و هزینه آن را در ایران بپردازیم. همان جا تصمیم گرفتند به محض برگشت، یک شرکت بیمه مسافرتی تاسیس کنند! و از آن جایی که خیلی علاقه به هوش مصنوعی و تحلیل داده نیز دارند، تصمیم گرفتند که یک تحلیلگر داده به تیم خود اضافه کنند. **شما** از هم اکنون میتوانید در آزمون استخدامی شرکت بیمه مسافرتی **حمسه** (حامد، محمد، سجاد و هادی) شرکت کنید. 😎
# دادگان
میتوانید دادگان این سوال را از [این لینک](/contest/assignments/35055/download_problem_initial_project/117398/) دریافت کنید.
هر ردیف دادگان آموزش `train.csv`، یک رکورد سفر مشتری بوده و مشخصات آن، طبق جدول زیر میباشد:
| توضیحات ستون | نام ستون |
|:------------------:|:----------:|
| سن هر مشتری | Age |
| بخشی که در آن مشتری مشغول به کار است | Employment Type |
| آیا مشتری فارغ التحصیل دانشگاه است؟ | GraduateOrNot |
| درآمد سالانه مشتری | AnnualIncome |
| تعداد اعضای خانواده مشتری | FamilyMembers |
| آیا مشتری از هر بیماری مهم یا شرایطی مانند دیابت، فشار خون بالا یا غیره رنج می برد؟ | ChronicDiseases |
| آیا مشتری در طول دو سال گذشته، حداقل چهار سفر داشتهاست؟ | FrequentFlyer |
| آیا مشتری تا به حال به یک کشور خارجی سفر کردهاست؟ | EverTravelledAbroad |
| آیا مشتری بسته بیمه مسافرتی، خریداری کردهاست؟ | TravelInsurance|
# صورت مسئله
در ابتدای کار، شما میخواهید با بررسی اولیه به اکتشاف در مجموعه دادگان آموزش (`train.csv`) بپردازید و به سوالات زیر پاسخ بدهید (مثال خروجی هر سوال، در زیر آن آورده شدهاست).
1. ابتدا تعداد سطر و سپس تعداد ستونهای این دادگان را به دست آورید (با `space`، جدا کنید):
```
1000 100
```
2. متوسط درآمد سالانه مشتریان چه قدر است (فقط قسمت عدد صحیح)؟
```
5000
```
3. چند نفر از مشتریان سابقه سفر خارجی داشتهاند؟
```
500
```
4. بیشتر افراد، در بخش خصوصی به کار گرفته شدهاند و یا بخش دولتی؟ چند درصد افراد در آن بخش مشغول هستند (با دقت دو رقم اعشار)؟
```
Government Sector 12.34
```
5. چند درصد از افرادی که بیماری زمینهای دارند، خودشان را برای سفر بیمه کردهاند (دقت تا دو رقم اعشار)؟
<details class="violet">
<summary>**توجه**</summary>
در این سوال نیازی به استفاده از قانون بیز نیست و برای محاسبه درصد، افرادی را پیدا کنید که هم بیماری زمینهای دارند و هم بیمه مسافرتی را خریداری کردهاند.
</details>
```
70.75
```
این مرحله در مجموع، شامل ۵ سوال (هر سوال، ۱۰ امتیاز) میباشد. در صورتی که به تمامی سوالات پاسخ صحیح بدهید، بایستی که بتوانید ۵۰ امتیاز از این مرحله کسب کنید.
# خروجی
برای ارسال پاسخ، جواب هر سوال را مشابه مثال، در یک سطر از یک فایل `text` بنویسید. در نهایت یک فایل پنج خطی با نام **output.txt** را برای ما بارگذاری کنید.
**_در صورتی که جواب سوالی را نمیدانید در سطر مربوطه ۱- وارد کنید._**
## نمونه خروجی ۱
```
1000 100
5000
500
Government Sector 12.34
70.75
```
<details class="violet">
<summary>**توضیحات**</summary>
در خط _i_ ام جواب سوال _i_ ام نوشته شدهاست.
</details>
## نمونه خروجی ۲
```
200 200
-1
100
Private Sector/Self Employed 43.21
-1
```
<details class="violet">
<summary>**توضیحات**</summary>
چون پاسخ سوال دوم و پنجم را نمیدانستید، به جای آن عدد ۱- نوشتهاید!
</details>
حال که در مرحله قبلی با دادگان بیمه تا حدودی آشنا شدید، وقت آن است که برای هر مسافر، احتمال آن که او برای سفر خود، بیمه تهیه کند را پیشبینی کنید.
![bime](https://quera.ir/qbox/view/v26lsk1Hjh/scott-graham-5fNmWej4tAA-unsplash.jpg)
%align_center_start%
Photo by [Scott Graham](https://unsplash.com/@homajob?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) on [Unsplash](https://unsplash.com/s/photos/insurance?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)
%align_end%
## دادگان
دادگان این مرحله، دقیقا مانند مرحله قبل است. برای حل این سوال، دو فایل `csv` در اختیار خواهید داشت. فایل `train.csv` همان فایلی است که باید بر اساس آن، مدل خود را آموزش دهید و فایل `test.csv` مشخصات مسافرانی را شامل میشود که باید احتمال خریدن بیمه را برای آنها پیشبینی کنید. به عبارت بهتر باید تخمین بزنید چقدر **احتمال** دارد ستون `TravelInsurance` مقدار `Yes` داشته باشد.
## ارزیابی
امتیاز نهایی مُدل شما تابعی از سطح زیر ناحیه نمودار ROC است. برای مطالعه بیشتر در مورد این نمودار میتوانید [ویکیپدیا](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) یا [راهنمای کوتاه نکات و ترفندهای یادگیری ماشین](https://stanford.edu/~shervine/l/fa/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks) را مطالعه کنید.
امتیاز نهایی مدل شما طبق فرمول زیر محاسبه میشود.
$$ score=((AUCROC\times100)-50)\times2$$
علت استفاده از این فرمول برای امتیازدهی، این است که اگر به صورت تصادفی برای مشتریان عددی پیشبینی کنید، `auc_roc` مدل شما ۰.۵ خواهد بود. بنابراین تنها مدلهایی پذیرفته میشوند که دارای `auc_roc` بیشتر از ۰.۵ باشند.
داوری این سوال قبل از پایان مسابقه، تنها بر اساس ۳۰ درصد از دادگان آزمایش (`test`) خواهد بود. پس از اتمام مسابقه، برای بهروزرسانی نهایی جدول امتیازات، فقط از ۷۰ درصد مابقی دادگان آزمایش استفاده خواهد شد؛ این کار برای جلوگیری از بیشبرازش (`overfit`) انجام میشود.
## خروجی
پیشبینیهای مدل خود بر روی دادگان آزمایش (`test.csv`) را در فایلی با نام `output.csv` قرار دهید. این فایل باید دارای دو ستون با نامهای `prediction` و `Customer Id` باشد که ردیف i ام ستون `prediction` پیشبینی شما (احتمال تهیه کردن بیمه - عددی بین صفر و یک) برای مشتری ردیف i ام از ستون `Customer Id` باشد (دقت کنید که ستونها باید حتما دارای `header` باشند). بعد از آمادهسازی فایل `output.csv`، آن را برای ما بارگذاری کنید.
<details class="yellow">
<summary>
**توجه**
</summary>
حتما فایل output.csv باید دارای ۳۹۷ سطر و ۲ ستون باشد.
</details>
در این سوال، شما به تحلیل رفتار مشتریان میپردازید.
![توضیح تصویر](https://bayanbox.ir/view/4981133386058029579/basket.jpg)
# دادگان
شما به دادگان تراکنشهای یک فروشگاه آنلاین موادغذایی از [این لینک](/contest/assignments/35055/download_problem_initial_project/118272/) دسترسی دارید. در این سوال، به تمامی خریدهایی که یک مشتری در یک روز انجام میدهد، "سبد" میگوییم:
![توضیح تصویر](https://bayanbox.ir/view/8564290632376169947/Factor.jpg)
هر ردیف دادگان، سفارش یک نوع محصول توسط یک مشتری را طبق جدول زیر نشان میدهد:
| نام ستون | توضیحات ستون |
|:----------|:------------------:|
| Customer Id | شناسه مشتری |
| Date | تاریخ سفارش |
| Product | نام محصول |
# صورت مسئله
ابتدا با استفاده از این دادگان، به ۵ سوال اکتشافی زیر پاسخ دهید (مثال خروجی هر سوال، در زیر آن آورده شدهاست).
1. تعداد محصولات یکتا در کل دادگان، چندتاست؟
```
1000
```
2. میزان فروش به ازای هر روز به صورت میانگین چند است (تا دو رقم بعد از اعشار)؟
```
70.43
```
3. چهار محصولی که کمتر از بقیه در سبد مشتریان قرار گرفتهاند، کدامند (ترتیب مهم نیست)؟
```
cake,apple,coffee,meat
```
4. پنج مشتریای که در سال ۲۰۲۰، بیشترین تعداد "سبد" را داشتهاند، کدامند (ترتیب مهم نیست)؟
```
05XJ2SI7Z3KM,PZ2VNYRNH7UE,ZT6I3ZOEX9AP,IUMEKLUW51PE,HRZ5J6MERGJE
```
5. کدام روز هفته، بیشترین تعداد محصول فروش رفتهاست؟
```
Friday
```
هر کدام از این ۵ سوال بالا، دارای ۲۰ امتیاز هستند (۱۰۰ امتیاز در مجموع).
حال، به تحلیل سبد خرید مشتریان که یکی از تکنیک های کلیدی، خرده فروشان بزرگ برای کشف ارتباط بین اقلام خریداری شدهاست، میپردازید و بدین منظور، از [قوانین وابستگی](https://fa.wikipedia.org/wiki/%DB%8C%D8%A7%D8%AF%DA%AF%DB%8C%D8%B1%DB%8C_%D9%82%D8%A7%D9%86%D9%88%D9%86_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C) استفاده خواهید کرد.
به عنوان مثال، با قانون وابستگی میتوان محاسبه کرد که اگر یک مشتری پیاز و سیب زمینی را در سبد خرید خود قرار داده باشد، با چه احتمالی، او مایل به خرید گوشت همبرگر نیز خواهد بود؟ چنین اطلاعاتی میتوانند در تصمیماتی مانند ارائه تخفیف، قراردادن محصولات در کنار هم و یا پکیج کردن آنها، تاثیر بگذارند.
<details class="blue">
<summary>
**راهنمایی**
</summary>
با مثال زیر، دو معیار قوانین وابستگی که در این سوال نیاز دارید، توضیح داده میشوند. فرض کنید که ۱۰۰ سبد دارید که ۱۰تای آنها شیر، ۸تای آنها کره و ۶ تای آنها هر دو را دارند.
معیار پشتیبانی (`support`)، نشان می دهد که یک مجموعه محصول/محصولات چقدر محبوب است:
$$support(X) = \frac{Number\:of\:baskets\:containing\:product(s)\:X}{Number\:of\:all\:baskets}$$
در مثال بالا، `support(milk)` برابر است با ۰.۱ و `support(milk,butter)` برابر است با ۰.۰۶
معیار اطمینان (`confidence`)، نشان میدهد که هنگام خرید محصول/محصولات `X` چقدر احتمال دارد که محصول/محصولات `Y` خریداری شوند و از این امر به عنوان "الگو" یاد میکنیم:
$$confidence(X->Y)=\frac{support(X,Y)}{support(X)}$$
در مثال بالا، `confidence(milk->butter)` برابر است با ۰.۶
</details>
به استفاده از معیارهای `support` و `confidence`، به دو سوال زیر پاسخ دهید (مثال خروجی هر سوال، در زیر آن آورده شدهاست):
6. پنج محصولی که بیشترین `support` را دارند به ترتیب نزولی کدامند؟
```
cake,apple,coffee,meat,tomato
```
7. از بین مواردی که `support` آنها، حداقل ۰.۰۱ میباشد. دو الگویی که بیشترین `confidence` را دارند، به ترتیب نزولی کدامند؟
```
("cake","potato")->("apple")|("coffee","soda")->("meat")
```
<details class="blue">
<summary>
**راهنمایی**
</summary>
**شاید** بتوانید که از الگوریتم [آپریوری](https://fa.wikipedia.org/wiki/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85_%D8%A2%D9%BE%D8%B1%DB%8C%D9%88%D8%B1%DB%8C)، برای حل سوالات تحلیل سبد خرید، استفاده کنید.
</details>
هر کدام از این ۲ سوال بالا، دارای ۵۰ امتیاز هستند (۱۰۰ امتیاز در مجموع) و در صورتی که به تمامی سوالات، این صفحه پاسخ صحیح دهید. شما بایستی که ۲۰۰ امتیاز کسب کنید.
# ارسال پاسخ
برای ارسال پاسخ، جواب هر سوال را مشابه مثال، در یک سطر از یک فایل `text` بنویسید. در نهایت یک فایل هفت خطی با نام **output.txt** را برای ما بارگذاری کنید (جواب سوال اول در خط اول، سوال دوم در خط دوم، ... سوال هفتم در خط هفتم).
**_در صورتی که جواب سوالی را نمیدانید در سطر مربوطه ۱- وارد کنید._**
## نمونه خروجی
```
1000
70.43
cake,apple,coffee,meat
05XJ2SI7Z3KM,PZ2VNYRNH7UE,ZT6I3ZOEX9AP,IUMEKLUW51PE,HRZ5J6MERGJE
Friday
cake,apple,coffee,meat,tomato
("cake","potato")->("apple")|("coffee","soda")->("meat")
```
<details class="green">
<summary>
**توضیحات**
</summary>
در خط *i* ام جواب سوال *i* ام نوشته شدهاست.
</details>
<details class="yellow">
<summary>
**هشدار**
</summary>
اگر نام فایل شما و ساختار محتویات آن، همانند آنچه در صورت سوال ذکر شدهاست، نباشد؛ امتیازی از سوال دریافت نخواهید کرد.
</details>
به منظور جلوگیری از هر گونه تقلب و شبهه احتمالی که منجر به ضایع شدن حق شما شود، شما بایستی که فایل کد برنامهنویسی (مثلا برای پایتون فایل `.py` یا برای زبان `R` هم فایل `.R`) را در قالب یک فایل زیپ در اینجا بارگذاری نمایید. همچنین اگر که از ابزارهای نرمافزاری استفاده میکنید. خروجی (`export`) آن را در فایل زیپ قرار دهید. در صورتی که پس از پایان زمان مسابقه، این فایل توسط شما بارگذاری نشده باشد، شما از جدول مسابقات **حذف** خواهید شد.
توجه داشته باشید که اگر از `jupter notebook` استفاده می کنید بایستی همانند توضیح بالا، خروجی مورد نظر را دریافت کنید. به عنوان مثال، شما بایستی که از قسمت `file` و زیرقسمت `Download` خروجی `.py` را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای `jupyter` همانند `.ipynb` مورد قبول واقع نخواهند شد.
برای هر سوال که جواب دادید، یک پوشه به نام آن سوال (مانند `Step1`) ایجاد و تمامی کدهای خود را در آن قرار دهید. در نهایت، همه پوشهها را تحت یک پوشه نهایی زیپ کرده و برای ما **فقط یک فایل زیپ** ارسال کنید.
# توجه: از ارسال دادگان بپرهیزید!
با تشکر فراوان