| فایل اولیهی تمرین را میتوانید از [این لینک](/contest/assignments/103149/download_problem_initial_project/356092/) دانلود کنید. |
| :--: |
به استارتاپ «سینما-پلاس» خوش آمدید!
چند ماه پیش تیم محصول متوجه یک مشکل عجیب شد. با اینکه سیستم پیشنهاد فیلم برای اکثر کاربران عملکرد قابل قبولی دارد، اما گروهی از کاربران تقریبا هیچوقت از پیشنهادهای سیستم راضی نیستند. این افراد معمولا سلیقهای خاص، سختگیرانه و متفاوت از جریان اصلی دارند؛ از آن دسته مخاطبانی که اگر نام **مسعود فراستی** را شنیده باشید، میتوانید حدس بزنید منظور از این نوع سلیقه چیست!
همانطور که میدانید، سلیقه آقای فراستی با بسیاری از مخاطبان متفاوت است. او بارها فیلمهایی را که عموم مردم دوست داشتهاند به شدت نقد کرده و در مقابل، از آثاری دفاع کرده است که کمتر مورد توجه قرار گرفتهاند. به همین دلیل، استفاده از یک سیستم پیشنهاددهنده معمولی که صرفاً محبوبترین فیلمها را پیشنهاد میدهد، کاملاً بیفایده است.
برای حل این مشکل، تیم داده پروژهای با نام **Ferasati Project** راهاندازی کرده است. در این پروژه، هزاران نقد و نظر کاربران، امتیازهای ثبتشده، تاریخچه تماشای فیلمها جمعآوری شده است. اکنون نوبت شماست تا هسته اصلی این سیستم پیشنهاددهنده را پیادهسازی کنید.
شما باید تابعی بنویسید که شناسه یک کاربر (`user_id`) را به عنوان ورودی دریافت کند، سلیقه او را مدلسازی کرده و بهترین فیلمهایی را که هنوز مشاهده نکرده است، پیشنهاد دهد.

<details class="yellow">
<summary>**📊 ساختار داده**</summary>
تیم مهندسی داده، اطلاعات استخراجشده را در قالب یک فایل در اختیار شما قرار داده است. هر سطر از این دیتاست، نمایانگر یک نظر است که توسط یک کاربر برای یک فیلم خاص ثبت شده است. جزئیات ستونهای این دیتاست به شرح زیر است:
| **نام ستون** | **توضیحات** |
| ------------------ | --------------------------------------------------------------------------------- |
| `name_film` | نام فیلم |
| `director` | نام کارگردان فیلم |
| `imdb` | امتیاز فیلم در IMDB |
| `overal_rate` | میانگین امتیاز کلی کاربران پلتفرم سینما-پلاس به این فیلم |
| `rates_count` | تعداد کل کاربرانی که به این فیلم در پلتفرم امتیاز دادهاند |
| `user_id` | شناسه منحصربهفرد کاربری که نظر را ثبت کرده است |
| `comment_date` | تاریخ ثبت نظر توسط کاربر |
| `comment_likes` | تعداد دفعاتی که نظر این کاربر توسط دیگران لایک شده است |
| `comment_dislikes` | تعداد دفعاتی که نظر این کاربر توسط دیگران دیسلایک شده است |
| `comment_text` | متن کامنت و دیدگاه کاربر درباره فیلم |
| `movie_id` | شناسه منحصربهفرد فیلم |
</details>
### **فرمت ارسال پاسخ**
برای ارزیابی برنامه خود، باید یک فایل پایتون به نام `movie_suggestor.py` ارسال کنید. این فایل باید شامل تابعی به نام `movie_suggestor` باشد.
### **ورودی**
ورودی برنامه یک عدد صحیح (`int`) به عنوان `user_id` میباشد. به همراه فایل دیتافریم قرار داده شده در فایل `init`. (فایل دیتافریم بصورت مستقیم پاس داده میشود و نیازی به خواندن آن در movie_suggestor.py نیست.)
```
11111, df
```
### **خروجی**
خروجی شامل **۱۰ شناسه فیلم (movie_id)** که هر کدام در یک خط مجزا قرار گرفتهاند میباشد.
```
2222
3333
4444
4555
...
```
----------
### **نحوه ارزیابی**
سیستم داوری برای ارزیابی عملکرد مدل شما، از معیار **Precision@10** استفاده میکند. برای هر کاربر که به عنوان ورودی به تابع شما داده میشود، سیستم داوری یک لیست واقعی (*Ground Truth*) در اختیار دارد که میدانیم کاربر به آنها علاقه دارد. فرمول محاسبه امتیاز نهایی به این شکل است:
$$Mean\ Precision@10 = \frac{1}{N} \sum_{u=1}^{N} \left( \frac{|R_u \cap G_u|}{10} \times 100 \right)$$
که در این فرمول:
%align_right_start%
+ $N$: تعداد کل کاربران ارزیابیشده در سیستم داوری.
+ $u$: نمایانگر هر یک از کاربران.
+ $R_u$: مجموعه ۱۰ فیلم پیشنهادی تابع شما برای کاربر $u$.
+ $G_u$: مجموعه فیلم واقعی (*Ground Truth*) که کاربر $u$ قطعا تماشا کرده یا به آنها علاقه دارد.
+ $|R_u \cap G_u|$: تعداد فیلمهای مشترک بین لیست پیشنهادی شما و لیست واقعی که نشاندهنده تعداد پیشنهادهای صحیح است.
%align_end%
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.