مقدمه


سلام

به مسابقه دست‌گرمی از مسیر داده لیگ کُدکاپ ۱۴۰۱ خوش آمدید.

برای آشنایی با سیستم داوری مسابقات تحلیل داده و یادگیری ماشین، ویدئو زیر را مشاهده کنید.

قبل از شروع مسابقه، ابتدا موارد زیر را مطالعه‌ کنید:

  • این مسابقه، دارای ۴ سوال برای ۱۰ ساعت می‌باشد.
  • پیش از پایان زمان مسابقه، کُد سوالات خود را در بخش "بارگذاری کد" قرار دهید. در صورتی که پس از پایان زمان مسابقه، فایل کدها توسط شما بارگذاری نشده باشد، از جدول مسابقات حذف خواهید شد.
  • این مسابقه در مجموع ۱۳۰۰ امتیاز دارد ولی هیچ تاثیری در نفرات برتر مسابقات ندارد. به عنوان مثال اگر شما حتی هیچ امتیازی نیز کسب نکنید، تاثیری در مسابقات بعدی مسیر داده، ندارد. هدف این مسابقه، صرفا آشنایی با سوالات داده و سامانه کوئراست.
  • محدودیتی برای شما در انتخاب ابزار نرم افزاری یا زبان برنامه‌نویسی وجود ندارد.
  • برای مطالعه قوانین شرکت در مسابقه به اینجا مراجعه کنید.
  • در طول زمان مسابقه می‌توانید سوال‌های خود را از قسمت "سوال بپرسید" مطرح کنید.
  • بعد از پایان زمان مسابقه، امتیاز افرادی که از روش‌های غیرمتناسب با هدف مسابقه (مانند تابع تصادفی) استفاده کرده‌ باشند، صفر می‌شود و این امر تخلف به حساب می‌آید.
  • شما مجاز به استفاده از دادگان به اشتراک گذاشته شده در این مسابقه، برای سایر اهداف (آموزشی و غیرآموزشی) نیستید.

نظریه ریسمان


علی یک علاقمند به فیزیک است و دوست دارد در حوزه های متفاوتی از فیزیک اطلاعاتی بدست آورد. او به سراغ نظریه ریسمان رفته است (string theory) اما به خاطر سرچ اشتباه درگیر یک سوال در علوم کامپیوتر شده است. از آنجا که او مُصِر است جواب را بداند از شما می‌خواهد در حل این سوال به او کمک کنید.

سوال از این قرار است که شما باید برنامه بنویسید که بتوانند رشته ای(string) را در جمله ای دیگر بیابد.

ورودی🔗

ورودی شامل دو خط است که در خط اول رشته مورد نظر در خط دوم جمله می‌آید.

خروجی🔗

خروجی برنامه‌ی شما باید شامل یک عدد باشد. اگر رشته درون جمله بود عدد یک را چاپ کند در غیر این صورت عدد صفر را چاپ کند.

مثال🔗

ورودی نمونه ۱🔗

string 
string theory is a theoretical framework in particle physics
Plain text

خروجی نمونه ۱🔗

1
Plain text

ورودی نمونه ۲🔗

framework 
In cs, a string is traditionally a sequence of characters
Plain text

خروجی نمونه ۱🔗

0
Plain text

اکتشاف بیمه


از آن‌جایی که اوضاع مالی محمد، سجاد و هادی خیلی خوب شده، تصمیم گرفتند برای تنوع، امسال تعطیلات خود را به جای حیاط خلوت خانه حامد، در یک کشور خارجی سپری کنند. برای همین منظور، این افراد پس از انتخاب کشور مدنظر خود، چهار بلیط فرست کلس تهیه، چمدان های خود را بسته و راهی سفر پرماجرای خود شدند.

توضیح تصویر

آن ها پس از رسیدن به مقصد، به هتل ۵ ستاره از پیش رزرو شده خود رفتند و چمدان‌های خود را باز کردند. در همان لحظه محمد احساس سرگیجه و تب و لرز کرد. فردای آن روز حال محمد بدتر شد و مجبور شدند به یک بیمارستان تخصصی برای درمان محمد بروند و پس از درمان، هزینه سنگینی را برای دارو و ویزیت پرداخت کردند. فردای آن روز، حال محمد بهتر شد. پس از ولخرجی‌های‌ بسیار این چهار نفر و رفتن به رستوران و مراکز تفریحی گران!، به هتل برگشته و وسایل خود را برای برگشت به ایران آماده کردند، اما...

