+ محدودیت زمان: ۱ ثانیه
+ محدودیت حافظه: ۲۵۶ مگابایت
----------
در این سوال به شما دو عدد صحیح مثل $a$ و $b$ داده میشود. از شما میخواهیم برنامهای بنویسید که مقدار $a$ و $b$ را دریافت کند و $a + b$ را چاپ کند.
# ورودی
در تنها سطر ورودی، دو عدد صحیح $a$ و $b$ که با یک فاصله از هم جدا شدهاند، داده میشود.
$$1 \leq a, b \leq 100$$
# خروجی
در تنها سطر خروجی، مقدار $a + b$ را چاپ کنید.
# مثالها
## ورودی نمونه ۱
```
3 5
```
## خروجی نمونه ۱
```
8
```
## ورودی نمونه ۲
```
1 1
```
## خروجی نمونه ۲
```
2
```
<details class="red">
<summary>
**اشتباهات متداول**
</summary>
<details class="red">
<summary>
**چک کردن شرایط ورودی مسئله**
</summary>
نیازی نیست چک کنید شرایط گفته شده در ورودی برقرار است یا نه. توضیحات محدودیتها فقط برای آگاهی شما دربارهی تستها و محدودیتهای مسئله است و قطعاً در ورودیهای داده شده به برنامهی شما رعایت میشوند. پس نیازی نیست بنویسید:
```python
if 1 <= n <= 100:
# answer of problem
else:
# print('invalid input')
```
</details>
<details class="red">
<summary>
**ابتدا همهی ورودی را گرفتن و در نهایت همهی خروجی را چاپ کردن**
</summary>
شما میتوانید لابهلای دریافت ورودی، خروجی دهید. پس نیازی نیست ابتدا همهی ورودیها را دریافت کنید و در نهایت همهی خروجیها را چاپ کنید. مخصوصاً برای سوالاتی که باید به چندین سوال پاسخ دهید، میتوانید دو قسمت ورودی و خروجی را کاملاً مستقل در نظر بگیرید و مطمئن باشید تداخلی پیش نمیآید.
</details>
<details class="red">
<summary>
**چاپ کردن موارد اضافه برای دریافت ورودی**
</summary>
لطفاً از چاپ کردن موارد اضافه مثل `please enter a number` برای دریافت ورودی پرهیز کنید. برای مثال در زبان پایتون نباید بنویسید:
```python
input('please enter:')
```
</details>
<details class="red">
<summary>
**چند فایلی کد زدن**
</summary>
برای زبانهایی مثل جاوا نباید در بالای کد شما آدرس پکیج داده شود. برای مثال در بالای کد خود نباید بنویسید:
```java
package ir.quera.contest;
```
</details>
<details class="red">
<summary>
**استفاده از چند `Scanner` برای دریافت ورودی**
</summary>
در زبان جاوا، باید فقط یک شئ از جنس `Scanner` تعریف کنید و همهی ورودیها را با آن دریافت کنید.
</details>
<details class="red">
<summary>
**نحوهی دریافت ورودی و چاپ کردن خروجی**
</summary>
برای آشنایی بیشتر برای نحوهی دریافت ورودی و چاپ کردن خروجی این [لینک](https://quera.org/course/assignments/2693/problems/8774) را مطالعه کنید.
</details>
Adding Two Numbers (Educational)
| فایل اولیهی تمرین را میتوانید از [این لینک](/contest/assignments/103149/download_problem_initial_project/356096/) دانلود کنید. |
| :--: |
به «املاک خرچنگی» خوش آمدید! آقای خرچنگ، صاحب رستوران معروف، اخیرا متوجه شده که فرمول همبرگر خرچنگی دیگر تنها راه پولدار شدن در شهر «بیکینی باتم» نیست. او فهمیده که پول اصلی در بازار پرنوسان املاک و مستغلات خوابیده است!
اما یک بحران بزرگ در شرکت رخ داده است! پلانکتون با استفاده از هوش مصنوعیِ همسر کامپیوتریاش، در حال پیشخرید بهترین خانههای شهر با قیمتهای بسیار دقیق و مهندسیشده است. در همین حال، آقای خرچنگ متوجه شد که اختاپوس (که تا دیروز مسئول قیمتگذاری و ارزیابی خانهها بود) قیمتها را کاملا شانسی، بر اساس حوصلهاش و با نگاه کردن به ظاهر خانهها تعیین میکرده است! آقای خرچنگ از شدت عصبانیت اختاپوس را اخراج کرده و حالا خطر ورشکستگی امپراتوری جدیدش را حس میکند. حالا آقای خرچنگ از شما یک چیز میخواهد: سیستمی بسازید که قیمت دقیق خانههای بیکینی باتم را قبل از اینکه پلانکتون دستش به آنها برسد، پیشبینی کند.
تیم باباسفنجی (که حالا به جای پخت همبرگر، در سطح شهر داده جمعآوری میکند) دیتاستی از خانههای فروخته شده در محلههای مختلف را استخراج کرده و در اختیار شما قرار داده است. وظیفه شما این است که این مدل را طراحی کنید.
<details class="yellow">
<summary>**📊 ساختار داده**</summary>
تیم دادهبرداری، اطلاعات استخراجشده را در قالب دو فایل (آموزش و آزمون) در اختیار شما قرار داده است. هر سطر از این دیتاست، نمایانگر مشخصات یک خانه است. جزئیات ستونهای این دیتاست به شرح زیر است:
| **نام ستون** | **توضیحات** |
| --------------------------- | ----------------------------------------------- |
| **lat** | عرض جغرافیایی خانه (مختصات روی نقشه) |
| **long** | طول جغرافیایی خانه (مختصات روی نقشه) |
| **area** | مساحت خانه (به متر مربع) |
| **age** | سن بنا (سال) |
| **total_floors** | تعداد کل طبقات ساختمان |
| **floor_number** | شماره طبقهای که واحد در آن قرار دارد |
| **rooms** | تعداد اتاقهای خواب |
| **document_type** | نوع سند ملکی (شخصی، اوقاف، قولنامهای و...) |
| **cooling_type** | سیستم سرمایشی (اسپلیت، چیلر، داکت و...) |
| **monthly_levy** | مبلغ شارژ ماهیانه ساختمان |
| **has_master_bedroom** | آیا خانه اتاق مستر دارد؟ (۱: بله، ۰: خیر) |
| **parking_type** | وضعیت و نوع پارکینگ (مسقف، محوطه و...) |
| **neighbor_noise_level** | سطح سر و صدای همسایهها (کم، متوسط، زیاد) |
| **distance_to_hospital_km** | فاصله تا نزدیکترین بیمارستان (کیلومتر) |
| **has_smart_home** | مجهز بودن به سیستم خانه هوشمند (۱: بله، ۰: خیر) |
| **water_pressure** | وضعیت فشار آب ساختمان |
| **exterior_style** | سبک نمای بیرونی ساختمان (رومی، مدرن، کلاسیک) |
| **fiber_internet** | دسترسی به اینترنت فیبر نوری (۱: بله، ۰: خیر) |
| **manager_present** | حضور مدیر ساختمان یا لابیمن (۱: بله، ۰: خیر) |
| **window_type** | نوع پنجرهها (دوجداره، تکجداره و...) |
| **price** | قیمت نهایی فروش خانه |
</details>
### **خروجی**
برای ارزیابی برنامه خود، باید قیمت خانههای موجود در `test.csv` را پیشبینی کنید. خروجی شما باید یک فایل متنی یا CSV باشد که تنها شامل **یک ستون** با نام `price` است. هر سطر از این ستون، باید دقیقاً نمایانگر قیمت پیشبینیشده برای همان سطرِ متناظر در دادههای ورودی باشد.
```PlainText
price
2450000
1860500
3400000
985000
...
```
----------
### **نحوه ارزیابی**
برای ارزیابی سیستم شما از فرمول زیر استفاده میگردد.
$$Score = \max\left(0, 100 \times \left(1 - \frac{1 - R^2 Score}{0.04}\right)\right)$$
The Krabby Real Estate Formula
| فایل اولیهی تمرین را میتوانید از [این لینک](/contest/assignments/103149/download_problem_initial_project/356097/) دانلود کنید. |
| :--: |
با نزدیک شدن به جام جهانی ۲۰۲۶، کیلیان که شکست دور قبل اونو خیلی عصبیش کرده. خانواده شما رو به گروگان گرفته و از شما خواسته تمام اطلاعات تحلیلی که برای آنالیز و شناخت رقبا وجود داره که میتونه بهش کمک کنه که این بار قهرمان جام بشه رو در اختیارش قرار بدید شما برای نجات خانواده خود باید سریعا خواسته های کیلیان رو انجام بدید.
تنها ابزار شما چهار دیتاست خام است. باید از دل میلیونها رکورد، **۱۲ گزارش تحلیلی** استخراج کنید؛ از معرفی بهترین پنالتیزنها و استعدادهای جوان گرفته تا تحلیل زنجیرههای برد، شکارچیان غولها و تأثیر گلهای سرنوشتساز. اگر مأموریت را با موفقیت انجام دهید، کیلیان اعضای خانوداه شما رو آزاد میکنه.

### ساختار دیتاست ها
تیم آنالیز، اطلاعات استخراجشده را در قالب ۴ فایل مجزا در اختیار شما قرار داده است. جزئیات این دیتاستها به شرح زیر است:
| **نام فایل** | **توضیحات کلی** |
| ------------------------ | ------------------------------------------------------------------------------------------------------------ |
| `results.csv` | شامل تاریخچه تمام مسابقات ملی فوتبال (تاریخ، نام تورنمنت، تیم میزبان/میهمان، گلها، شهر و کشور برگزارکننده). |
| `goalscorers.csv` | شامل جزئیات گلهای به ثمر رسیده در مسابقات (نام گلزن، دقیقه گل، پنالتی بودن یا نبودن، تیم زننده گل). |
| `elo_ratings_wc2026.csv` | شامل تاریخچه ریتینگ Elo تیمهای ملی، رتبه جهانی (Rank) و تغییرات امتیازی آنها در اسنپشاتهای زمانی مختلف. |
| `FC26_20250921.csv` | شامل اطلاعات جامع بازیکنان در بازی FC26 (نام، ملیت، باشگاه، سن، ارزش مالی، دستمزد، پتانسیل و نمره Overall). |
## نحوهی ارسال پاسخ
برای پاسخ به این سوال ابتدا فایل نوتبوک قرار گرفته در فایل اولیه را باز کنید و سپس مراحل را مطابق آنچه که از شما خواسته شده انجام دهید. در نهایت، پس از اجرای سلول جوابساز (آخرین سلول فایل نوتبوک) فایل `result.zip` ساخته شده را ارسال نمایید.
<details class="red">
<summary>**هشدار مهم**</summary>
توجه داشته باشید که پیش از اجرای سلول جوابساز، تغییرات اعمال شده در نوتبوک را با استفاده از کلید میانبر `ctrl+s` ذخیره کرده باشید در غیر این صورت، در پایان مسابقه **نمره** شما به **صفر** تغییر خواهد کرد.
همچنین اگر از کولب برای اجرای این فایل نوتبوک استفاده میکنید، قبل از ارسال فایل `result.zip`، آخرین نسخهی نوتبوک خود را دانلود کرده و داخل فایل ارسالی قرار دهید.
</details>
Kylian the Dictator
| فایل اولیهی مسئله را میتوانید از [این لینک](/contest/assignments/103149/download_problem_initial_project/356093/) دانلود کنید. |
| :--: |
به دپارتمان تحلیل داده و استراتژی **«راکاستار»** خوش آمدید! خالق یکی از بزرگترین و سودآورترین بازیهای تاریخ: **Grand Theft Auto V**.
با گذشت بیش از یک دهه از عرضه بازی، اقتصاد و رفتار بازیکنان ما تغییرات شگرفی کرده است. حال **Rockstar** برای فروش حداکثری نسخه جدید بازی خود نیاز به پیشبینی نحوه فروش و سود خود دارد اما به یک مشکل جدی برخورد کرده و برای حل این مشکلات شما را استخدام کرده است.
به دلیل یک نقص در سرورهای قدیمی، دادههای مربوط به **میزان درآمد ناخالص** در ۶۰ درصد از رکوردهای سالهای گذشته پاک شدهاند. بدتر از آن، برای ماههای آینده، نمیدانیم چه درصدی از بازیکنان بازی را به صورت **دیجیتال** و چه درصدی به صورت **فیزیکی** خریداری میکنند تا بودجههای توزیع و بازاریابی را تنظیم کنیم.
شما به تیم ملحق شدهاید تا این بحران را حل کنید. مدیر مارکتینگ از شما یک سیستم جامع میخواهد: سیستمی که بتواند با بررسی رفتار گذشته، به طور همزمان پیشبینی کند که یک رکورد فروش مربوط به کدام **کانال فروش (فیزیکی یا دیجیتال)** است و **درآمد دقیق** حاصل از آن چقدر خواهد بود.

<details class="green">
<summary>**ساختار داده**</summary>
تیم مهندسی داده، اطلاعات استخراجشده را در قالب دو فایل `train.csv` و `test.csv` در اختیار شما قرار داده است. توجه کنید که در فایل آموزش، ۶۰٪ از مقادیر درآمد خالی است و در فایل تست، هر دو ستون هدف به طور کامل حذف شدهاند تا شما آنها را پیشبینی کنید. جزئیات ستونهای این دیتاست به شرح زیر است:
| **نام ستون** | **توضیحات** |
| --- | --- |
| `transaction_id` | شناسه منحصربهفرد هر رکورد در دیتاست |
| `year` | سال تقویمی ثبت رکورد |
| `month` | ماه تقویمی ثبت رکورد (۱ تا ۱۲) |
| `quarter` | سهماهه مالی مشتقشده از ماه (۱ تا ۴) |
| `country` | نام کشوری که فروش در آن انجام شده است |
| `iso3_code` | کد سهحرفی ایزو (ISO 3166-1 alpha-3) برای کشور |
| `region` | قاره یا منطقه جغرافیایی کشور |
| `platform` | پلتفرم بازی (مانند PS3, PS4, PC, Xbox Series X|S) |
| `game_edition` | نسخه خریداری شده بازی (Standard, Premium, Legacy, و ...) |
| `units_sold` | تعداد نسخههای فروختهشده در آن ماه/کشور/پلتفرم |
| `new_customers` | تعداد خریدارانی که برای اولین بار در آن دوره خرید کردهاند |
| `returning_customers` | تعداد خریداران تکراری (کسانی که قبلاً هم خرید داشتهاند) |
| `estimated_active_players` | تخمین تعداد بازیکنان فعال یکتا |
| `peak_concurrent_players` | بالاترین تعداد بازیکن همزمان ثبتشده در آن ماه |
| `online_players` | تعداد بازیکنان فعال در هر کدام از بخشهای آنلاین |
| `story_mode_players` | تعداد بازیکنان درگیر با محتوای داستانی (تکنفره) |
| `gta_online_players` | تعداد بازیکنان فعال مشخصاً در بخش GTA Online |
| `average_playtime_hours` | میانگین ساعات بازی به ازای هر بازیکن فعال در آن ماه |
| `average_session_length_minutes` | میانگین طول هر نشست (Session) بازی به دقیقه |
| `holiday_season` | آیا فروش در فصل تعطیلات (نوامبر، دسامبر، ژانویه) بوده است؟ (0 یا 1) |
| `major_sale_event` | نام رویداد فروش ویژه فعال در آن ماه (در صورت وجود) |
| `marketing_campaign` | آیا در آن دوره کمپین بازاریابی فعال بوده است؟ (0 یا 1) |
| `customer_rating` | میانگین امتیاز ثبتشده توسط کاربران (از ۴.۲ تا ۵.۰) |
| `review_count` | تعداد نقدهای ثبتشده |
| `refund_rate_percentage` | درصد خریدهای پسدادهشده (Refund) |
| `currency` | کد ارز محلی کشور هدف |
| `exchange_rate_to_usd` | نرخ تبدیل ارز محلی به دلار در زمان فروش |
| `internet_penetration_percentage` | درصد نفوذ اینترنت در کشور هدف |
| `gaming_market_size` | تخمین حجم نسبی بازار گیمینگ در کشور |
| `population_millions` | جمعیت کشور هدف به میلیون نفر |
| `gdp_per_capita_usd` | تولید ناخالص داخلی سرانه کشور به دلار (نشاندهنده قدرت خرید) |
| `release_phase` | مرحله چرخه عمر انتشار پلتفرم (Launch, Growth, Mature, Legacy) |
| `weekend_sales_percentage` | درصد سهم فروش در روزهای آخر هفته |
| `weekday_sales_percentage` | درصد سهم فروش در روزهای وسط هفته |
| `season` | فصل هواشناسی (Winter, Spring, Summer, Autumn) |
| `special_event` | رویداد خاصی که باعث تحریک فروش شده (مثلاً عرضه یک آپدیت بزرگ) |
| `top_game_category` | دستهبندی اصلی ژانر بازی (Action-Adventure) |
| `platform_generation` | نسل کنسول بازی (مانند Gen7, Gen8, Gen9, PC) |
| `gross_revenue_usd` | **(ستون هدف اول - رگرسیون):** درآمد ناخالص به دست آمده به دلار |
| `sales_channel` | **(ستون هدف دوم - طبقهبندی):** کانال فروش که مقادیر آن `Physical` یا `Digital` است |
</details>
### **فرمت خروجی پیشبینیها**
مدل شما باید برای تمام ردیفهای موجود در فایل تست، پیشبینیهای خود را انجام دهد. در فایل نوتبوک اولیه، کدی قرار داده شده است که خروجی مدل شما را در قالب فایلی به نام `submission.csv` ذخیره میکند. این فایل باید شامل سه ستون زیر باشد:
\* `transaction_id`: شناسه تراکنش
\* `sales_channel_pred`: پیشبینی شما برای کانال فروش (`Physical` یا `Digital`)
\* `revenue_pred`: پیشبینی شما برای میزان درآمد به دلار (یک عدد اعشاری)
## نحوهی ارسال پاسخ
، پس از اجرای سلول جوابساز (آخرین سلول فایل نوتبوک)، فایل `result.zip` ساخته شده را ارسال نمایید. این فایل زیپ به صورت خودکار شامل نوتبوک شما و فایل `submission.csv` خواهد بود.
<details class="red">
<summary>**هشدار مهم**</summary>
توجه داشته باشید که پیش از اجرای سلول جوابساز، تغییرات اعمال شده در نوتبوک را با استفاده از کلید میانبر `ctrl+s` ذخیره کرده باشید در غیر این صورت، در پایان مسابقه **نمره** شما به **صفر** تغییر خواهد کرد.
همچنین اگر از کولب برای اجرای این فایل نوتبوک استفاده میکنید، قبل از ارسال فایل `result.zip`، آخرین نسخهی نوتبوک خود را دانلود کرده و داخل فایل ارسالی قرار دهید.
</details>
### **نحوه ارزیابی**
سیستم داوری برای ارزیابی عملکرد مدل شما از ترکیب دو معیار **Log Loss** و **RMSLE** استفاده میکند. از آنجایی که در این معیارها مقدار صفر نشاندهنده خطای صفر و پیشبینی بینقص است، سیستم داوری نمره را بر اساس **تابع نمایی نزولی از خطای ترکیبی مدل شما** محاسبه میکند.
مجموع امتیازات **۱۰۰ نمره** است که خطای هر بخش با ضرایب مشخصی (۳۵٪ برای تشخیص درست کانال فروش و ۶۵٪ برای پیشبینی درآمد) در نظر گرفته میشود. فرمول محاسبه امتیاز نهایی به این شکل است:
$$S = 100 \times e^{-1.3(0.35 \times LogLoss + 0.65 \times RMSLE)}$$
که در این فرمول:
%align_right_start%
+ **$LogLoss$**: خطای تابع زیان لگاریتمی مدل شما برای طبقهبندی کانال فروش.
+ **$RMSLE$**: خطای جذر میانگین مربعات لگاریتمی مدل شما برای پیشبینی درآمد به دلار.
%align_end%
هرچه خطای مدل شما در هر دو بخش به صفر نزدیکتر شود، توان عبارت نمایی به صفر متمایل شده و نمره نهایی شما به *100* نزدیکتر خواهد شد.
GTA VI
| فایل اولیهی تمرین را میتوانید از [این لینک](/contest/assignments/103149/download_problem_initial_project/356098/) دانلود کنید. |
| --- |

سینا دانشجو است و همزمان سر کار هم میرود. با رسیدن فصل سرما و پدیدهی وارونگی هوا، او هر روز صبح با استرس اخبار را چک میکند. سینا به شدت امیدوار است که به دلیل آلودگی هوای تهران، دانشگاهها و ادارات تعطیل شوند و کلاسها و امتحاناتش به صورت مجازی برگزار شوند تا بتواند در خانه بماند و راحتتر به کارهایش برسد!
اما چک کردن اخبار به اندازه کافی سریع نیست و سینا میخواهد همیشه یک قدم جلوتر باشد. او تصمیم گرفته است با استفاده از دادههای هواشناسی، یک مدل هوش مصنوعی قدرتمند بسازد تا وضعیت آلودگی هوا را در روزهای آینده پیشبینی کند.
مأموریت شما به عنوان دانشمند داده، کمک به سینا است. شما باید با استفاده از یک مجموعه دادهی ساعتی شامل اطلاعات آبوهوایی، مدلی مبتنی بر ماشینلرنینگ یا سریزمانی طراحی کنید که بتواند بر اساس این ویژگیها، میزان غلظت ذرات معلق (AQI) را به دقیقترین شکل ممکن پیشبینی کند.
---
<details class="green">
<summary>**ساختار داده**</summary>
| **نام ستون** | **توضیحات** |
| --- | --- |
| `No` | شناسه یکتای ردیف (شماره رکورد) |
| `timestamp` | زمان و تاریخ ثبت رکورد به صورت یک رشته متنی |
| `AQI` | **(متغیر هدف):** غلظت ذرات معلق کمتر از ۲.۵ میکرون |
| `DEWP` | نقطه شبنم (سانتیگراد) |
| `TEMP` | دما (سانتیگراد) |
| `TEMP_F` | دما (فارنهایت) |
| `PRES` | فشار هوا (هکتوپاسکال) |
| `sensor_voltage` | ولتاژ سنسور اندازهگیری در زمان ثبت رکورد (میلیولت) |
| `cbwd` | جهت وزش باد غالب |
| `Iws` | سرعت تجمعی باد (متر بر ثانیه) |
| `Is` | ساعات تجمعی بارش برف |
| `Ir` | ساعات تجمعی بارش باران |
</details>
### معیار ارزیابی (Evaluation Metric)
سیستم داوری ابتدا میانگین قدرمطلق خطا (*MAE*) را بین پیشبینیهای شما و مقادیر واقعی در سیستم محاسبه میکند:
$$MAE = \frac{1}{n} \sum_{i=1}^{n} |y_i - \hat{y}_i|$$
\**فرمول نمره نهایی:**
با توجه به نوسانات شدید شاخص آلودگی، نمره نهایی شما در جدول امتیازات با استفاده از یک تابع نمایی نزولی محاسبه میشود. این نمره یک عدد اعشاری خواهد بود که هرچه خطای شما کمتر باشد، به ۱۰۰ نزدیکتر میشود:
$$Final\_Score = 100 \times e^{-MAE / 100}$$
> در این فرمول، عدد 100 یک ضریب ثابت (C) است. با این معیار ارزیابی:
> - اگر مدل بینقصی بسازید و $MAE = 0$ باشد، نمره شما **۱۰۰** خواهد شد.
> - هرچه خطای شما بزرگتر شود، نمرهتان به صفر میل خواهد کرد.
---
### فرمت خروجی پیشبینیها
مدل شما باید برای تمام ردیفهای موجود در فایل تست (`test.csv`)، پیشبینیهای خود را انجام دهد. در فایل نوتبوک اولیه، کدی قرار داده شده است که خروجی مدل شما را در قالب فایلی به نام `submission.csv` ذخیره میکند. این فایل باید حتماً شامل دو ستون زیر باشد:
\* `No`: شناسه ردیف (دقیقا مشابه فایل تست)
\* `AQI`: پیشبینی شما برای غلظت آلودگی (AQI)
جدول زیر نمونهای از فایل خروجی را نشان میدهد:
| No | AQI |
|-----|-----|
| 35065 | 21.0 |
| 35066 | 63.0 |
| 35067 | 75.0 |
| 35068 | 10.0 |
| 35069 | 99.0 |
---
### نحوه ارسال پاسخ
پس از اجرای سلول جوابساز (آخرین سلول فایل نوتبوک)، فایل `result.zip` ساخته شده را ارسال نمایید. این فایل زیپ به صورت خودکار شامل نوتبوک شما و فایل `submission.csv` خواهد بود.
<details class="red">
<summary>**هشدار مهم**</summary>
توجه داشته باشید که پیش از اجرای سلول جوابساز، تغییرات اعمال شده در نوتبوک را با استفاده از کلید میانبر `ctrl+s` ذخیره کرده باشید؛ در غیر این صورت، در پایان مسابقه **نمره** شما ممکن است به درستی محاسبه نشود.
همچنین اگر از گوگل کولب (Colab) برای اجرای این فایل نوتبوک استفاده میکنید، قبل از ارسال فایل `result.zip`، آخرین نسخهی نوتبوک خود را دانلود کرده و به جای نوتبوک قبلی داخل فایل ارسالی قرار دهید.
</details>
The Mystery of Tehran's Air
| فایل اولیهی تمرین را میتوانید از [این لینک](/contest/assignments/103149/download_problem_initial_project/356094/) دانلود کنید. |
| :--: |
به دنیای زیرزمینی «آلباکرکی» خوش آمدید! والتر وایت اخیرا متوجه شده است که داشتن خالصترین فرمول شیمیایی برای تسخیر بازار کافی نیست؛ او فهمیده که قدرت اصلی در پیشبینی دقیق رفتار و روانشناسی مشتریان نهفته است!
اما یک بحران بزرگ در امپراتوری رخ داده است! اداره مبارزه با مواد مخدر به سرپرستی هنک شریدر، با استفاده از الگوریتمهای هوش مصنوعی در حال شناسایی الگوهای مصرف در سطح شهر است. در همین حال، هایزنبرگ متوجه شد که وکیلش سال گودمن، رفتار مصرفکنندگان را کاملا شانسی و صرفا با نگاه کردن به ظاهر و لباس آدمها در اتاق انتظار دفترش حدس میزده است! هایزنبرگ از شدت عصبانیت سال گودمن را از بخش تحلیل داده اخراج کرده و حالا خطر فروپاشی امپراتوریاش را حس میکند.
حالا هایزنبرگ از شما یک چیز میخواهد: سیستمی بسازید که با استفاده از آزمونهای معتبر روانشناسی (NEO-FFI) و اطلاعات دموگرافیک، کلاس مصرف ۵ محصول خاص را برای هر فرد پیشبینی کند. او همچنین دیتاستی از افراد مختلف را جمعآوری کرده و در اختیار شما قرار داده است.

<details class="yellow">
<summary>**📊 ساختار داده**</summary>
اطلاعات استخراجشده را در قالب دو فایل (آموزش و آزمون) در اختیار شما قرار داده است. هر سطر از این دیتاست، نمایانگر پروفایل یک شخص است. جزئیات ستونهای این دیتاست به شرح زیر است:
| **نام ستون** | **توضیحات** |
| :--- | :--- |
| **ID** | شناسه منحصربهفرد هر شخص |
| **Age** | گروه سنی فرد (نرمالایز شده) |
| **Sex** | جنسیت فرد |
| **EducationLevel** | سطح تحصیلات فرد |
| **Country** | کشور محل اقامت |
| **Background** | قومیت فرد |
| **EmotionalStabilityScore** | نمره روانرنجوری (Neuroticism) از آزمون شخصیت |
| **SocialEnergyScore** | نمره برونگرایی (Extraversion) از آزمون شخصیت |
| **OpennessScore** | نمره گشودگی به تجربیات جدید (Openness) |
| **CooperationScore** | نمره توافقپذیری (Agreeableness) |
| **SelfDisciplineScore** | نمره باوجدان بودن (Conscientiousness) |
| **ImpulseControlScore** | میزان تصمیمگیریهای لحظهای و بدون فکر (Impulsiveness) |
| **NoveltySeekingScore** | شاخص هیجانخواهی و ریسکپذیری (Sensation Seeking) |
در فایل آموزش، علاوه بر ستونهای بالا، ۵ ستون هدف (Target) نیز وجود دارد که شما باید آنها را برای دادههای آزمون پیشبینی کنید. مقادیر این ۵ ستون شامل اعداد `0`، `1` و `2` است که نشاندهنده بازه زمانی مصرف است:
* **کلاس 0 (No/Distant Use):** هرگز مصرف نکرده.
* **کلاس 1 (Near Use):** مصرف در سال گذشته.
* **کلاس 2 (Regular Use):** مصرف منظم.
این ۵ هدف عبارتند از:
`ماری_جوانا`، `ال_اس_دی`، `ماشروم`، `مواد_روان_گردان_قانونی`، `اکستازی`
</details>
### **خروجی**
برای ارزیابی برنامه خود، باید کلاس مصرف (اعداد 0، 1 یا 2) را برای ۵ ستون هدف در دادههای `test.csv` پیشبینی کنید. خروجی شما باید یک فایل CSV باشد که شامل ستون `ID` و ۵ ستون پیشبینی شده است.
```PlainText
ID,Marijuana,LSD,Mushroom,Psychotropic,Ex
1,0,0,1,0,2
2,2,0,0,1,0
3,1,1,0,0,0
4,0,0,0,2,1
...
```
----------
### **نحوه ارزیابی**
عملکرد مدل شما در این مسئله با استفاده از معیار **Macro F1** سنجیده میشود. از آنجایی که با یک مسئله طبقهبندی چندهدفه روبرو هستیم، سیستم داوری ابتدا امتیاز *Macro F1* را برای هر یک از ۵ تارگت به صورت جداگانه محاسبه میکند. برای آنکه مدل شما در هر تارگت امتیازی کسب کند، باید بتواند از آستانه عملکرد پایه (دقت ۶۶٪) عبور نماید. امتیازهای بالاتر از این آستانه، مقیاسبندی شده و نمره نهایی شما را در بازه ۰ تا ۱۰۰ شکل میدهند.
فرمول محاسبه امتیاز نهایی به شرح زیر است:
$$Score = \sum_{i=1}^{5} 20 \times \min\left(1, \max\left(0, \frac{\text{MacroF1}_i - 0.50}{0.50}\right)\right)$$
> **در صورتی که عملکرد مدل در یک تارگت کمتر از ۰.۶۶ باشد، امتیازی برای آن بخش دریافت نخواهد کرد.**
Better Call You
| فایل اولیهی تمرین را میتوانید از [این لینک](/contest/assignments/103149/download_problem_initial_project/356095/) دانلود کنید. |
| :--: |
در سال ۲۱۴۲، ابرشهر زیرزمینی و تاریک «نئو-وریدیا» در آستانه یک بحران مالی بزرگ قرار دارد. نئونکورپ بزرگترین هلدینگ تکنولوژی و سایبرنتیک شهر است که به شهروندان «کوانتوم کرِدیت» (QC) وام میدهد تا بتوانند چیپهای عصبی و آپگریدهای زیستی تهیه کنند.
اما یک فاجعه رخ داده است! سیستم ارزیابی هوش مصنوعی قدیمی نئونکورپ توسط هکرهای سایبری هک شده و حالا شهروندانی که هیچ قصدی برای بازپرداخت ندارند، در حال غارت اعتبارات مالی شرکت هستند. در همین حال، مدیران نئونکورپ متوجه شدند ارزیاب قبلی شرکت که مسئول تایید وامها بود، پروندهها را کاملاً شانسی و صرفاً بر اساس ظاهر فیزیکی متقاضیان تایید یا رد میکرده است! او بلافاصله اخراج و به بخش بازیافت ارگانیک منتقل شده است و حالا خطر ورشکستگی، امپراتوری نئونکورپ را تهدید میکند.
حالا نئونکورپ از شما یک چیز میخواهد: مدلی هوشمند و چندجدولی طراحی کنید که وضعیت بازپرداخت قراردادهای مالی (وامها) را در همان ثانیهی درخواست، بر اساس تاریخچه کامل رفتاری و تراکنشهای شهروندان پیشبینی کند. تیم دادهبرداری نئونکورپ، تاریخچه کامل نودهای نکسوس (حسابهای کاربری) و سیستمهای پرداخت را در قالب چندین جدول رابطهای استخراج کرده و در اختیار شما قرار داده است. وظیفه شما نجات شرکت از یک فروپاشی مالی است!
| **target** | **وضعیت قرارداد** |
| ---------- | ------------------------------------------- |
| 0 | قرارداد خاتمهیافته و بازپرداختشده |
| 1 | قرارداد خاتمهیافته با عدم بازپرداخت کامل |
| 2 | قرارداد فعال و بدون مشکل ثبتشده |
| 3 | قرارداد فعال و دارای بدهی یا مشکل بازپرداخت |
برای هر `loan_id` در `test.csv` باید دقیقاً یکی از مقادیر `{0, 1, 2, 3}` را پیشبینی کنید.
<details class="yellow">
<summary>**📊 ساختار دادهها**</summary>
جداول ما به شکل زیر است:
| **فایل** | **کلید اصلی** | **توضیح** |
| ----------------------- | ------------- | ----------------------------------------------- |
| `train.csv` | `loan_id` | وامهای آموزش به همراه ستون `target` |
| `test.csv` | `loan_id` | وامهای آزمون بدون ستون هدف |
| `account.csv` | `account_id` | حساب، منطقه، تناوب صدور صورتحساب و تاریخ افتتاح |
| `client.csv` | `client_id` | جنسیت، تاریخ تولد و منطقهٔ مشتری |
| `disp.csv` | `disp_id` | رابطهٔ مشتری و حساب و نوع دسترسی |
| `trans.csv` | `trans_id` | تاریخچهٔ تراکنش، مبلغ، مانده و مشخصات انتقال |
| `order.csv` | `order_id` | دستورهای پرداخت ثابت حساب |
| `card.csv` | `card_id` | کارتهای متصل به دسترسیهای حساب |
| `district.csv` | `district_id` | شاخصهای جمعیتی و اقتصادی منطقه |
| `sample_submission.csv` | `loan_id` | نمونهٔ قالب خروجی معتبر |
ارتباط بین جداول نیز به شکل زیر:
| **جدول و ستون مبدأ** | **جدول و ستون مقصد** |
| -------------------------------------- | ---------------------- |
| `train.account_id` / `test.account_id` | `account.account_id` |
| `account.district_id` | `district.district_id` |
| `disp.account_id` | `account.account_id` |
| `disp.client_id` | `client.client_id` |
| `client.district_id` | `district.district_id` |
| `card.disp_id` | `disp.disp_id` |
| `trans.account_id` | `account.account_id` |
| `order.account_id` | `account.account_id` |
</details>
ستون `date` در `train.csv` و `test.csv` تاریخ وام است. هنگام ساخت ویژگی برای یک وام، فقط اطلاعاتی مجاز است که پیش از تاریخ آن وام در دسترس بوده باشد.برای استفاده از تراکنشها باید شرط زیر برقرار باشد:
```PlainText
trans.date < loan.date
```
در نتیجه، تراکنشی که همزمان با تاریخ وام یا پس از آن ثبت شده باشد نباید در ویژگیهای آن وام استفاده شود. تاریخ افتتاح حساب نیز باید پیش از تاریخ وام باشد.جدولهای `card.csv` و `order.csv` زمان اعتبار جداگانه ندارند و باید بهعنوان اطلاعات snapshot تفسیر شوند.
### **خروجی**
برای ارزیابی سیستم خود، باید وضعیت نهایی قراردادهای موجود در `test.csv` را پیشبینی کنید. خروجی شما باید یک فایل متنی یا CSV باشد که شامل دو ستون با نامهای `contract_id` و `prediction` است. ستون پیشبینی باید شامل کلاسهای عددی (0، 1، 2 یا 3) باشد.
```PlainText
loan_id,target
10045,2
10046,0
10047,3
10048,1
...
```
----------
### **نحوه ارزیابی و جریمههای مالی**
## **ارزیابی مسئله**
برای ارزیابی این مسئله و مدل شما، از «ماتریس هزینه» زیر استفاده میکنیم. در این مسئله با توجه به ریسکهای مالی، پیشبینیهای درست بدون جریمه (۰) هستند و هر نوع خطای پیشبینی، وزن جریمهی متفاوتی (بر اساس شدت ضرر برای کسبوکار) دارد. هدف شما آموزش مدلی است که خطاهای مهلک را به حداقل برساند.
| **کلاس واقعی \ پیشبینی** | **۰ (تسویه موفق)** | **۱ (نکول/عدم پرداخت)** | **۲ (فعال عادی)** | **۳ (بدهکار و بحرانی)** |
| ------------------------- | ------------------ | ----------------------- | ----------------- | ----------------------- |
| **۰ (تسویه موفق)** | ۰ | ۲۰ | ۵ | ۲۰ |
| **۱ (نکول/عدم پرداخت)** | ۱۰۰ | ۰ | ۱۰۰ | ۵ |
| **۲ (فعال عادی)** | ۵ | ۲۰ | ۰ | ۲۰ |
| **۳ (بدهکار و بحرانی)** | ۱۰۰ | ۵ | ۱۰۰ | ۰ |
**فرمول نهایی محاسبه امتیاز:**
$$\text{Final Score} = 100 \times \max\left(0, 1 - \frac{\text{Model Penalty}}{\text{Baseline Penalty}}\right)$$
%align_right_start%
+ **Model Penalty:** مجموع جریمههای تولید شده توسط پیشبینیهای مدل شما.
+ **Baseline Penalty:** مجموع جریمههای مدل ساده.
%align_end%
جریمههای مالی بر اساس ماتریس خسارت زیر در نظر گرفته میشود:
+ **رد کردن مشتری خوب (فرصتسوزی):** اگر وامی واقعاً بدون مشکل باشد (کلاس ۰ یا ۲) اما مدل شما آن را بحرانی یا دیفالت (کلاس ۱ یا ۳) پیشبینی کند، شرکت مشتری را از دست میدهد. **(جریمه: ۲۰ QC)**
+ **تایید مشتری دیفالت (خسارت سنگین):** اگر وامی واقعاً دیفالت یا بحرانی باشد (کلاس ۱ یا ۳) اما مدل شما آن را بدون مشکل (کلاس ۰ یا ۲) پیشبینی کند، شرکت کل پول را از دست میدهد. **(جریمه سنگین: ۱۰۰ QC)**
+ **اشتباه در زمانبندی (خطای اداری):** اگر یک وام جاری را پایانیافته پیشبینی کنید یا برعکس (خطا بین کلاس ۰ و ۲، یا خطای بین کلاس ۱ و ۳). **(جریمه جزئی: ۵ QC)**
+ **پیشبینی کاملاً درست:** بدون خسارت. **(جریمه: ۰ QC)**
NeonCorp Operation
| فایل اولیهی تمرین را میتوانید از [این لینک](/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%