| فایل اولیهی تمرین را میتوانید از [این لینک](/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)**