گذرنامه و ویزاهای حامد و سجاد گم شده و دیگر به دلیل تمام شدن پولشان، نمی‌توانند گذرنامه و ویزای جدید بگیرند. هادی که دوست باتجربه‌تر این اکیپ محسوب می‌شد، به محمد و حامد و سجاد گفت، اگر قبل از سفر، خودمان را بیمه مسافرتی می‌کردیم، هم هزینه‌های ویزیت و دارو محمد را متحمل نمی‌شدیم و هم می‌توانستیم ویزا و گذرنامه حامد و سجاد را دوباره تهیه و هزینه آن را در ایران بپردازیم. همان جا تصمیم گرفتند به محض برگشت، یک شرکت بیمه مسافرتی تاسیس کنند! و از آن جایی که خیلی علاقه به هوش مصنوعی و تحلیل داده نیز دارند، تصمیم گرفتند که یک تحلیل‌گر داده به تیم خود اضافه کنند. شما از هم اکنون می‌توانید در آزمون استخدامی شرکت بیمه مسافرتی حمسه (حامد، محمد، سجاد و هادی) شرکت کنید. 😎

دادگان🔗

می‌توانید دادگان این سوال را از این لینک دریافت کنید. هر ردیف دادگان آموزش train.csv، یک رکورد سفر مشتری بوده و مشخصات آن، طبق جدول زیر می‌باشد:

توضیحات ستون نام ستون
سن هر مشتری Age
بخشی که در آن مشتری مشغول به کار است Employment Type
آیا مشتری فارغ التحصیل دانشگاه‌ است؟ GraduateOrNot
درآمد سالانه مشتری AnnualIncome
تعداد اعضای خانواده مشتری FamilyMembers
آیا مشتری از هر بیماری مهم یا شرایطی مانند دیابت، فشار خون بالا یا غیره رنج می برد؟ ChronicDiseases
آیا مشتری در طول دو سال گذشته، حداقل چهار سفر داشته‌است؟ FrequentFlyer
آیا مشتری تا به حال به یک کشور خارجی سفر کرده‌است؟ EverTravelledAbroad
آیا مشتری بسته بیمه مسافرتی، خریداری کرده‌است؟ TravelInsurance

صورت مسئله🔗

شما می‌خواهید با بررسی اولیه به اکتشاف در مجموعه دادگان آموزش (train.csv) بپردازید و به سوالات زیر پاسخ بدهید (مثال خروجی هر سوال، در زیر آن آورده شده‌است).

  1. ابتدا تعداد سطر و سپس تعداد ستون‌های این دادگان را به دست آورید‌ (با space، جدا کنید):

    1000 100
    Plain text
  2. متوسط درآمد سالانه مشتریان چه‌ قدر است (فقط قسمت عدد صحیح)؟

    5000
    Plain text
  3. چند نفر از مشتریان سابقه سفر خارجی داشته‌اند؟

    500
    Plain text
  4. بیشتر افراد، در بخش خصوصی به کار گرفته شده‌اند و یا بخش دولتی؟ چند درصد افراد در آن بخش مشغول هستند؟ (دقت تا دو رقم اعشار با استفاده از تابع round پایتون)

    Government Sector 12.34
    Plain text
  5. چند درصد از افرادی که بیماری زمینه‌ای دارند، خودشان را برای سفر بیمه کرده‌اند؟ (دقت تا دو رقم اعشار با استفاده از تابع round پایتون)

توجه

در این سوال نیازی به استفاده از قانون بیز نیست و برای محاسبه درصد، افرادی را پیدا کنید که هم بیماری زمینه‌ای دارند و هم بیمه مسافرتی را خریداری کرده‌اند. به عبارت بهتر برای این قسمت از سوال، افرادی که بیماری زمینه ای دارند و بیمه مسافرتی خریداری کرده اند را پیدا کرده و بر افرادی که بیماری زمینه ای دارند تقسیم کنید، نه همه ی افراد.

