سلام
به مسابقه یادگیری ماشین از مسیر داده لیگ کُدکاپ ۱۴۰۰ خوش آمدید.
برای آشنایی با سیستم داوری مسابقات مسیر تحلیل داده، ویدئو زیر را مشاهده کنید.
قبل از شروع مسابقه، ابتدا موارد زیر را مطالعه کنید:
test
) خواهد بود. پس از اتمام مسابقه، برای بهروزرسانی نهایی جدول امتیازات، فقط از ۷۰ درصد مابقی دادگان آزمایش بر روی ارسال نهایی شما استفاده خواهد شد؛ این کار برای جلوگیری از بیشبرازش (overfitting
) انجام میشود.دادگان هر سوال را در صورت سوال مربوطه، میتوانید دریافت نمایید. اما پیش از آن، بایستی که محیط برنامهنویسی لازم برای محاسبات خود را آماده کنید. اگر میخواهید که با استفاده از زبان برنامهنویسی پایتون و کتابخانههای موجود در آن، در این مسابقه شرکت کنید. میتوانید از سامانه گوگل کُلَب استفاده کنید.
بدین صورت نیازی نیست که شما دادگان حجیم این مسابقه (در حد گیگابایت) را روی کامپیوتر خود دانلود کنید. همچنین گوگل کُلَب این امکان را به شما میدهد که از قابلیتهای GPU
و TPU
آن به رایگان استفاده کرده و سرعت محاسبات خود را به طور قابل ملاحظهای افزایش دهید. پیشنهاد میشود که ابتدا کُد خود را در حالت CPU
توسعه دهید و فقط هنگامی که می خواهید شروع به آموزش دادن مُدل خود کنید، قابلیت GPU
یا TPU
را در صورت نیاز فعال کنید، بدین صورت به صورت بهینه از منابع استفاده میکنید.
اگر اولین باری است که با گوگل کُلَب آشنا میشوید. پیشنهاد میشود راهنمای فارسی کار با آن را از اینجا به دقت مطالعه کنید. توجه داشته باشید که برای استفاده از گوگل کُلَب، شما نیازمند به داشتن ایمیل gmail
میباشید و قابلیتهای ارائه شده در نسخه رایگان آن، برای انجام این مسابقه کافی است. همچنین فعلا برای دسترسی به آن نیازی به استفاده از فیلترشکن نیست.
برای سوالهای "پیشبینی تعداد سفر" و "تحلیل احساس نظرات"، بایستی که دادگان آن را خود مستقیم دریافت کرده و از قسمت Files
و از طریق Upload to session storage
، داخل گوگل کُلَب بارگذاری کنید.
از آنجایی که دادگان باقی سوالات حجم بالاتری دارند؛ پیشنهاد میکنیم که آنها را با کمک دستور wget
و به صورت مستقیم در گوگل کُلَب، قرار دهید. برای مطالعه بیشتر در مورد این دستور، اینجا را ببینید.
توجه داشته باشید که داخل گوگل کُلب، باید قبل از اجرای دستور wget
، علامت !
قرار دهید. به مثالهای زیر نگاه کنید.
همچنین در صورتی که نمی خواهید از گوگل کُلب استفاده کنید و میخواهید محاسبات را در کامپیوتر شخصی خود یا زیرساخت دیگری انجام دهید، میتوانید دادگان را دانلود و از حالت فشرده خارج کنید. توجه داشته باشید که اگر اینترنت شما، از ترافیک نیمبها برای سایتهای داخلی استفاده میکند، بهتر است که در هنگام دریافت دادگان، VPN
خود را خاموش کنید.
توجه داشته باشید که محدودیتی در زبان برنامهنویسی مورد استفاده برای این مسابقه وجود ندارد.
اگر از تاکسیاینترنتی اسنپ برای حمل و نقل استفاده کرده باشید و به قول معروف «اسنپ زده باشید!»، حتما با تصویر زیر آشنا هستید. 😉
در این تصویر، تعداد رانندگان اطراف یک درخواست کننده سفر، نشان داده شدهاند. اما شما (طبیعتا!) تعداد مسافرانی که در آن لحظه از اسنپ درخواست سفر کردهاند را نمیبینید.
در این سوال، مجموعه اسنپکب، ارائه دهنده خدمت تاکسی اینترنتی اسنپ، تاریخچه تعداد مسافرانی که در هر دقیقه، درخواست سفر کردهاند را از این لینک ، در اختیار شما قرار دادهاست.
هنگامی که این فایل را از حالت فشرده خارج کنید. پوشه cab
را میبینید. در صورتی که وارد این پوشه شوید، فایلهای آموزش (train.csv
) و آزمایش (test.csv
) در اختیار شما خواهند بود. فایل آموزش، اطلاعات درخواست مسافران به ازای هر دقیقه را در یک بازه ۲ ماهه، در اختیار شما قرار میدهد که جزییات آن، در جدول زیر آمدهاست:
نام ستون | توضیحات ستون |
---|---|
time | زمان ثبت درخواستها (با دقت دقیقه) |
y | تابعی از تعداد مسافران منتظر راننده |
معیار y
، نشاندهنده وضعیت جاری کسب و کار و میزان مشتریان ورودی در لحظه است. به همین دلیل، این معیار (KPI) و رصد آن در طول زمان، دارای اهمیت بسیار ویژهای برای مجموعه اسنپکب است. 🤗
یکی از عوامل ناخواسته و خارج از کنترلی که این معیار را تحت تاثیر منفی قرار میدهد، مشکلات فنی یا به قولی Technical Incident
ها هستند که گاهی باعث از دسترس خارج شدن مقطعی و یا حتی کامل سامانه دریافت درخواست اسنپکب میشوند. 😢
در نتیجه اگر نمودار سری زمانی این دادگان را رسم کنید؛ با افتادگیهایی ناشی از همین اتفاقات (مانند شکل زیر) روبرو خواهید شد:
در شکل بالا، نمودار قرمز رنگ، نحوه تغییر معیار y
را در طول زمان نشان میدهد. همانگونه که در تصویر معلوم است، از دقایقی قبل از ساعت ۱۵:۳۰ تا حدود ۱۶:۴۰، سامانه دچار مشکل شده و درخواستهای سفر کاهش پیدا کرده بودند. در همین نمودار، خطچین زردرنگ نشانگر انتظار ما از رفتار سیستم است اگر خطایی رخ نداده بود و از آن با نام مقدار ایدهآل y
یاد میکنیم.
بهعبارت دیگر، مقدار ایدهآل y
در زمانهایی که مشکل فنی نیست برابر است با مقدار y
و در زمانهایی که مشکل فنی وجود دارد، بایستی مقدار آن به شکلی باشد که بین سریزمانی قبل و بعد از حادثه، یک نمودار smooth
و یا به اصطلاح صاف مانند شکل بالا، ایجاد شود.
حال، اسنپکب از شما انتظار دارد که با استفاده از روشهای یادگیریماشین، یادگیری عمیق و یا سریهای زمانی، اقدام به پیشبینی مقدار ایدهآل y
در دادگان آزمایش بکنید. 😎
لطفا به نکات زیر توجه داشته باشید:
y
را در لحظات رخدادن حادثه ندارید. در نتیجه، چالشهای مرتبط با آن نیز، جزوی از این مسئله است.شاید نکات زیر، بتوانند به شما در حل این مسئله کمک بکنند:
Moving Average
supervised
)برای ارزیابی مُدل شما از معیار (metric
) زیر استفاده میشود:
در فرمول بالا، مقدار ایدهآل معیار برای زمان است و نیز مقدار پیشبینی شده مُدل شما برای آن زمان میباشد. همچنین تعداد نمونههای دادگان را از شماره ۱ تا در نظر میگیریم. در نهایت، امتیاز شما از این مرحله بر اساس فرمول زیر محاسبه میگردد:
هدف شما، بایستی ساختن مُدلی با باشد.
با توجه به این که metric
برابر یا بزرگتر از ۰.۲ به عنوان مدل مناسب این مسئله، از سمت تیم اسنپکب مورد قبول قرار نمیگیرد. پس هرمدلی که چنین عملکردی را روی دادگان آزمایش داشتهباشد، صفر امتیاز از این سوال کسب میکند.
لطفا در هنگام کار با این دادگان، به نکات زیر توجه داشته باشید:
metric
مدل شما، تا سه رقم اعشار محاسبه (رُند) و در فرمول امتیازدهی بالا، قرار داده میشود.score
شما، منفی شود. از این سوال حداقل صفر امتیاز میگیرید. 😜پیشبینیهای مدل خود بر روی دادگان آزمایش (test.csv
) را در فایلی با نام output.csv
قرار دهید. این فایل باید دارای یک ستون با نام prediction
باشد که ردیف iام آن، پیشبینی شما برای سطر iام دادگان آزمایش باشد (دقت کنید که این ستون باید حتما دارای header
باشد).
بعد از آمادهسازی فایل output.csv
، آن را برای ما بارگذاری کنید.
output.csv
(فقط سه خط اول به همراه نام ستون)🔗حتما فایل output.csv
باید دارای ۴,۳۲۰ سطر (بدون در نظر گرفتن header
) و یک ستون باشد.
همچنین نام ستون بایستی بدون space
در قبل و بعد از نام آن، باشد. در غیر این صورت، سیستم داوری نمرهای به شما نخواهد داد.
فراموش نکنید که قبل از پایان زمان مسابقه، بایستی تمامی کدهای این مسابقه را از قسمت بارگذاری کُد برای ما ارسال کنید. در غیر این صورت، شما از این مسابقه، امتیازی کسب نمی کنید.
توجه داشته باشید که اگر از jupter notebook
استفاده می کنید بایستی همانند توضیحات قسمت بارگذاری کُد، خروجی .py
را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای jupyter
همانند .ipynb
مورد قبول واقع نخواهند شد.
اسنپتریپ، به عنوان ارائه دهنده خدمات و سرویسهای مورد نیاز برای سفر، در کنار امکان رزرو هتل، اقامتگاه و مهمانسرا در سراسر ایران، مجموعهای کامل از خدمات مسافری مانند خرید بلیط اتوبوس، هواپیما و قطار را به یک مسافر ارائه می دهد.
احتمالا هنگامی که شما بخواهید برای تعطیلات نوروز به یک شهر مانند ارومیه سفر کنید، از طریق موبایل و یا لپتاپ و از مسیر جستجوی گوگل، پیامک تبلیغاتی و یا به صورت مستقیم، وارد سایت اسنپتریپ میشوید و بعد از ساخت حساب کاربری، اقدام به جستجو میکنید:
سپس، شما اقدام به انتخاب مقصد و تاریخ ورود/خروج خود میکنید. در نتیجه لیستی از هتلها برای شما مانند شکل زیر، نشان داده میشود.
در نهایت، شما با کلیک بر روی هتلهای مختلف، اقدام به مقایسه آنها میکنید و شاید در نهایت یکی از آنها را رزرو کنید.
در این سوال، شما به دادگان جستجوی کاربران از اینجا دسترسی دارید. هنگامی که این فایل را از حالت فشرده خارج کنید. پوشه hotels
را میبینید. در صورتی که وارد این پوشه شوید، فایلهای آموزش (train.csv
) و آزمایش (test.csv
) در اختیار شما خواهند بود.
فایل آموزش، نتایج جستجوی کاربران را در یک بازه حدودا ۲ ساله شامل میشود و حدود ۳۰ میلیون سطر دارد. فایل آزمایش، دارای ۱۰۰ هزار سطر از اطلاعات جستجوی کاربران در بازه حدود ۱ ماه پس از آخرین جستجوی موجود در فایل آزمایش است (این سطرها، به صورت تصادفی از بین چند میلیون سطر آن ماه، انتخاب شدهاند).
جدول زیر، ستونهای موجود در فایل آموزش را توضیح میدهد. توجه داشته باشید که هر ردیف این دادگان، نشاندهنده جستجوی یک کاربر جهت رزرو هتل است.
نام ستون | توضیحات ستون |
---|---|
user | شناسه کاربر |
search_date | زمان انجام جستجو |
channel | کاربر از چه کانالی وارد سایت شدهاست (تبلیغات پیامکی، تبلیغات شبکه اجتماعی، ورود مستقیم و ...) |
is_mobile | آیا کاربر با دستگاه موبایل وصل شدهاست؟ |
is_package | آیا کاربر در حال جستجوی هتل به همراه بلیط اتوبوس یا هواپیما یا قطار است؟ |
destination | شناسه مقصد مورد نظر کاربر |
checkIn_date | تاریخ ورود به هتل |
checkOut_date | تاریخ خروج از هتل |
n_adults | تعداد افراد بالغ اعلام شده جهت رزرو هتل |
n_children | تعداد کودکان اعلام شده جهت رزرو هتل |
n_rooms | تعداد اتاق مورد نظر برای رزرو |
hotel_category | گروهبندی هتلی که جزییاتش را مشاهده میکنند. این گروهبندی میتواند بر اساس مواردی مانند چندستاره بودن و یا نوع هتل باشد. |
is_booking | آیا کاربر در نهایت، هتل مشاهده شده را رزرو کرد؟ |
لطفا در هنگام کار با این دادگان، به نکات زیر توجه داشته باشید:
is_booking
را ندارد.unzip
شده دادگان آموزش و آزمایش روی هم، دارای اندازه حدود ۳ گیگابایتی میباشند. نحوه روبهرو شدن شما با دادگان با این حجم، جزو یکی از چالشها و اهداف طراحی این سوال بودهاست.با استفاده از دادگان توضیح داده شده در بالا، اسنپتریپ از شما انتظار دارد که بر اساس فایل آموزش، مُدلی آموزش دهید که بر اساس جستجوی کاربران و سایر ویژگیهای مرتبط با آن، بتواند پیشبینی کند که آیا یک کاربر، هتل مشاهده شده را رزرو خواهد کرد یا نه (فایل آزمایش، مشخصات جستجوهایی را شامل میشود که بایستی احتمال رزرو شدن هتل را برای آنها، پیشبینی کنید). بدین ترتیب، مجموعه اسنپتریپ، میتواند برای هرکاربر، متناسب با پیشبینی رزرو، تصمیم متناسبی همانند ارائه تخفیف و یا پیشنهاد سایر هتلها، در لحظه اتخاذ کند.
در این سوال باید احتمال رزرو شدن هتل را پیشبینی کنید. به عبارت بهتر احتمال True
شدن ستون is_booking
را تخمین بزنید.
شاید نکات زیر، بتوانند به شما در حل این مسئله کمک بکنند:
RAM
) جا نمیشوند، شاید بتوانید به صورت بخشبخش آن را بخوانید و یا فقط از بخشی از دادگان آموزش به انتخاب خود و نه همه آن، استفاده کنید. همچنین طراحی یک ساختمان داده مناسب همچون لیست ولی با تفاوتهایی در بارگذاری دادگان، میتواند یک راهحل دیگر باشد.feature
)های مناسبsupervised
)برای ارزیابی مُدل شما از سطح زیر ناحیه نمودار ROC
استفاده میشود. برای مطالعه بیشتر در مورد این نمودار میتوانید ویکیپدیا یا راهنمای کوتاه نکات و ترفندهای یادگیری ماشین را مطالعه کنید.
امتیاز نهایی مدل شما طبق فرمول زیر محاسبه میشود:
علت استفاده از این فرمول برای امتیازدهی، این است که اگر به صورت تصادفی برای جستجوها عددی پیشبینی کنید، auc_roc
مدل شما ۰.۵ خواهد بود. بنابراین تنها مدلهایی پذیرفته میشوند که دارای auc_roc
بیشتر از ۰.۵ باشند. توجه داشته باشید که بیشترین امتیاز ممکن از این سوال ۲۰۰ و کمترین امتیاز ممکن، صفر است.
پیشبینیهای مدل خود بر روی دادگان آزمایش (test.csv
) را در فایلی با نام output.csv
قرار دهید. این فایل باید دارای یک ستون با نام prediction
باشد که ردیف i ام ستون prediction
، پیشبینی شما برای سطر ردیف i ام فایل آزمایش باشد (دقت کنید که این ستون باید حتما دارای header
باشد).
بعد از آمادهسازی فایل output.csv
، آن را برای ما بارگذاری کنید.
output.csv
(فقط سه خط اول به همراه نام ستون)🔗حتما فایل output.csv
باید دارای ۱۰۰,۰۰۰ سطر (بدون در نظر گرفتن header
) و یک ستون باشد.
همچنین نام ستون بایستی بدون space
در قبل و بعد از نام آن، باشد. در غیر این صورت، سیستم داوری نمرهای به شما نخواهد داد.
فراموش نکنید که قبل از پایان زمان مسابقه، بایستی تمامی کدهای این مسابقه را از قسمت بارگذاری کُد برای ما ارسال کنید. در غیر این صورت، شما از این مسابقه، امتیازی کسب نمی کنید.
توجه داشته باشید که اگر از jupter notebook
استفاده می کنید بایستی همانند توضیحات قسمت بارگذاری کُد، خروجی .py
را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای jupyter
همانند .ipynb
مورد قبول واقع نخواهند شد.
با اپلیکیشن اسنپفود به راحتی میتوانید با چند کلیک ساده، رستورانها، کافهها و شیرینیفروشیهای نزدیک خودتان را جستوجو و از تجربه سفارش آسان اسنپفود لذت ببرید. 😋
فروشندگان میتوانند اقلام خوراکی خود را در اسنپفود قرار دهند تا کاربران با بررسی قیمت و عکس خوراکیها و نظرات کاربران دیگر، خوراکی مورد نظر خود را انتخاب کنند.
شما به عنوان یک سفارشدهنده غذا، میتوانید از نظرات دیگر مشتریان راجع به کیفیت یک رستوران آگاه شوید. بهعنوان مثال، میتوانید میزان لذیذ و خوشمزه بودن قرمهسبزی یک یا چند رستوران را با توجه به نظرات ثبتشده سفارشدهندگان پیشین بسنجید.
سپس، خودتان نیز میتوانید تجربهتان راجع به سفارش را با دیگران به اشتراک بگذارید. پس از دیدگاه سفارشدهنده، نظرات بسیار پراهمیت هستند.
از دیدگاه اسنپفود نیز نظرات بسیار مهم هستند زیرا میتواند عملکرد همکاران (رستورانها، تولیدکنندگان غذا و پیک) را از طریق آن رصد کند تا بتواند میزان رضایت مشتریان را افزایش دهد. 😎
در این سوال میخواهیم به اسنپفود در تحلیل احساس موجود در نظرات، کمک کنیم. 🤗
دادگان این مسئله را میتوانید از این لینک دانلود کنید. هنگامی که این فایل را از حالت فشرده خارج کنید. پوشه comments
را میبینید. در صورتی که وارد این پوشه شوید، فایل آموزش (train.csv
) و آزمایش (test.csv
) را مشاهده میکنید. فایل آموزش، دارای ساختار زیر (با دو ستون) اس:
نام ستون | توضیحات ستون |
---|---|
comment | نظر یک مشتری راجع به یک سفارش |
date | زمان ثبت نظر |
عمده نظرات موجود در ستون comment
به زبان فارسی هستند؛ اما تعداد محدودی از نظرات وجود دارند که به زبان انگلیسی ثبت شدهاند. مدیریت این چالش بخشی از فرایند حل مسئله است.
همچنین تنها تفاوت دادگان آموزش با آزمایش در این است که دادگان آزمایش، ستون date
ندارند.
دادگان آموزش و آزمایش هیچگونه برچسبی ندارند. همانطور که در بخش بعدی (صورت مسئله) خواهید دید، شما خودتان باید برچسب هر نظر را مشخص کنید.
به دلیل رعایت محرمانگی دادگان، از انتشار نام فرد نظردهنده، شناسه سفارش و اطلاعات رستوران/کافه/شیرینیفروشی مربوطه، معذوریم! 😉
به علت فارسی بودن متن نظرات، ممکن است نرمافزار اکسل در نمایش آن با مشکل مواجه شود. بر فرض اینکه از زبان پایتون استفاده میکنید، کتابخانه پانداس در بارگذاری متون فارسی به شما میتواند کمک کند.
اسنپفود از شما میخواهد positive
یا negative
بودن نظرات را مشخص کنید. دسته positive
نظراتی را نشان میدهد که ثبتکننده نظر، از سفارش خود راضی بوده و احساس مثبتی از تعامل با اسنپفود و همکارانش بهدست آوردهاست. در مقابل، دسته negative
نظراتی را نشان میدهد که ثبتکننده آن احساس خوبی از سفارش خود نداشتهاست.
شما بایستی که با استفاده از دادگان آموزش، بتوانید مُدلی بسازید که احتمال positive
بودن احساس نظرات موجود در دادگان آزمایش (test.csv
) را شناسایی کند.
شاید یکی از روشهای زیر، بتواند به شما در حل این مسئله کمک بکند:
unsupervised
)، نظرات فایل train.csv
را به دو دسته positive
و negative
گروهبندی کنید، سپس با روشهای یادگیری نظارتشده (supervised
)، مدلی را آموزش دهید که بتواند احتمال positive
بودن یک نظر را تخمین بزند. rule-based
) مانند weak supervision
اقدام به برچسبزدن همه یا قسمتی از دادگان آموزش بکنید، سپس با روشهای یادگیری نظارتشده (supervised
)، مدلی را آموزش دهید که بتواند احتمال positive
بودن یک نظر را تخمین بزند. امتیاز نهایی مُدل شما تابعی از سطح زیر ناحیه نمودار ROC
است. برای مطالعه بیشتر در مورد این نمودار میتوانید ویکیپدیا یا راهنمای کوتاه نکات و ترفندهای یادگیری ماشین را مطالعه کنید.
امتیاز نهایی مدل شما، طبق فرمول زیر محاسبه میشود:
علت استفاده از این فرمول برای امتیازدهی، این است که اگر به صورت تصادفی برای نظرات عددی پیشبینی کنید، auc_roc
مدل شما ۰.۵ خواهد بود. بنابراین تنها مدلهایی پذیرفته میشوند که دارای auc_roc
بیشتر از ۰.۵ باشند. توجه داشته باشید که بیشترین امتیاز ممکن از این سوال ۲۰۰ و کمترین امتیاز ممکن، صفر است.
پیشبینیهای مدل خود بر روی دادگان آزمایش (test.csv
) را در فایلی با نام output.csv
قرار دهید. این فایل باید دارای یک ستون به اسم prediction
باشد که ردیف i ام ستون prediction
، پیشبینی شما (احتمال positive
بودن نظر - عددی بین صفر و یک) برای نظر ردیف i ام از فایل test.csv
باشد (دقت کنید که ستون باید حتما دارای header
باشد). بعد از آمادهسازی فایل output.csv
، آن را برای ما بارگذاری کنید.
output.csv
(فقط سه خط اول به همراه نام ستون)🔗حتما فایل output.csv
باید دارای ۱۴,۰۰۰ سطر (بدون در نظر گرفتن header
) و یک ستون باشد.
همچنین نام ستون بایستی بدون space
در قبل و بعد از نام آن، باشند. در غیر این صورت، سیستم داوری نمرهای به شما نخواهد داد.
فراموش نکنید که قبل از پایان زمان مسابقه، بایستی تمامی کدهای این مسابقه را از قسمت بارگذاری کُد برای ما ارسال کنید. در غیر این صورت، شما از این مسابقه، امتیازی کسب نمی کنید.
توجه داشته باشید که اگر از jupter notebook
استفاده می کنید بایستی همانند توضیحات قسمت بارگذاری کُد، خروجی .py
را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای jupyter
همانند .ipynb
مورد قبول واقع نخواهند شد.
با اپلیکیشن اسنپفود به راحتی میتوانید با چند کلیک ساده، رستورانها، کافهها و شیرینیفروشیهای نزدیک خودتان را جستوجو و از تجربه سفارش آسان اسنپفود لذت ببرید. 😋
فروشندگان میتوانند اقلام خوراکی خود را در اسنپفود قرار دهند تا کاربران با بررسی قیمت و عکس خوراکیها و نظرات کاربران دیگر، خوراکی مورد نظر خود را انتخاب کنند.
با بررسی تصاویری که مردم در شبکههای اجتماعی به اشتراک میگذارند، میتوان ترتیب قرار گرفتن خوراکیها را ارتقا داد. برای مثال، خوراکیهایی که در شبکههای اجتماعی مورد توجه قرار گرفتهاند را در ابتدای سایت یا اپلیکیشن قرار داد. همچنین برای هر کاربر، یک لیست شخصیسازی شده از خوراکیهای مورد علاقهاش را پیشنهاد داد.
برای استقاده از این امکانات، در قدم اول باید بتوانیم نوع غذای موجود در یک عکس را شناسایی کنیم و این دقیقا کاری است که ما انتظار داریم شما در این سوال انجام دهید.
در این سوال شما به دادگان عکس خوراکیها دسترسی دارید. در این مجموعه، بیش از ۱۷ هزار عکس از ۲۱ نوع خوراکی وجود دارند که تعدادی از آنها را در عکس زیر میبینید:
برای دریافت دادگان این سوال، از اینجا اقدام کنید. بعد از unzip
کردن آن، داخل پوشه food
بروید و دادگان آموزش را در پوشه train
، پیدا کنید. داخل این پوشه، برای هر نوع خوراکی، یک پوشه جدا وجود دارد که شامل تصاویر آن میباشد. همچنین تصاویر دادگان آزمایش این سوال، در پوشه test
قرار دارند. روی هم رفته حجم کل عکسها حدود یک گیگابایت میباشد.
شاید یکی از روشهای زیر (یا ترکیب آنها)، بتواند به شما در حل این مسئله کمک بکند:
transfer learning
و CNNs
data augmentation
)در هنگام کار با این دادگان، به نکات زیر توجه داشته باشید:
برای ارزیابی نتیجه کار، از معیار دقت (accuracy
) در اعلام نوع خوراکی موجود در یک عکس استفاده میشود. یعنی تعداد عکسهای درست پیشبینی شده تقسیم بر تعداد کل تصاویر موجود میشود.
امتیاز نهایی مدل شما نیز، طبق رابطه زیر محاسبه میشود:
با استفاده از رابطه بالا، افرادی که دقت مدلشان، ۲۰ درصد و یا کمتر از آن است، از این سوال، امتیازی کسب نمیکنند. توجه داشته باشید که بیشترین امتیاز ممکن از این سوال ۲۰۰ و کمترین امتیاز ممکن، صفر است.
پیشبینیهای مدل خود بر روی دادگان آزمایش را در فایلی با نام output.csv
قرار دهید. این فایل باید دارای دو ستون با نامهای file
و prediction
به ترتیب باشند. در هر ردیف، نام فایل را در file
و پیشبینی خود از نوع خوراکی را در ستون prediction
قرار دهید (دقت کنید که فایل CSV
باید حتما دارای header
باشد).
بعد از آمادهسازی فایل output.csv
، آن را برای ما بارگذاری کنید.
output.csv
(فقط سه خط اول به همراه نام ستونها)🔗حتما فایل output.csv
باید دارای ۴,۲۷۶ سطر (بدون در نظر گرفتن header
) و دو ستون باشد.
همچنین نام ستونها بایستی بدون space
در قبل و بعد از نام آن، باشند. در غیر این صورت، سیستم داوری نمرهای به شما نخواهد داد.
فراموش نکنید که قبل از پایان زمان مسابقه، بایستی تمامی کدهای این مسابقه را از قسمت بارگذاری کُد برای ما ارسال کنید. در غیر این صورت، شما از این مسابقه، امتیازی کسب نمی کنید.
توجه داشته باشید که اگر از jupter notebook
استفاده می کنید بایستی همانند توضیحات قسمت بارگذاری کُد، خروجی .py
را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای jupyter
همانند .ipynb
مورد قبول واقع نخواهند شد.
شرکتهای مختلف مجموعه اسنپ نیاز به استفاده از سیستمهای پیشنهاددهنده، جهت پیشنهاد محصول به مشتریان خود دارند. آنها میتوانند با استفاده از تاریخچه امتیاز مشتریان به محصولات مختلف، اقدام به پیشنهاد محصول بکنند، به گونهای که مشتری از محصول پیشنهاد شده استقبال بکند. 😎
بهعنوان مثال:
به نظر شما، هر یک از شرکتهای دیگر مجموعه اسنپ که در زیر آورده شدهاند، چه استفادهای از یک سیستم پیشنهاددهنده میتوانند داشته باشند؟
جواب سوال بالا، جزوی از سوال مسابقه نیست و صرفا جهت تفکر و آشنایی شماست. 🤗
توجه داشته باشید که حتی میتوان از روی تحلیل احساس نظرات (سوال ۳ این مسابقه)، برای محاسبه امتیازی که هر مشتری به یک محصول میدهد، استفاده کرد. 😉
سیستمهای پیشنهاددهنده دارای سابقه طولانی هستند. به عنوان مثال، میتوانید از اینجا در مورد مسابقه سیستم پیشنهاددهنده شرکت پخش فیلم Netflix که در سال ۲۰۰۶ شروع شد، مطالعه کنید.
در این سوال، شما به تاریخچه امتیازهای مشتریان به محصولات مختلف در طول زمان از اینجا دسترسی دارید. هنگامی که این فایل را از حالت فشرده خارج کنید. پوشه data
را میبینید. در صورتی که وارد این پوشه شوید، فایلهای آموزش (train.csv
) و آزمایش (test.csv
) در اختیار شما خواهند بود. فایل آموزش، اطلاعات امتیازدهی مشتریان به محصولات مختلف در یک بازه حدودا ۷.۵ سال را نشان میدهد.
جزییات فایل آموزش، در جدول زیر آمدهاست:
نام ستون | توضیحات ستون |
---|---|
userId | شناسه مشتری |
itemId | شناسه محصول |
rating | امتیازی که مشتری به محصول مربوطه دادهاست که میتواند یکی از اعداد ۴،۳،۲،۱ یا ۵ باشد |
date | زمانی که مشتری به محصول مربوطه، امتیاز دادهاست |
فایل آزمایش، برای یک بازه حدودا ۶ ماهه، بعد از زمان دادگان فایل آموزش است و دارای اطلاعات مشتریانی است که به محصولات مختلف در آن بازه، امتیاز دادهاند. توجه داشته باشید که این فایل دارای ستون rating
نیست و همچنین تنها مشتریان و محصولاتی در آن موجودند که هر دوی آنها، قبلا در دادگان آموزش وجود داشته باشند.
با استفاده از دادگان آموزش، یک مُدل برای یک سیستم پیشنهاددهنده بسازید که برای سهتایی (شناسهمشتری، شناسه محصول و زمان امتیاز دادن) دادگان آزمایش، امتیازی که مشتری میدهد را پیشبینی کند. بدین صورت، مجموعه شرکتهای اسنپ میتوانند محصولی را به یک مشتری پیشنهاد دهند که مطمئن هستند امتیاز بالایی را از سمت مشتری دریافت خواهد کرد. 🥳
شاید روشهای زیر، بتوانند به شما در حل این مسئله کمک بکنند:
collaborative filtering
و content based
و یا ترکیبی از هر دوsequence neural networks
و convolutional neural networks
برای ارزیابی مُدل شما از معیار Root Mean Square Error
یا به اختصار RMSE
به شرح زیر استفاده میشود:
در فرمول بالا، مقدار واقعی rating
برای سطر است و نیز مقدار پیشبینی شده مُدل شما برای آن rating
است. همچنین تعداد نمونههای دادگان را از شماره ۱ تا در نظر بگیرید. در نهایت، امتیاز شما از این مرحله بر اساس فرمول زیر محاسبه میگردد:
یک تابع تصادفی یا تابعی که همیشه یک امتیاز ثابت را پیش بینی میکند، حداقل RMSE
برابر با ۱.۰۴ برای دادگان این سوال دارد. پس، مدلهایی که RMSE
آنها ۱.۰۴ یا بزرگتر از آن باشد، به عنوان مدل مناسب این مسئله، مورد قبول قرار نمیگیرند و هرمدلی که چنین عملکردی را روی دادگان آزمایش داشتهباشد، امتیازی از این سوال کسب نمیکند.
لطفا در هنگام کار با این دادگان، به نکات زیر توجه داشته باشید:
RMSE
مدل شما، تا سه رقم اعشار محاسبه (رُند) و در فرمول امتیازدهی بالا، قرار داده میشود.score
شما، منفی شود. از این سوال حداقل صفر امتیاز میگیرید. 😜پیشبینیهای مدل خود بر روی دادگان آزمایش (test.csv
) را در فایلی با نام output.csv
قرار دهید. این فایل باید دارای یک ستون با نام prediction
باشد که ردیف iام آن، پیشبینی شما برای سطر iام دادگان آزمایش باشد (دقت کنید که این ستون باید حتما دارای header
باشد).
بعد از آمادهسازی فایل output.csv
، آن را برای ما بارگذاری کنید.
output.csv
(فقط سه خط اول به همراه نام ستون)🔗حتما فایل output.csv
باید دارای ۱۳۱,۳۵۸ سطر (بدون در نظر گرفتن header
) و یک ستون باشد.
همچنین نام ستون بایستی بدون space
در قبل و بعد از نام آن، باشد. در غیر این صورت، سیستم داوری نمرهای به شما نخواهد داد.
پیشبینیهای شما از rating
ها، میتوانند به صورت عدد اعشاری نیز ارسال بشوند.
فراموش نکنید که قبل از پایان زمان مسابقه، بایستی تمامی کدهای این مسابقه را از قسمت بارگذاری کُد برای ما ارسال کنید. در غیر این صورت، شما از این مسابقه، امتیازی کسب نمی کنید.
توجه داشته باشید که اگر از jupter notebook
استفاده می کنید بایستی همانند توضیحات قسمت بارگذاری کُد، خروجی .py
را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای jupyter
همانند .ipynb
مورد قبول واقع نخواهند شد.
به منظور جلوگیری از هر گونه تقلب و شبهه احتمالی که منجر به ضایع شدن حق شما شود، شما بایستی که فایل کد برنامهنویسی (مثلا برای پایتون فایل .py
، برای زبان R
فایل .R
، برای متلب فایل .m
و برای جاوا فایل .java
) را در قالب یک فایل زیپ در اینجا بارگذاری نمایید. در صورتی که پس از پایان زمان مسابقه، این فایل توسط شما بارگذاری نشده باشد، شما از این مسابقه، امتیازی کسب نمی کنید.
توجه داشته باشید که اگر از jupter notebook
استفاده می کنید بایستی همانند توضیح بالا، خروجی مورد نظر را دریافت کنید. به عنوان مثال، شما بایستی که از قسمت file
و زیرقسمت Download
خروجی .py
را دریافت و برای ارسال در نظر بگیرید. ارسال فایلهای jupyter
همانند .ipynb
مورد قبول واقع نخواهند شد.
برای هر سوال که جواب دادید، یک پوشه به نام آن سوال ایجاد و تمامی کدهای خود را در آن قرار دهید. در نهایت، همه پوشهها را تحت یک پوشه نهایی زیپ کرده و برای ما فقط یک فایل زیپ ارسال کنید.
به عنوان مثال اگر که از زبان پایتون استفاده کردید، فایل زیپ ارسالی شما، بایستی که ساختار زیر را داشته باشد:
میتوانید به جای فایلهای code.py
، هر تعداد فایل با پسوندهای مجاز و توضیح داده شده زبانهای برنامهنویسی قرار دهید.
با تشکر فراوان