| فایل اولیه سوال را میتوانید از [این لینک](/contest/assignments/85735/download_problem_initial_project/292703/) دانلود کنید. |
|:-:|
# تحلیل کارایی و برآورد پارامتر
در فایل اولیه سوال یک فایل به فرمت `CSV` به نام `wrestling_stats.csv` وجود دارد که اطلاعات مسابقات کشتی را نگه میدارد.
هر سطر (به جز هدر) شامل این ستونهاست:
- `match_id`
- `weight_class`
- `duration_sec`
- `points_winner`
- `points_loser`
- `continent_winner`
- `match_type`
وظیفهٔ شما نوشتن یک اسکریپت پایتون (بدون هیچ `import` یا ماژول خارجی) است که دو فایل خروجی تولید میکند:
- `part_one.csv`
- `part_two.csv`
----------------------
## پیادهسازی
شما باید یک فایل پایتونی به نام `stc.py` ایجاد کنید. سپس در این فایل باید دو تابع بنویسید که هر تابع وظیفه دارد تا یک دیتاست ایجاد کند و آن را در کنار فایل `stc.py` ذخیره کند. نام این دو تابع به شرح زیر است:
+ **create_part1**
+ **create_part2**
این دو تابع وظیفه دارند که مجموعهدادهی **wrestling_stats.csv** را دریافت کنند و سپس طبق توضیحات داده شده اطلاعاتی را تولید کرده و در دو مجموعه دادهی **part_one.csv** و **part_two.csv** ذخیره کنند. توجه کنید که ورودی این دو تابع باید نام یک مجموعهداده باشد.
شما باید فایل پیادهسازی پایتونی خود را به همراه **part_one.csv** و **part_two.csv** زیپ کرده و در کوئرا قرار دهید.
----------------------
## محدودیتهای کلی
1. **بدون استفاده از هیچ دستور `import`**؛ فقط مجاز به استفاده از built-inهای پایتون هستید.
2. خروجیها باید دقیقاً در قالب `CSV`باشند.
3. دقت اعداد اعشاری در خروجی حداقل ۶ رقم پس از ممیز باشد.
4. همهٔ محاسبات (مثل نمایی و لگاریتم و بهینهسازی) باید به صورت دستی پیادهسازی شوند.
---
## قسمت اول – رتبهبندی کارایی
1. برای هر مسابقه $i$ کارایی را تعریف کنید:
\[ E_i = \frac{\text{points\_winner}_i}{\text{duration\_sec}_i}. \]
2. برای هر جفت \(\bigl(\text{continent\_winner},\,\text{weight\_class}\bigr)\) میانگین کارایی را محاسبه کنید:
\[ \text{mean\_eff}_{c,w} = \frac{1}{N_{c,w}} \sum_{i:(c_i,w_i)=(c,w)} E_i. \]
3. نمونه خروجی در `part_one.csv`:
|continent| weight_class | mean_efficiency|
|:------------------:|:------------------:|:------------------:|
|Asia| Heavyweight | 12.967815168|
ردیفها بر حسب `mean_efficiency` نزولی مرتب شوند.
---
## قسمت دوم – تخمین پارامتر نمایی قطعشده (MLE)
برای هر دستهٔ وزنی ($w$) فرض کنید زمانهای مبارزه تابع چگالی نمایی قطعشده دارند که در بازه \([0,T_w]\) تعریف میشود، آنگاه تابع چگالی احتمال به شکل زیر است:
$$
f(t; \lambda) = \frac{ \lambda \cdot e^{-\lambda t} }{ 1 - e^{-\lambda T_w} }, \quad 0 \leq t \leq T_w
$$
1. برای هر کلاس وزنی w، لگاریتم درستنمایی (log‐likelihood) را بنویسید و پارامتر $\hat\lambda_w$ را با روشی مناسب (مثلاً نیوتن–رافسون یا جستجوی عددی) پیدا کنید.
2. معیار `AIC` را محاسبه کنید:
\[ \mathrm{AIC}_w = 2\,k \;-\; 2\,\ell_w(\hat\lambda_w), \quad k=1. \]
3. خروجی در `part_two.csv`، هر سطر سه ستون:
|weight_class| lambda_hat| aic|
|:------------------:|:------------------:|:------------------:|
| Heavyweight | 15.21354613| 18.21354613|
ردیفها بر حسب `lambda_hat` به صورت صعودی مرتب شوند.
دقت عددی هر مقدار حداقل ۶ رقم اعشار باشد.
---
**نکات تکمیلی**
محدودیتهای پیادهسازی :
+ نمیتوانید از هیچ کتابخانهٔ خارجی یا ماژول (یعنی هیچ `import`) استفاده کنید.
+ تنها از توابع و امکانات پایهٔ پایتون استفاده کنید.
+ فایلها را با متدهای استاندارد `open/read/write` بخوانید/بنویسید.
+ فرمت `CSV` باید دقیقاً مطابق با آنچه گفته شد باشد (جداسازی با `,` ، بدون فاصلهٔ اضافه).
+ برای توابع نمایی از مقدار ثابت e=2.718281828459045 استفاده کنید.
+ همهٔ محاسبات آماری و عددی را باید خودتان پیاده کنید (تابع log، مشتق، حل عددی و …).