70.75
Plain text

این مرحله در مجموع، شامل ۵ سوال (هر سوال، ۲۰ امتیاز) می‌باشد. در صورتی که به تمامی سوالات پاسخ صحیح بدهید، بایستی که بتوانید ۱۰۰ امتیاز از این مرحله کسب کنید.

خروجی🔗

برای ارسال پاسخ، جواب هر سوال را مشابه‌ مثال، در یک سطر از یک فایل text بنویسید. در نهایت یک فایل پنج خطی با نام output.txt را برای ما بارگذاری کنید.

در صورتی که جواب سوالی را نمی‌دانید در سطر مربوطه ۱- وارد کنید.

هشدار ارسال کد

فراموش نکنید کد این سوال را در تمرین آخر (بارگذاری کد)، بارگذاری کنید. در صورتی که پس از پایان زمان مسابقه، فایل کدها توسط شما بارگذاری نشده باشد، از جدول مسابقات حذف خواهید شد.

نمونه خروجی ۱🔗

1000 100
5000
500
Government Sector 12.34
70.75
Plain text
توضیحات

در خط i ام جواب سوال i ام نوشته شده‌است.

نمونه خروجی ۲🔗

200 200
-1
100
Private Sector/Self Employed 43.21
-1
Plain text
توضیحات

چون پاسخ سوال دوم و پنجم را نمی‌دانستید، به جای آن عدد ۱- نوشته‌اید!

احتمال گُل


فرض کنید که در راه رسیدن به مسابقات ‌جهانی فوتبال، کاپیتان سوباسا تصمیم به استفاده از تحلیل داده برای ارتقای سطح‌ فنی تیم خود گرفته است و به همین منظور شما به عنوان دانشمند‌ داده‌ تیم جذب شده‌اید. در هفته اول کاری خود، شما از تعدادی کارآموز درخواست می‌کنید که فیلم تمامی بازی‌های فصل قبل لیگ را مشاهده کنند و اطلاعات مرتبط با شوت‌ها در هر بازی را به صورت دستی ثبت کنند. خروجی کار در قالب csv، تحویل شما شده است. شما می‌خواهید اقدام به ساختن مدل احتمال گُل (ارزیابی موقعیت شوت) با استفاده از دادگان آموزش (train.csv) بکنید. این مدل بایستی با دریافت مشخصات مربوط به شوت به عنوان ورودی، احتمال گُل شدن (عددی بین صفر و یک) آن را به عنوان خروجی برگرداند.

به عنوان مثال، شما فکر می‌کنید مُدل شما احتمال گُل شدن صحنه زیر را چند درصد اعلام می کند؟

توضیح تصویر

با توجه به این که شما، به دنبال ساخت یک مُدل مستقل از ‌بازیکن و بازی هستید، در دادگان آزمایش (test.csv) به ستون‌های playerId‍‍‍ و matchId دسترسی ندارید. همچنین در نظر داشته باشید که در این مرحله، گُل ‌به ‌خودی به عنوان خروجی گُل برای شوت در نظر گرفته می‌شود.

دادگان🔗

داده های مربوط به سوال را می توانید از این لینک دریافت کنید.

نام ستون توضیح ستون
matchId شناسه بازی
playerId شناسه بازیکن شوت‌زننده
playType موقعیت بازی که در آن ضربه زده شد (جریان‌ بازی، پنالتی، ضربه‌ آزاد ‌مستقیم، مستقیم ‌از ‌کرنر)
bodyPart بخشی از بدن که با آن شوت زده شده‌است (پای چپ، پای راست، سَر، سایر)
x موقعیت شوت در زمین به متر (مختصات x)
y موقعیت شوت در زمین به متر (مختصات y)
interveningOpponents تعداد بازیکنان حریف که در لحظه شوت‌زدن مانع دید شوت‌زننده به دروازه شده بودند
interveningTeammates تعداد هم‌تیمی‌هایی که در لحظه شوت زدن مانع دید شوت‌زننده به دروازه شده بودند
interferenceOnShooter میزان دخالت مستقیم تیم مدافع بر روی شوت‌زننده (کم - هیچ بازیکن تیم حریف در یک متری شوت‌زننده نیست، متوسط - یک بازیکن حریف در ۱متری شوت‌زننده قرار دارد، زیاد - بیشتر از یک بازیکن حریف در ۱متری شوت‌زننده قرار دارند)
minute دقیقه زدن شوت
second ثانیه زدن شوت
outcome نتیجه شوت (برخورد به دفاع، موقعیت از دست رفته، برخورد به تیردروازه، مهار توسط دروازه‌بان، گُل، گُل به‌خودی)

