کشتی‌گیری در دنیای اعداد


فایل اولیه سوال را می‌توانید از این لینک دانلود کنید.

تحلیل کارایی و برآورد پارامتر🔗

در فایل اولیه سوال یک فایل به فرمت 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. برای هر مسابقه ii کارایی را تعریف کنید:

    Ei=points_winneriduration_seci. E_i = \frac{\text{points\_winner}_i}{\text{duration\_sec}_i}.

  2. برای هر جفت (continent_winner,weight_class)\bigl(\text{continent\_winner},\,\text{weight\_class}\bigr) میانگین کارایی را محاسبه کنید:

    mean_effc,w=1Nc,wi:(ci,wi)=(c,w)Ei. \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)🔗

برای هر دستهٔ وزنی (ww) فرض کنید زمان‌های مبارزه تابع چگالی نمایی قطع‌شده دارند که در بازه [0,Tw][0,T_w] تعریف می‌شود، آنگاه تابع چگالی احتمال به شکل زیر است:

f(t;λ)=λeλt1eλTw,0tTw 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) را بنویسید و پارامتر λ^w\hat\lambda_w را با روشی مناسب (مثلاً نیوتن–رافسون یا جستجوی عددی) پیدا کنید.
  1. معیار AIC را محاسبه کنید:

AICw=2k2w(λ^w),k=1. \mathrm{AIC}_w = 2\,k \;-\; 2\,\ell_w(\hat\lambda_w), \quad k=1.

  1. خروجی در part_two.csv، هر سطر سه ستون:
weight_class lambda_hat aic
Heavyweight 15.21354613 18.21354613

ردیف‌ها بر حسب lambda_hat به صورت صعودی مرتب شوند. دقت عددی هر مقدار حداقل ۶ رقم اعشار باشد.


نکات تکمیلی

محدودیت‌های پیاده‌سازی :

  • نمی‌توانید از هیچ کتابخانهٔ خارجی یا ماژول (یعنی هیچ import) استفاده کنید.
  • تنها از توابع و امکانات پایهٔ پایتون استفاده کنید.
  • فایل‌ها را با متدهای استاندارد open/read/write بخوانید/بنویسید.
  • فرمت CSV باید دقیقاً مطابق با آنچه گفته شد باشد (جداسازی با ‍, ، بدون فاصلهٔ اضافه).
  • برای توابع نمایی از مقدار ثابت e=2.718281828459045 استفاده کنید.
  • همهٔ محاسبات آماری و عددی را باید خودتان پیاده کنید (تابع log، مشتق، حل عددی و …).