یکی از چالشهای همیشگی دیجیکالا، پیشبینی فروش محصولات مختلف در بازههای زمانی گوناگون است. این پیشبینی از جهتهای مختلفی دارای اهمیت است؛ از مهمترینهای آنها میتوان به یاری رساندن به فروشندهها جهت موجود داشتن محصولات مختلف، که باعث سودرسانی حداکثری به فروشنده و دیجیکالا میشود، و کمک به عدم تأخیر در تأمین سفارشات مشتریان اشاره کرد.
در این مسئله دادههای فروش ۵ سال گذشته دیجیکالا برای ۵۰ فروشنده مختلف در اختیار شما قرار میگیرد. این دادهها را میتوانید از لینک زیر دانلود کنید.
[دادههای فروش ۵ ساله](https://quera.ir/assignment/20120/download_problem_initial_project/66274/)
این فایل آرشیو دارای ۳ فایل داده است. فایل اول **train.csv** است که شامل دادههای آموزش مسئله است. این فایل دارای ستونهای زیر است.
1. id: شناسه سطر
2. date: تاریخ رکورد
3. seller: فروشنده
4. item: شناسه محصول
5. sales: تعداد محصول فروخته شده
فایل دوم **test.csv** است که شامل سطرهایی است که باید میزان فروش آنها پیشبینی شود. این فایل دارای ستونهایی مانند فایل آموزش است و تنها ستون sales در آن وجود ندارد و شما باید آن را پیشبینی کنید.
فایل سوم **answer_style.csv** است که نشان دهنده فرمت فایلی است که شما باید آپلود نمایید. برای سادگی بیشتر فرمت را زیر نیز توضیح میدهیم.
## خروجی نمونه ۱
```
id,sales
0,100
1,100
2,100
3,100
4,100
5,100
```
این فایل دارای ۲ ستون است. که به شکل بالا باید پر شوند. اعداد هر دو ستون به شکل صحیح باید وجود داشته باشند و همه id های موجود در فایل تست، باید در این فایل نیز وجود داشته باشند و مقدار sales آنها موجود باشند تا جواب شما داوری شود. شما باید فایل پر شده را در فرمت csv آپلود نمایید.
برای اندازه گیری کیفیت پاسخ شما با توجه به صورت مسئله از معیار **SMAPE** استفاده میشود.
پیشبینی میزان فروش
دیجیکالا، بزرگترین فروشگاه اینترنتی ایران، طیف متنوعی از کالاها را با تنوع دستهبندی در اختیار کاربران قرار میدهد. در این فروشگاه کاربران میتوانند نظرات و تجربیات خود درباره هر محصول را با دیگران به اشتراک بگذارند. این نظرات در صفحه محصول قرار میگیرد و برای همه کاربران قابل مشاهده است.
دیجیکالا نظرات بامحتوای نامناسب و یا غیرمرتبط را فیلتر میکند. فرایند تایید یا رد نظرات در دیجیکالا در گذشته با نیروی انسانی انجام میشد. در این چالش شما باید مدلی طراحی کنید که به وسیله آن بتوانید نظرات دیجیکالا را رد و یا تایید کنید.
در این مسئله دو فایل در اختیار شما قرار گرفته است. این فایل هارا میتوانید از لینک زیر دانلود کنید.
(فایل آموزش در این مسئله و **مسئله پیشبینی امتیاز نظرات** یکسان است)
[DK-Comments](https://quera.ir/assignment/20120/download_problem_initial_project/66276/)
فایل اول که در اختیار شما قرار گرفته است، فایل **train_users.csv** است. از این فایل برای آموزش مدل خود استفاده کنید. این فایل دارای ستونهای زیر است:
+ **id**: شناسه هر نظر
+ **title**: عنوان نظر
+ **comment**: متن نظر
+ **advantages**: مزایای ذکر شده در نظر
+ **disadvantages**: معایب ذکر شده در نظر
+ **title_fa_product**: نام فارسی محصول
+ **title_fa_category**: نام فارسی رسته محصول
+ **is_buyer**: خریدار محصول بودن و یا نبودن کاربر نظر دهنده
+ **verification_status**: رد و تایید نظر
+ **rate**: امتیاز داده شده به کالا در نظر
ستون **id** شناسه اختصاصی هر نظر است.
ستون **title** عنوانی است که کاربر برای نظر نوشته است.
ستون **comment** متن هر نظر است.
ستون **advantages** مزایای ذکر شده کاربر برای محصول است.
ستون **disadvantages** معایب ذکر شده کاربر برای محصول است.
ستون **title_fa_product** نام فارسی محصول است.
ستون **title_fa_category** نام فارسی رسته محصول است.
ستون **verification_status** نشان دهنده رد شدن یا تایید شدن نظر است. اگر نظر تایید شده باشد مقدار ۱ و اگر رد شده باشد مقدار ۰ است.
ستون **rate** امتیاز متناظر هر نظر است که عددی بین ۰ تا ۱۰۰ است.
فایل دوم که در اختیار شما قرار گرفته است فایل **test_users.csv** است. این فایل دادههای تست مسئله است که با پیشبینی کردن تایید و یا رد آن امتیازات مسابقه را باید کسب کنید. این فایل دارای همان ستونهای بالا به جز **verification_status** و **rate** است.
شما باید برای دادههای تست پیشبینی کنید که آن نظر تایید شده و یا رد شده است. خروجی شما که بارگزاری خواهید کرد باید به شکل زیر باشد:
## خروجی نمونه
```
id,verification_status
0,0
1,1
2,1
3,0
4,1
5,1
6,1
7,0
…
```
این فایل دارای دو ستون **id** و **verification_status** است. شناسه نظرات این فایل، همان شناسه نظرات فایل تست است که به همان ترتیب و همان تعداد در این فایل باید قرار داشته باشد. مقدار **verification_status** در این فایل باید یه صورت صحیح و دارای مقادیر ۰ و یا ۱ باشد.
در این مسئله فقط فایل خروجی شما برای داوری ارسال میشود. پس آزاد هستید با هر زبان برنامه نویسی و هر متد دلخواه مسئله را حل کنید.
معیار امتیاز در این مسئله، امتیاز f1 خروجی شماست.
تایید و رد نظرات
دیجیکالا، بزرگترین فروشگاه اینترنتی ایران، طیف متنوعی از کالاها را با تنوع دستهبندی در اختیار کاربران قرار میدهد. در این فروشگاه کاربران میتوانند نظرات و تجربیات خود درباره هر محصول را با دیگران به اشتراک بگذارند. این نظرات در صفحه محصول قرار میگیرد و برای همه کاربران قابل مشاهده است.
یکی از اطلاعاتی که کاربر میتواند در نظر خود در اختیار دیگران قرار دهد، امتیاز کلی به محصول است. این امتیاز معمولا با متن نوشته شده توسط کاربر رابطه مستقیم دارد. در این مسئله از شما خواسته شده است که با استفاده از نظرات، بتوانید امتیاز داده شده توسط کاربر به محصول را پیشبینی کنید.
در این مسئله دو فایل در اختیار شما قرار گرفته است. این فایل هارا میتوانید از لینک زیر دانلود کنید.
(فایل آموزش در این مسئله و **مسئله تایید یا رد نظرات** یکسان است)
[DK-Comments](https://quera.ir/assignment/20120/download_problem_initial_project/66277/)
فایل اول که در اختیار شما قرار گرفته است، فایل **train_users.csv** است. از این فایل برای آموزش مدل خود استفاده کنید. این فایل دارای ستونهای زیر است:
+ **id**: شناسه هر نظر
+ **title**: عنوان نظر
+ **comment**: متن نظر
+ **advantages**: مزایای ذکر شده در نظر
+ **disadvantages**: معایب ذکر شده در نظر
+ **title_fa_product**: نام فارسی محصول
+ **title_fa_category**: نام فارسی رسته محصول
+ **is_buyer**: خریدار محصول بودن و یا نبودن کاربر نظر دهنده
+ **verification_status**: رد و تایید نظر
+ **rate**: امتیاز داده شده به کالا در نظر
ستون **id** شناسه اختصاصی هر نظر است.
ستون **title** عنوانی است که کاربر برای نظر نوشته است.
ستون **comment** متن هر نظر است.
ستون **advantages** مزایای ذکر شده کاربر برای محصول است.
ستون **disadvantages** معایب ذکر شده کاربر برای محصول است.
ستون **title_fa_product** نام فارسی محصول است.
ستون **title_fa_category** نام فارسی رسته محصول است.
ستون **verification_status** نشان دهنده رد شدن یا تایید شدن نظر است. اگر نظر تایید شده باشد مقدار ۱ و اگر رد شده باشد مقدار ۰ است.
ستون **rate** امتیاز متناظر هر نظر است که عددی بین ۰ تا ۱۰۰ است.
فایل دوم که در اختیار شما قرار گرفته است فایل **test_users.csv** است. این فایل دادههای تست مسئله است که با پیشبینی کردن امتیاز نظر، امتیاز سوال را دریافت میکنید.. این فایل دارای همان ستونهای بالا به جز **verification_status** و **rate** است.
شما باید برای دادههای تست، امتیاز نظر را پیشبینی کنید. خروجی شما که بارگزاری خواهید کرد باید به شکل زیر باشد:
## خروجی نمونه
```
id,rate
0,57.45175680275809
1,88.08661090571425
2,81.00113574934842
3,46.017899851519914
4,32.7560294359769
5,37.174967371155866
…
```
این فایل دارای دو ستون **id** و **rate** است. شناسه نظرات این فایل، همان شناسه نظرات فایل تست است که به همان ترتیب و همان تعداد در این فایل باید قرار داشته باشد. مقدار **rate** در این فایل باید یه صورت عددی اعشاری و دارای مقادیر ۰ تا ۱۰۰ باشد.
در این مسئله فقط فایل خروجی شما برای داوری ارسال میشود. پس آزاد هستید با هر زبان برنامه نویسی و هر متد دلخواه مسئله را حل کنید.
معیار امتیاز در این مسئله SMAPE است که از روی امتیاز های پیشبینی شده توسط شما حساب خواهد شد.
پیشبینی امتیاز نظرات
دسترسی آسان به محصولات مورد نظر یکی از چالشهای همیشگی در دیجیکالا است. یکی از راههای رسیدن به محصول مورد نظر در دیجیکالا، استفاده از جستجو است. اما گاهی اوقات پیدا کردن محصولات با جستجو به سادگی امکانپذیر نیست. به همین دلیل امکان فیلتر نتایج جستجو در دیجیکالا فراهم آمده است. یکی از فیلترهای مفید مخصوصا در رسته مد و پوشاک، فیلتر رنگ محصول است اما گاهی اوقات برخی از محصولات فاقد اطلاعات رنگ هستند. در این مواقع سعی میشود که با استفاده از اطلاعات محصول، رنگ محصول تشخیص داده شود و امکان فیلتر آن در رنگ به وجود آید.
در این مسئله از شما میخواهیم با استفاده از عکس محصولاتی که در اختیار شما قرار داده میشود، رنگ آن را تشخیص دهید.
دیتای مورد نیاز مسئله را میتوانید از لینک زیر دریافت کنید.
**[عکسهای مد و پوشاک دیجیکالا](https://quera.ir/assignment/20120/download_problem_initial_project/66279/)**
در این فایل ۲ پوشه **train** و **test** قرار دارد. در پوشه **train** عکسهابی مورد نیاز به تفکیک رنگ وجود دارد.
در پوشه test فایلهایی موجود است که باید با استفاده از الگوریتم خود، رنگ آنها را تشخیص داده و برای دریافت امتیاز این سوال بارگزاری نمایید.
قالب فایل بارگزاری شده توسط شما باید به شکل زیر باشد.
## خروجی نمونه
```
file_name,color_id
117142451.jpg,2
117221672.jpg,1
117210354.jpg,1
117129967.jpg,4
117304479.jpg,11
117238605.jpg,6
117242357.jpg,9
```
توجه داشته باشید که تعداد سطرهای فایل شما باید به تعداد فایل های موجود در فایل تست باشد و هم چنین نام فایلها باید به صورت کامل آورده شود. در ستون **color_id** نیز شناسه رنگ تشخیص داده شده را قرار دهید.
برای تبدیل رنگ به شناسه میتوانید از جدول زیر استفاده نمایید.
```
color,color_id
pink,1
purple,2
yellow,3
orange,4
white,5
silver,6
grey,7
black,8
red,9
brown,10
green,11
blue,12
```
شناسه عددی بین ۱ تا ۱۲ است و باید به صورت صحیح در فایل خروجی شما قرار گرفته باشد.
در این مسئله فقط فایل خروجی شما برای داوری ارسال میشود. پس آزاد هستید با هر زبان برنامه نویسی و هر متد دلخواه مسئله را حل کنید.
معیار امتیاز در این مسئله **precision** است که از روی رنگهای تشخیص داده شده توسط شما حساب خواهد شد.
تشخیص رنگ عکسهای دیجیکالا
یکی از معیارهای رفتاری کاربر در سایت، پیدا کردن میزان فعال بودن کاربر است. فرض کنید دادههای ورود و خروج کاربران در سایت به شکل زیر موجود است.
```
user_id date status
101 2018-01-1 1
101 2018-01-2 0
101 2018-01-3 1
101 2018-01-4 1
101 2018-01-5 1
```
در این مسئله شما باید با استفاده از این دادهها، بتوانید میزان فعال بودن هر کاربر را در هر دوره حساب کنید.
برای حل این مسئله دادههای زیر در اختیار شما قرار گرفته است.
[**Users Log**](https://quera.ir/assignment/20120/download_problem_initial_project/66275/?noconvert=true)
در این فایل یک دیتابیس sqlite با نام **dkcup_test** در اختیار شما قرار گرفته شده است. همچنین خروجی ای که با اجرای درست کوئری نیز در فایلی به نام **answer_test_db_users.csv** به شما داده شده است.
در این مسئله شما باید کوئری خود را در قالب یک فایل با فرمت **sql** (مانند **query.sql**) در سایت بارگزاری نمایید.
خروجی نمونه باید به شکل زیر باشد.
## خروجی نمونه
```
user_id start_date end_date status length
101 2018-01-1 2018-01-1 1 1
101 2018-01-2 2018-01-2 0 1
101 2018-01-3 2018-01-5 1 3
```
همچنین دقت داشته باشید که همه ستونها باید به طور کامل در فایل ارسالی شما موجود باشد و نام آنها دقیقا همانند مثال بالا و فایل پاسخی که در اختیار شما قرار گرفته است، باشد.
شما میتوانید درستی یا عدم درستی کوئری خود را با فایل پاسخ و دیتابیسی که در اختیار شما قرار گرفته است، بررسی کنید. با توجه به حجم بالای دیتابیس و سنگین بودن محاسبات آن توصیه میکنیم برای تست از قسمت کوچکتری از فایل دیتابیس استفاده نمایید.
همچنین در این سوال از ورژن 3.25 دیتابیس **sqlite** استفاده شده است.
پیدا کردن زمان فعالیت هر کاربر
انبار بزرگ دیجیکالا از تعدادی مخزن کالا تشکیل شده است. این مخازن به شبکهای از تسمههای نقاله متصل هستند تا کالاها به واحدهای مختلف پردازش سفارشات منتقل شوند. شبکهی تسمههای نقاله در انتها به پایانههای خروجی انبار وصل میشوند تا کار بارگیری و ارسال سفارشات انجام شود.
جهت چرخش تسمهها یکطرفه است. ابتدای هر تسمه یک مخزن یا یک واحد پردازش، و انتهای آن هم یک واحد پردازش یا یک پایانهی خروجی است.
هر یک از تسمهها ظرفیت مشخصی برای انتقال کالاها دارند. واحدهای پردازش (و مخازن و پایانهها) ظرفیت نامحدودی دارند. تنها شرطشان این است که مجموع تعداد کالاهایی که با تسمهها به آنها وارد میشود، با مجموع تعداد کالاهای خروجی برابر باشد (چون قرار نیست در حین پردازش کالایی به وجود بیاید یا غیب بشود!).
در خط اول ورودی به شما تعداد واحدهای انبار، شامل مخزن، واحدهای پردازش میانی یا پایانه (n) داده میشود.
در خط دوم، n عدد به شما داده میشود که عدد iام، نوع واحد iام را نشان میدهد. اگر این عدد صفر باشد یعنی واحد متناظر واحد پردازش است. اگر ۱ یا ۲ باشد، به ترتیب یعنی آن واحد مخزن یا پایانهی خروجی است.
در خط بعدی تعداد تسمهها (e) داده میشود. در هر یک از e خط بعد، شمارهی واحد ابتدا، انتها و ظرفیت یکی از تسمهها داده میشود.
به عنوان جواب، حداکثر تعداد کالای قابل پردازش را در یک روز انبار، در یک خط چاپ کنید. منظور از حداکثر تعداد کالای قابل پردازش، بیشترین تعدادی کالایی است که میتوان با توجه به ظرفیت تسمهها و شروط گفته شده، از مخازن به پایانهها رساند.
## ورودی نمونه ۱
```
7
1 0 0 0 0 2 1
10
1 2 16
7 3 13
2 3 10
3 2 4
2 4 12
4 3 9
3 5 14
5 4 7
4 6 20
5 6 4
```
## خروجی نمونه ۱
```
23
```
+ محدودیت زمان: ۱.۵ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
پردازش کالاهای دیجیکالا
با تشکر از شرکت شما دوستان عزیز، به منظور جلوگیری از هر گونه تقلب و شبهه احتمالی که منجر به ضایع شدن حق شما شود، لطفا فایل کد همه سوالات پاسخ داده شده خود را در قالب یک فایل زیپ در اینجا بارگزاری نمایید.
با تشکر فراوان