مبدا مختصات (۰,۰) مرکز دروازه‌ی تحت شوت می‌باشد و مختصات (x,y)، فاصله طولی (x) و عرضی (y) محل زدن شوت تا مبدا مختصات‌ را به متر تعیین می‌کند، به عنوان مثال، موقعیت پنالتی در مختصات (۱۱,۰) می‌باشد.

برای آشنایی بیشتر با زمین فوتبال و ابعاد قسمت‌های مختلف آن، شما به عکس زیر از ویکی‌پدیای فارسی دسترسی دارید.

جزییات‌زمین‌فوتبال

ارزیابی🔗

برای ارزیابی مُدل شما از سطح زیر ناحیه نمودار ROC استفاده می‌شود. برای مطالعه بیشتر در مورد این نمودار می‌توانید ویکی‌پدیا یا راهنمای کوتاه نکات و ترفندهای یادگیری ماشین را مطالعه کنید.

نتیجه AUC ROC مُدل شما بر روی دادگان آزمایش در عدد ۱۰۰۰ ضرب شده و به عنوان امتیاز این مرحله در نظر گرفته می‌شود (بالاترین امتیاز ممکن از این مرحله ۱۰۰۰ می‌باشد).

داوری این سوال قبل از پایان مسابقه، تنها بر اساس ۳۰ درصد از دادگان آزمایش (test) خواهد بود. پس از اتمام مسابقه، برای به‌روزرسانی نهایی جدول امتیازات از ۱۰۰ درصد دادگان آزمایش استفاده خواهد شد؛ این کار برای جلوگیری از بیش‌برازش (overfit‍‍‍) روی دادگان آزمایش انجام می‌شود.

خروجی🔗

پیش‌بینی‌های مدل خود بر روی دادگان آزمایش (‍‍test.csv) را در فایلی با نام output.csv قرار دهید. این فایل باید دارای یک ستون با نام prediction باشد که ردیف i ام آن پیش‌بینی شما (احتمال گُل‌شدن - عددی بین صفر و یک) برای شوت ردیف i ام از دادگان آزمایش باشد (دقت کنید که ستون باید حتما دارای header باشد). بعد از آماده‌سازی فایل output.csv، آن را برای ما بارگذاری کنید.

توجه

انتظار می‌رود افرادی که دارای توانایی آشنایی با حوزه جدید و مسلط به پیش‌پردازش، feature engineering و اصول اولیه یادگیری‌ماشین هستند، بتوانند این سوال را حل کنند.

هشدار ارسال کد

فراموش نکنید کد این سوال را در تمرین آخر (بارگذاری کد)، بارگذاری کنید. در صورتی که پس از پایان زمان مسابقه، فایل کدها توسط شما بارگذاری نشده باشد، از جدول مسابقات حذف خواهید شد.

تحلیل بورسی


محمد تصمیم گرفته است تا در کنار کار خود در شرکت الک دولک، در اوقات فراغت خود به تحلیل بازار بورس جهانی بپردازد. محمد از تاثیر رخدادهای مهم جهانی بر روی بازار بورس به خوبی مطلع است و به همین علت، مجموعه داده‌ای را در راستای تحلیل بورس آماده کرده است. حالا سر محمد بسیار شلوغ است و از شما که دیتا ساینتیست خبره‌ای هستید می‌خواهد تا مدلی جهت پیش بینی صعودی یا نزولی بودن شاخص کل بورس ارائه دهید. با استفاده از داده‌های موجود در فایل train.csv مدل خود را آموزش دهید.یک فایل test.csv نیز قرار داده شده است که ورودی‌های تست شما می‌باشد.

توضیح تصویر

دادگان🔗

