سلام
به مسابقه دستگرمی از مسیر داده لیگ کُدکاپ ۱۴۰۱ خوش آمدید.
برای آشنایی با سیستم داوری مسابقات تحلیل داده و یادگیری ماشین، ویدئو زیر را مشاهده کنید.
قبل از شروع مسابقه، ابتدا موارد زیر را مطالعه کنید:
علی یک علاقمند به فیزیک است و دوست دارد در حوزه های متفاوتی از فیزیک اطلاعاتی بدست آورد. او به سراغ نظریه ریسمان رفته است (string theory) اما به خاطر سرچ اشتباه درگیر یک سوال در علوم کامپیوتر شده است. از آنجا که او مُصِر است جواب را بداند از شما میخواهد در حل این سوال به او کمک کنید.
سوال از این قرار است که شما باید برنامه بنویسید که بتوانند رشته ای(string) را در جمله ای دیگر بیابد.
ورودی شامل دو خط است که در خط اول رشته مورد نظر در خط دوم جمله میآید.
خروجی برنامهی شما باید شامل یک عدد باشد. اگر رشته درون جمله بود عدد یک را چاپ کند در غیر این صورت عدد صفر را چاپ کند.
از آنجایی که اوضاع مالی محمد، سجاد و هادی خیلی خوب شده، تصمیم گرفتند برای تنوع، امسال تعطیلات خود را به جای حیاط خلوت خانه حامد، در یک کشور خارجی سپری کنند. برای همین منظور، این افراد پس از انتخاب کشور مدنظر خود، چهار بلیط فرست کلس تهیه، چمدان های خود را بسته و راهی سفر پرماجرای خود شدند.
آن ها پس از رسیدن به مقصد، به هتل ۵ ستاره از پیش رزرو شده خود رفتند و چمدانهای خود را باز کردند. در همان لحظه محمد احساس سرگیجه و تب و لرز کرد. فردای آن روز حال محمد بدتر شد و مجبور شدند به یک بیمارستان تخصصی برای درمان محمد بروند و پس از درمان، هزینه سنگینی را برای دارو و ویزیت پرداخت کردند. فردای آن روز، حال محمد بهتر شد. پس از ولخرجیهای بسیار این چهار نفر و رفتن به رستوران و مراکز تفریحی گران!، به هتل برگشته و وسایل خود را برای برگشت به ایران آماده کردند، اما...
گذرنامه و ویزاهای حامد و سجاد گم شده و دیگر به دلیل تمام شدن پولشان، نمیتوانند گذرنامه و ویزای جدید بگیرند. هادی که دوست باتجربهتر این اکیپ محسوب میشد، به محمد و حامد و سجاد گفت، اگر قبل از سفر، خودمان را بیمه مسافرتی میکردیم، هم هزینههای ویزیت و دارو محمد را متحمل نمیشدیم و هم میتوانستیم ویزا و گذرنامه حامد و سجاد را دوباره تهیه و هزینه آن را در ایران بپردازیم. همان جا تصمیم گرفتند به محض برگشت، یک شرکت بیمه مسافرتی تاسیس کنند! و از آن جایی که خیلی علاقه به هوش مصنوعی و تحلیل داده نیز دارند، تصمیم گرفتند که یک تحلیلگر داده به تیم خود اضافه کنند. شما از هم اکنون میتوانید در آزمون استخدامی شرکت بیمه مسافرتی حمسه (حامد، محمد، سجاد و هادی) شرکت کنید. 😎
میتوانید دادگان این سوال را از این لینک دریافت کنید.
هر ردیف دادگان آموزش train.csv
، یک رکورد سفر مشتری بوده و مشخصات آن، طبق جدول زیر میباشد:
توضیحات ستون | نام ستون |
---|---|
سن هر مشتری | Age |
بخشی که در آن مشتری مشغول به کار است | Employment Type |
آیا مشتری فارغ التحصیل دانشگاه است؟ | GraduateOrNot |
درآمد سالانه مشتری | AnnualIncome |
تعداد اعضای خانواده مشتری | FamilyMembers |
آیا مشتری از هر بیماری مهم یا شرایطی مانند دیابت، فشار خون بالا یا غیره رنج می برد؟ | ChronicDiseases |
آیا مشتری در طول دو سال گذشته، حداقل چهار سفر داشتهاست؟ | FrequentFlyer |
آیا مشتری تا به حال به یک کشور خارجی سفر کردهاست؟ | EverTravelledAbroad |
آیا مشتری بسته بیمه مسافرتی، خریداری کردهاست؟ | TravelInsurance |
شما میخواهید با بررسی اولیه به اکتشاف در مجموعه دادگان آموزش (train.csv
) بپردازید و به سوالات زیر پاسخ بدهید (مثال خروجی هر سوال، در زیر آن آورده شدهاست).
ابتدا تعداد سطر و سپس تعداد ستونهای این دادگان را به دست آورید (با space
، جدا کنید):
متوسط درآمد سالانه مشتریان چه قدر است (فقط قسمت عدد صحیح)؟
چند نفر از مشتریان سابقه سفر خارجی داشتهاند؟
بیشتر افراد، در بخش خصوصی به کار گرفته شدهاند و یا بخش دولتی؟ چند درصد افراد در آن بخش مشغول هستند؟ (دقت تا دو رقم اعشار با استفاده از تابع round پایتون)
چند درصد از افرادی که بیماری زمینهای دارند، خودشان را برای سفر بیمه کردهاند؟ (دقت تا دو رقم اعشار با استفاده از تابع round پایتون)
در این سوال نیازی به استفاده از قانون بیز نیست و برای محاسبه درصد، افرادی را پیدا کنید که هم بیماری زمینهای دارند و هم بیمه مسافرتی را خریداری کردهاند. به عبارت بهتر برای این قسمت از سوال، افرادی که بیماری زمینه ای دارند و بیمه مسافرتی خریداری کرده اند را پیدا کرده و بر افرادی که بیماری زمینه ای دارند تقسیم کنید، نه همه ی افراد.
این مرحله در مجموع، شامل ۵ سوال (هر سوال، ۲۰ امتیاز) میباشد. در صورتی که به تمامی سوالات پاسخ صحیح بدهید، بایستی که بتوانید ۱۰۰ امتیاز از این مرحله کسب کنید.
برای ارسال پاسخ، جواب هر سوال را مشابه مثال، در یک سطر از یک فایل text
بنویسید. در نهایت یک فایل پنج خطی با نام output.txt را برای ما بارگذاری کنید.
در صورتی که جواب سوالی را نمیدانید در سطر مربوطه ۱- وارد کنید.
فراموش نکنید کد این سوال را در تمرین آخر (بارگذاری کد)، بارگذاری کنید. در صورتی که پس از پایان زمان مسابقه، فایل کدها توسط شما بارگذاری نشده باشد، از جدول مسابقات حذف خواهید شد.
در خط i ام جواب سوال i ام نوشته شدهاست.
چون پاسخ سوال دوم و پنجم را نمیدانستید، به جای آن عدد ۱- نوشتهاید!
فرض کنید که در راه رسیدن به مسابقات جهانی فوتبال، کاپیتان سوباسا تصمیم به استفاده از تحلیل داده برای ارتقای سطح فنی تیم خود گرفته است و به همین منظور شما به عنوان دانشمند داده تیم جذب شدهاید.
در هفته اول کاری خود، شما از تعدادی کارآموز درخواست میکنید که فیلم تمامی بازیهای فصل قبل لیگ را مشاهده کنند و اطلاعات مرتبط با شوتها در هر بازی را به صورت دستی ثبت کنند. خروجی کار در قالب 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 وجود دارد که مشخص می کند شاخص کل بورس در آن روز صعودی بوده یا نزولی. شرح دقیق ستونهای این مجموعه داده در جدول زیر آمده است.
توضیح | ستون |
---|---|
وضعیت شاخص کلی بورس در آن روز. یعنی شاخص نزولی و یعنی شاخص صعودی بوده است | |
یک تیتر خبری مهم مربوط به آن روز |
برای ارزیابی پاسخ شما از معیار F1 استفاده خواهد شد. این معیار به صورت زیر تعریف میشود:
پیشبینیهای مدل خود بر روی دادگان آزمایش (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
را زیپ کرده و فقط همان یک فایل زیپ را در این سوال آپلود کنید.
چون برای سوال «نظریه ریسمان» در خود مسئله، کد ارسال کرده بودید، اینجا نیاز نیست کد این سوال را آپلود کنید.
با تشکر فراوان