مقدمه


سلام

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

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

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

  • این مسابقه، دارای ۳ سوال برای ۳ ساعت می‌باشد.
  • محدودیتی برای شما در انتخاب ابزار نرم افزاری یا زبان برنامه‌نویسی وجود ندارد.
  • برای مطالعه قوانین شرکت در مسابقه به اینجا مراجعه کنید.
  • در طول زمان مسابقه می‌توانید سوال‌های خود را از قسمت "سوال بپرسید" مطرح کنید.
  • پیش از پایان زمان مسابقه، کُد سوالات خود را در بخش "بارگذاری کد" قرار دهید.
  • این مسابقه در مجموع ۳۵۰ امتیاز دارد و افراد برتر، آن‌هایی هستند که بیشترین امتیازها را در مجموع کسب کنند.
  • بعد از پایان زمان مسابقه، امتیاز افرادی که از روش‌های غیرمتناسب با هدف مسابقه (مانند تابع تصادفی) استفاده کرده‌ باشند، صفر می‌شود و این امر تخلف به حساب می‌آید.
  • شما مجاز به استفاده از دادگان به اشتراک گذاشته شده در این مسابقه، برای سایر اهداف (آموزشی و غیرآموزشی) نیستید.
  • وبینار آموزشی این مسابقه در روز شنبه ۶ آذر ساعت ۱۸ برگزار خواهد شد که ابتدا آمار مسابقه را بررسی می‌کنیم و در ادامه راه حل سوالات را خواهیم دید. برای شرکت در وبینار، از طریق این لینک اقدام به ثبت‌نام کنید.
  • لینک وبینار و فایل‌های توضیح داده شده در وبینار، بعد از گذشت چند روز از پایان مسابقه در https://github.com/QueraTeam/data-contests قرار داده می‌شوند.
  • بعد از برگزاری وبینار آموزشی، یک نظرسنجی در مورد مسابقه برای شما ارسال می‌گردد. لطفا با پُر کردن این نظرسنجی به ما در بهبود کیفیت مسابقات آینده تحلیل داده کمک‌ کنید.

اکتشاف - تحلیل بیمه ۱


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

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

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

دادگان🔗

می‌توانید دادگان این سوال را از این لینک دریافت کنید. هر ردیف دادگان آموزش 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. بیشتر افراد، در بخش خصوصی به کار گرفته شده‌اند و یا بخش دولتی؟ چند درصد افراد در آن بخش مشغول هستند (با دقت دو رقم اعشار)؟
    Government Sector 12.34
    Plain text
  5. چند درصد از افرادی که بیماری زمینه‌ای دارند، خودشان را برای سفر بیمه کرده‌اند (دقت تا دو رقم اعشار)؟
توجه

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

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
توضیحات

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

پیش‌بینی - تحلیل بیمه ۲


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

bime

Photo by Scott Graham on Unsplash

دادگان🔗

دادگان این مرحله، دقیقا مانند مرحله قبل است. برای حل این سوال، دو فایل csv در اختیار خواهید داشت. فایل train.csv‍‍ همان فایلی است که باید بر اساس آن، مدل خود را آموزش دهید و فایل test.csv مشخصات مسافرانی را شامل می‌شود که باید احتمال خریدن بیمه را برای آن‌ها پیش‌بینی کنید. به عبارت بهتر باید تخمین بزنید چقدر احتمال دارد ستون TravelInsurance مقدار Yes‍‍ داشته باشد.

ارزیابی🔗

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

امتیاز نهایی مدل شما طبق فرمول زیر محاسبه می‌شود.

score=((AUCROC×100)50)×2 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، آن را برای ما بارگذاری کنید.

توجه

حتما فایل output.csv باید دارای ۳۹۷ سطر و ۲ ستون باشد.

تحلیل سبد خرید


در این سوال، شما به تحلیل رفتار مشتریان می‌پردازید.

توضیح تصویر

دادگان🔗

شما به دادگان تراکنش‌های یک فروشگاه‌ آنلاین موادغذایی از این لینک دسترسی دارید. در این سوال، به تمامی خرید‌هایی که یک مشتری در یک روز انجام می‌دهد، "سبد" می‌گوییم:

توضیح تصویر

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

نام ستون توضیحات ستون
Customer Id شناسه مشتری
Date تاریخ سفارش
Product نام محصول

صورت مسئله🔗

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

  1. تعداد محصولات یکتا در کل دادگان، چندتاست؟
1000
Plain text
  1. میزان فروش به ازای هر روز به صورت میانگین چند است (تا دو رقم بعد از اعشار)؟
70.43
Plain text
  1. چهار محصولی که کمتر از بقیه در سبد مشتریان قرار گرفته‌اند، کدامند (ترتیب مهم نیست)؟
cake,apple,coffee,meat
Plain text
  1. پنج مشتری‌ای که در سال ۲۰۲۰، بیشترین تعداد "سبد" را داشته‌اند، کدامند (ترتیب مهم نیست)؟
05XJ2SI7Z3KM,PZ2VNYRNH7UE,ZT6I3ZOEX9AP,IUMEKLUW51PE,HRZ5J6MERGJE
Plain text
  1. کدام روز هفته، بیشترین تعداد محصول فروش رفته‌است؟
Friday
Plain text

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

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

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

راهنمایی

با مثال زیر، دو معیار قوانین وابستگی که در این سوال نیاز دارید، توضیح داده می‌شوند. فرض کنید که ۱۰۰ سبد دارید که ۱۰‌تای آن‌ها شیر، ۸‌تای ‌‌آن‌ها کره و ۶ تا‌ی آن‌ها هر دو را دارند. معیار پشتیبانی (support)، نشان می دهد که یک مجموعه محصول/محصولات چقدر محبوب است:

support(X)=Numberofbasketscontainingproduct(s)XNumberofallbasketssupport(X) = \frac{Number\:of\:baskets\:containing\:product(s)\:X}{Number\:of\:all\:baskets}

در مثال بالا، support(milk) برابر است با ۰.۱ و support(milk,butter) برابر است با ۰.۰۶

معیار اطمینان (confidence)، نشان می‌دهد که هنگام خرید محصول/محصولات X چقدر احتمال دارد که محصول/محصولات Y خریداری شوند و از این امر به عنوان "الگو" یاد می‌کنیم:

confidence(X>Y)=support(X,Y)support(X)confidence(X->Y)=\frac{support(X,Y)}{support(X)}

در مثال بالا، confidence(milk->butter) برابر است با ۰.۶

به استفاده از معیارهای support و confidence، به دو سوال زیر پاسخ دهید (مثال خروجی هر سوال، در زیر آن آورده شده‌است):

  1. پنج محصولی که بیشترین support را دارند به ترتیب نزولی کدامند؟
    cake,apple,coffee,meat,tomato
    Plain text
  2. از بین مواردی که support آن‌ها، حداقل ۰.۰۱ می‌باشد. دو الگویی که بیشترین confidence را دارند، به ترتیب نزولی کدامند؟
    ("cake","potato")->("apple")|("coffee","soda")->("meat")
    Plain text
راهنمایی

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

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

ارسال پاسخ🔗

برای ارسال پاسخ، جواب هر سوال را مشابه‌ مثال، در یک سطر از یک فایل 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")
Plain text
توضیحات

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

هشدار

اگر نام فایل شما و ساختار محتویات آن، همانند آن‌چه در صورت سوال ذکر شده‌است، نباشد؛ امتیازی از سوال دریافت نخواهید کرد.

بارگذاری کد


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

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

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

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

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