داده های مربوط به سوال را می توانید از این لینک دریافت کنید.

در این مجموعه داده هر سطر مربوط به یک روز است که در آن ۲۵ سرفصل خبری مهم مربوط آن روز را از خبرگزاری‌های مطرح استخراج کرده است. همچنین یک ستون به نام Label وجود دارد که مشخص می کند شاخص کل بورس در آن روز صعودی بوده یا نزولی. شرح دقیق ستون‌های این مجموعه داده در جدول زیر آمده است.

توضیح ستون
وضعیت شاخص کلی بورس در آن روز. 00 یعنی شاخص نزولی و 11 یعنی شاخص صعودی بوده است LabelLabel
یک تیتر خبری مهم مربوط به آن روز Topi0<i<26Top_{i} \;\;\;\;\;\; 0 \lt i \lt26

ارزیابی🔗

برای ارزیابی پاسخ شما از معیار F1 استفاده خواهد شد. این معیار به صورت زیر تعریف می‌شود: F1=2×precision×recallprecision+recallF_1 = 2 \times \frac{precision \times recall}{precision + recall}

خروجی🔗

پیش‌بینی‌های مدل خود بر روی دادگان آزمایش (‍‍test.csv) را در فایلی با نام output.csv قرار دهید. این فایل باید دارای یک ستون با نام Label باشد که ردیف i ام آن پیش‌بینی شما (صعودی یا نزولی بودن شاخص - به ترتیب ۱ یا ۰) برای تیتر خبری ردیف i ام از دادگان آزمایش باشد. (دقت کنید که ستون باید حتما دارای header باشد). بعد از آماده‌سازی فایل output.csv، آن را برای ما بارگذاری کنید.

هشدار ارسال کد

فراموش نکنید کد این سوال را در تمرین آخر (بارگذاری کد)، بارگذاری کنید. در صورتی که پس از پایان زمان مسابقه، فایل کدها توسط شما بارگذاری نشده باشد، از جدول مسابقات حذف خواهید شد.

بارگذاری کد


به منظور جلوگیری از هر گونه تقلب و شبهه احتمالی که منجر به ضایع شدن حق شما شود، شما بایستی که فایل کد برنامه‌نویسی (مثلا برای پایتون فایل .py یا برای زبان R هم فایل ‍‍.R) را در قالب یک فایل زیپ در اینجا بارگذاری نمایید. همچنین اگر که از ابزارهای نرم‌افزاری استفاده می‌کنید. خروجی (export) آن را در فایل زیپ قرار دهید.

در صورتی که پس از پایان زمان مسابقه، این فایل توسط شما بارگذاری نشده باشد، شما از جدول مسابقات حذف خواهید شد.🔗

توجه داشته باشید که اگر از jupter notebook استفاده می کنید بایستی همانند توضیح بالا، خروجی مورد نظر را دریافت کنید. به عنوان مثال، شما بایستی که از قسمت file و زیرقسمت Download خروجی .py را دریافت و برای ارسال در نظر بگیرید. ارسال فایل‌های jupyter همانند ‍‍.ipynb مورد قبول واقع نخواهند شد.

برای هر سوال که جواب دادید، یک فایل کد به نام آن سوال ایجاد و تمامی کدهای خود را در آن قرار دهید. در نهایت، همه‌ فایل‌ها را تحت یک پوشه نهایی زیپ کرده و برای ما فقط یک فایل زیپ ارسال کنید.

برای سوال «اکتشاف بیمه» یک فایل به اسم ekteshaf_bime ایجاد کنید.

برای سوال «احتمال گل» یک فایل به اسم ehtemal_goal ایجاد کنید.

برای سوال «تحلیل بورسی» یک فایل به اسم tahlil_boorsi ایجاد کنید.

در نهایت سه فایل ekteshaf_bime و ehtemal_goal و tahlil_boorsi را زیپ کرده و فقط همان یک فایل زیپ را در این سوال آپلود کنید.

نظریه ریسمان

چون برای سوال «نظریه ریسمان» در خود مسئله، کد ارسال کرده بودید، اینجا نیاز نیست کد این سوال را آپلود کنید.

توجه: از ارسال دادگان بپرهیزید!🔗

با تشکر فراوان