سلام
به مسابقه **دستگرمی** از **مسیر داده** لیگ **کُدکاپ ۱۴۰۱** خوش آمدید.
برای آشنایی با سیستم داوری مسابقات تحلیل داده و یادگیری ماشین، ویدئو زیر را مشاهده کنید.
%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) مراجعه کنید.
+ در طول زمان مسابقه میتوانید سوالهای خود را از قسمت "سوال بپرسید" مطرح کنید.
+ بعد از پایان زمان مسابقه، امتیاز افرادی که از روشهای غیرمتناسب با هدف مسابقه (مانند تابع تصادفی) استفاده کرده باشند، صفر میشود و این امر تخلف به حساب میآید.
+ شما مجاز به استفاده از دادگان به اشتراک گذاشته شده در این مسابقه، برای سایر اهداف (آموزشی و غیرآموزشی) **نیستید**.
مقدمه
علی یک علاقمند به فیزیک است و دوست دارد در حوزه های متفاوتی از فیزیک اطلاعاتی بدست آورد. او به سراغ نظریه ریسمان رفته است (string theory) اما به خاطر سرچ اشتباه درگیر یک سوال در علوم کامپیوتر شده است. از آنجا که او مُصِر است جواب را بداند از شما میخواهد در حل این سوال به او کمک کنید.
سوال از این قرار است که شما باید برنامه بنویسید که بتوانند رشته ای(string) را در جمله ای دیگر بیابد.
# ورودی
ورودی شامل دو خط است که در خط اول رشته مورد نظر در خط دوم جمله میآید.
# خروجی
خروجی برنامهی شما باید شامل یک عدد باشد. اگر رشته درون جمله بود عدد یک را چاپ کند در غیر این صورت عدد صفر را چاپ کند.
# مثال
## ورودی نمونه ۱
```
string
string theory is a theoretical framework in particle physics
```
## خروجی نمونه ۱
```
1
```
## ورودی نمونه ۲
```
framework
In cs, a string is traditionally a sequence of characters
```
## خروجی نمونه ۱
```
0
```
نظریه ریسمان
از آنجایی که اوضاع مالی محمد، سجاد و هادی خیلی خوب شده، تصمیم گرفتند برای تنوع، امسال تعطیلات خود را به جای حیاط خلوت خانه حامد، در یک کشور خارجی سپری کنند. برای همین منظور، این افراد پس از انتخاب کشور مدنظر خود، چهار بلیط فرست کلس تهیه، چمدان های خود را بسته و راهی سفر پرماجرای خود شدند.
![توضیح تصویر](https://static.wikia.nocookie.net/familyguy/images/8/8f/Have_gun_will_travel.png/revision/latest?cb=20100627232235)
آن ها پس از رسیدن به مقصد، به هتل ۵ ستاره از پیش رزرو شده خود رفتند و چمدانهای خود را باز کردند. در همان لحظه محمد احساس سرگیجه و تب و لرز کرد. فردای آن روز حال محمد بدتر شد و مجبور شدند به یک بیمارستان تخصصی برای درمان محمد بروند و پس از درمان، هزینه سنگینی را برای دارو و ویزیت پرداخت کردند. فردای آن روز، حال محمد بهتر شد. پس از ولخرجیهای بسیار این چهار نفر و رفتن به رستوران و مراکز تفریحی گران!، به هتل برگشته و وسایل خود را برای برگشت به ایران آماده کردند، اما...
گذرنامه و ویزاهای حامد و سجاد گم شده و دیگر به دلیل تمام شدن پولشان، نمیتوانند گذرنامه و ویزای جدید بگیرند. هادی که دوست باتجربهتر این اکیپ محسوب میشد، به محمد و حامد و سجاد گفت، اگر قبل از سفر، خودمان را بیمه **مسافرتی** میکردیم، هم هزینههای ویزیت و دارو محمد را متحمل نمیشدیم و هم میتوانستیم ویزا و گذرنامه حامد و سجاد را دوباره تهیه و هزینه آن را در ایران بپردازیم. همان جا تصمیم گرفتند به محض برگشت، یک شرکت بیمه مسافرتی تاسیس کنند! و از آن جایی که خیلی علاقه به هوش مصنوعی و تحلیل داده نیز دارند، تصمیم گرفتند که یک تحلیلگر داده به تیم خود اضافه کنند. **شما** از هم اکنون میتوانید در آزمون استخدامی شرکت بیمه مسافرتی **حمسه** (حامد، محمد، سجاد و هادی) شرکت کنید. 😎
# دادگان
میتوانید دادگان این سوال را از [این لینک](/contest/assignments/45362/download_problem_initial_project/156445/) دریافت کنید.
هر ردیف دادگان آموزش `train.csv`، یک رکورد سفر مشتری بوده و مشخصات آن، طبق جدول زیر میباشد:
| توضیحات ستون | نام ستون |
|:------------------:|:----------:|
| سن هر مشتری | Age |
| بخشی که در آن مشتری مشغول به کار است | Employment Type |
| آیا مشتری فارغ التحصیل دانشگاه است؟ | GraduateOrNot |
| درآمد سالانه مشتری | AnnualIncome |
| تعداد اعضای خانواده مشتری | FamilyMembers |
| آیا مشتری از هر بیماری مهم یا شرایطی مانند دیابت، فشار خون بالا یا غیره رنج می برد؟ | ChronicDiseases |
| آیا مشتری در طول دو سال گذشته، حداقل چهار سفر داشتهاست؟ | FrequentFlyer |
| آیا مشتری تا به حال به یک کشور خارجی سفر کردهاست؟ | EverTravelledAbroad |
| آیا مشتری بسته بیمه مسافرتی، خریداری کردهاست؟ | TravelInsurance|
# صورت مسئله
شما میخواهید با بررسی اولیه به اکتشاف در مجموعه دادگان آموزش (`train.csv`) بپردازید و به سوالات زیر پاسخ بدهید (مثال خروجی هر سوال، در زیر آن آورده شدهاست).
1. ابتدا تعداد سطر و سپس تعداد ستونهای این دادگان را به دست آورید (با `space`، جدا کنید):
```
1000 100
```
2. متوسط درآمد سالانه مشتریان چه قدر است (فقط قسمت عدد صحیح)؟
```
5000
```
3. چند نفر از مشتریان سابقه سفر خارجی داشتهاند؟
```
500
```
4. بیشتر افراد، در بخش خصوصی به کار گرفته شدهاند و یا بخش دولتی؟ چند درصد افراد در آن بخش مشغول هستند؟ (دقت تا دو رقم اعشار با استفاده از تابع **round** پایتون)
```
Government Sector 12.34
```
5. چند درصد از افرادی که بیماری زمینهای دارند، خودشان را برای سفر بیمه کردهاند؟ (دقت تا دو رقم اعشار با استفاده از تابع **round** پایتون)
<details class="violet">
<summary>**توجه**</summary>
در این سوال نیازی به استفاده از قانون بیز نیست و برای محاسبه درصد، افرادی را پیدا کنید که هم بیماری زمینهای دارند و هم بیمه مسافرتی را خریداری کردهاند. به عبارت بهتر برای این قسمت از سوال، افرادی که بیماری زمینه ای دارند و بیمه مسافرتی خریداری کرده اند را پیدا کرده و بر افرادی که بیماری زمینه ای دارند تقسیم کنید، نه همه ی افراد.
</details>
```
70.75
```
این مرحله در مجموع، شامل ۵ سوال (هر سوال، ۲۰ امتیاز) میباشد. در صورتی که به تمامی سوالات پاسخ صحیح بدهید، بایستی که بتوانید ۱۰۰ امتیاز از این مرحله کسب کنید.
# خروجی
برای ارسال پاسخ، جواب هر سوال را مشابه مثال، در یک سطر از یک فایل `text` بنویسید. در نهایت یک فایل پنج خطی با نام **output.txt** را برای ما بارگذاری کنید.
**_در صورتی که جواب سوالی را نمیدانید در سطر مربوطه ۱- وارد کنید._**
<details class="red">
<summary>**هشدار ارسال کد**</summary>
فراموش نکنید کد این سوال را در تمرین آخر (بارگذاری کد)، بارگذاری کنید. در صورتی که پس از پایان زمان مسابقه، فایل کدها توسط شما بارگذاری نشده باشد، از جدول مسابقات حذف خواهید شد.
</details>
## نمونه خروجی ۱
```
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>
اکتشاف بیمه
**فرض کنید** که در راه رسیدن به مسابقات جهانی فوتبال، [کاپیتان سوباسا](https://fa.wikipedia.org/wiki/%DA%A9%D8%A7%D9%BE%DB%8C%D8%AA%D8%A7%D9%86_%D8%B3%D9%88%D8%A8%D8%A7%D8%B3%D8%A7) تصمیم به استفاده از تحلیل داده برای ارتقای سطح فنی تیم خود گرفته است و به همین منظور **شما** به عنوان دانشمند داده تیم جذب شدهاید.
در هفته اول کاری خود، شما از تعدادی *کارآموز* درخواست میکنید که فیلم تمامی بازیهای فصل قبل لیگ را مشاهده کنند و اطلاعات مرتبط با شوتها در هر بازی را به صورت دستی ثبت کنند. خروجی کار در قالب `csv`، تحویل شما شده است. شما میخواهید اقدام به ساختن مدل احتمال گُل (ارزیابی موقعیت شوت) با استفاده از دادگان آموزش (`train.csv`) بکنید. این مدل بایستی با دریافت مشخصات مربوط به شوت به عنوان ورودی، احتمال گُل شدن (عددی بین صفر و یک) آن را به عنوان خروجی برگرداند.
به عنوان مثال، شما فکر میکنید مُدل شما احتمال گُل شدن [صحنه زیر](https://bayanbox.ir/view/5540254558017621225/Taremi.mp4) را چند درصد اعلام می کند؟
![توضیح تصویر](https://bayanbox.ir/view/8127073662025160404/Taremi.png)
با توجه به این که شما، به دنبال ساخت یک *مُدل مستقل از بازیکن و بازی* هستید، در دادگان آزمایش (`test.csv`) به ستونهای `playerId` و `matchId` دسترسی ندارید. همچنین در نظر داشته باشید که در این مرحله، *گُل به خودی* به عنوان خروجی گُل برای شوت در نظر گرفته **میشود**.
# دادگان
داده های مربوط به سوال را می توانید از [این لینک](/contest/assignments/45362/download_problem_initial_project/156444/) دریافت کنید.
| نام ستون | توضیح ستون |
|:------------------:|:------------------:|
|matchId|شناسه بازی|
|playerId|شناسه بازیکن شوتزننده|
|playType|موقعیت بازی که در آن ضربه زده شد (جریان بازی، پنالتی، ضربه آزاد مستقیم، مستقیم از کرنر)|
|bodyPart|بخشی از بدن که با آن شوت زده شدهاست (پای چپ، پای راست، سَر، سایر)|
|x|موقعیت شوت در زمین به متر (مختصات `x`)|
|y|موقعیت شوت در زمین به متر (مختصات `y`)|
|interveningOpponents|تعداد بازیکنان حریف که در لحظه شوتزدن مانع دید شوتزننده به دروازه شده بودند|
|interveningTeammates|تعداد همتیمیهایی که در لحظه شوت زدن مانع دید شوتزننده به دروازه شده بودند|
|interferenceOnShooter| میزان دخالت مستقیم تیم مدافع بر روی شوتزننده (کم - هیچ بازیکن تیم حریف در یک متری شوتزننده نیست، متوسط - یک بازیکن حریف در ۱متری شوتزننده قرار دارد، زیاد - بیشتر از یک بازیکن حریف در ۱متری شوتزننده قرار دارند)|
|minute|دقیقه زدن شوت|
|second|ثانیه زدن شوت|
|outcome|نتیجه شوت (برخورد به دفاع، موقعیت از دست رفته، برخورد به تیردروازه، مهار توسط دروازهبان، گُل، گُل بهخودی)|
مبدا مختصات (۰,۰) مرکز دروازهی تحت شوت میباشد و مختصات (x,y)، فاصله طولی (x) و عرضی (y) محل زدن شوت تا مبدا مختصات را به متر تعیین میکند، به عنوان مثال، موقعیت پنالتی در مختصات (۱۱,۰) میباشد.
برای آشنایی بیشتر با زمین فوتبال و ابعاد قسمتهای مختلف آن، شما به عکس زیر از [ویکیپدیای فارسی](https://fa.wikipedia.org/wiki/%D8%B2%D9%85%DB%8C%D9%86_%D9%81%D9%88%D8%AA%D8%A8%D8%A7%D9%84) دسترسی دارید.
![جزییاتزمینفوتبال](https://upload.wikimedia.org/wikipedia/commons/thumb/c/cf/Football_pitch_metric.svg/800px-Football_pitch_metric.svg.png)
# ارزیابی
برای ارزیابی مُدل شما از سطح زیر ناحیه نمودار ROC استفاده میشود. برای مطالعه بیشتر در مورد این نمودار میتوانید [ویکیپدیا](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) یا [راهنمای کوتاه نکات و ترفندهای یادگیری ماشین](https://stanford.edu/~shervine/l/fa/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks) را مطالعه کنید.
نتیجه AUC ROC مُدل شما بر روی دادگان آزمایش در عدد ۱۰۰۰ ضرب شده و به عنوان امتیاز این مرحله در نظر گرفته میشود (بالاترین امتیاز ممکن از این مرحله ۱۰۰۰ میباشد).
داوری این سوال قبل از پایان مسابقه، تنها بر اساس ۳۰ درصد از دادگان آزمایش (`test`) خواهد بود. پس از اتمام مسابقه، برای بهروزرسانی نهایی جدول امتیازات از ۱۰۰ درصد دادگان آزمایش استفاده خواهد شد؛ این کار برای جلوگیری از بیشبرازش (`overfit`) روی دادگان آزمایش انجام میشود.
# خروجی
پیشبینیهای مدل خود بر روی دادگان آزمایش (`test.csv`) را در فایلی با نام `output.csv` قرار دهید. این فایل باید دارای یک ستون با نام `prediction` باشد که ردیف i ام آن پیشبینی شما (احتمال گُلشدن - عددی بین صفر و یک) برای شوت ردیف i ام از دادگان آزمایش باشد (دقت کنید که ستون باید حتما دارای `header` باشد). بعد از آمادهسازی فایل `output.csv`، آن را برای ما بارگذاری کنید.
<details class="yellow">
<summary>
**توجه**
</summary>
انتظار میرود افرادی که دارای توانایی آشنایی با حوزه جدید و مسلط به پیشپردازش، feature engineering و اصول اولیه یادگیریماشین هستند، بتوانند این سوال را حل کنند.
</details>
<details class="red">
<summary>**هشدار ارسال کد**</summary>
فراموش نکنید کد این سوال را در تمرین آخر (بارگذاری کد)، بارگذاری کنید. در صورتی که پس از پایان زمان مسابقه، فایل کدها توسط شما بارگذاری نشده باشد، از جدول مسابقات حذف خواهید شد.
</details>
احتمال گُل
محمد تصمیم گرفته است تا در کنار کار خود در شرکت الک دولک، در اوقات فراغت خود به تحلیل بازار بورس جهانی بپردازد. محمد از تاثیر رخدادهای مهم جهانی بر روی بازار بورس به خوبی مطلع است و به همین علت، مجموعه دادهای را در راستای تحلیل بورس آماده کرده است.
حالا سر محمد بسیار شلوغ است و از شما که دیتا ساینتیست خبرهای هستید میخواهد تا مدلی جهت پیش بینی صعودی یا نزولی بودن شاخص کل بورس ارائه دهید. با استفاده از دادههای موجود در فایل **train.csv** مدل خود را آموزش دهید.یک فایل **test.csv** نیز قرار داده شده است که ورودیهای تست شما میباشد.
![توضیح تصویر](https://img.freepik.com/premium-vector/stock-market-wizard-expertise-trader-make-profit-from-crypto-bitcoin-using-magic-get-rich-like-miracle-concept-businessman-investment-wizard-using-magic-wand-make-stock-price-rising-up_212586-1191.jpg?w=2000)
# دادگان
داده های مربوط به سوال را می توانید از [این لینک](/contest/assignments/45362/download_problem_initial_project/156447/) دریافت کنید.
در این مجموعه داده هر سطر مربوط به یک روز است که در آن ۲۵ سرفصل خبری مهم مربوط آن روز را از خبرگزاریهای مطرح استخراج کرده است. همچنین یک ستون به نام Label وجود دارد که مشخص می کند شاخص کل بورس در آن روز صعودی بوده یا نزولی. شرح دقیق ستونهای این مجموعه داده در جدول زیر آمده است.
|توضیح|ستون|
|--- |--- |
|وضعیت شاخص کلی بورس در آن روز. $0$ یعنی شاخص نزولی و $1$ یعنی شاخص صعودی بوده است| $Label$ |
| یک تیتر خبری مهم مربوط به آن روز| $Top_{i} \;\;\;\;\;\; 0 \lt i \lt26$ |
# ارزیابی
برای ارزیابی پاسخ شما از معیار F1 استفاده خواهد شد. این معیار به صورت زیر تعریف میشود:
$$F_1 = 2 \times \frac{precision \times recall}{precision + recall}$$
# خروجی
پیشبینیهای مدل خود بر روی دادگان آزمایش (`test.csv`) را در فایلی با نام `output.csv` قرار دهید. این فایل باید دارای یک ستون با نام `Label` باشد که ردیف i ام آن پیشبینی شما (صعودی یا نزولی بودن شاخص - به ترتیب ۱ یا ۰) برای تیتر خبری ردیف i ام از دادگان آزمایش باشد.
(دقت کنید که ستون باید حتما دارای `header` باشد). بعد از آمادهسازی فایل `output.csv`، آن را برای ما بارگذاری کنید.
<details class="red">
<summary>**هشدار ارسال کد**</summary>
فراموش نکنید کد این سوال را در تمرین آخر (بارگذاری کد)، بارگذاری کنید. در صورتی که پس از پایان زمان مسابقه، فایل کدها توسط شما بارگذاری نشده باشد، از جدول مسابقات حذف خواهید شد.
</details>
تحلیل بورسی
به منظور جلوگیری از هر گونه تقلب و شبهه احتمالی که منجر به ضایع شدن حق شما شود، شما بایستی که فایل کد برنامهنویسی (مثلا برای پایتون فایل `.py` یا برای زبان `R` هم فایل `.R`) را در قالب یک فایل زیپ در اینجا بارگذاری نمایید. همچنین اگر که از ابزارهای نرمافزاری استفاده میکنید. خروجی (`export`) آن را در فایل زیپ قرار دهید.
### در صورتی که پس از پایان زمان مسابقه، این فایل توسط شما بارگذاری نشده باشد، شما از جدول مسابقات **حذف** خواهید شد.
توجه داشته باشید که اگر از `jupter notebook` استفاده می کنید بایستی همانند توضیح بالا، خروجی مورد نظر را دریافت کنید. به عنوان مثال، شما بایستی که از قسمت `file` و زیرقسمت `Download` خروجی `.py` را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای `jupyter` همانند `.ipynb` مورد قبول واقع نخواهند شد.
برای هر سوال که جواب دادید، یک فایل کد به نام آن سوال ایجاد و تمامی کدهای خود را در آن قرار دهید. در نهایت، همه فایلها را تحت یک پوشه نهایی زیپ کرده و برای ما **فقط یک فایل زیپ** ارسال کنید.
برای سوال «اکتشاف بیمه» یک فایل به اسم `ekteshaf_bime` ایجاد کنید.
برای سوال «احتمال گل» یک فایل به اسم `ehtemal_goal` ایجاد کنید.
برای سوال «تحلیل بورسی» یک فایل به اسم `tahlil_boorsi` ایجاد کنید.
در نهایت سه فایل `ekteshaf_bime` و `ehtemal_goal` و `tahlil_boorsi` را زیپ کرده و فقط همان یک فایل زیپ را در این سوال آپلود کنید.
<details class="red">
<summary>**نظریه ریسمان**</summary>
چون برای سوال «نظریه ریسمان» در خود مسئله، کد ارسال کرده بودید، اینجا **نیاز نیست** کد این سوال را آپلود کنید.
</details>
# توجه: از ارسال دادگان بپرهیزید!
با تشکر فراوان