| فایل اولیهی سوال را میتوانید از [این لینک](/contest/assignments/84377/download_problem_initial_project/306370/) دانلود کنید.|
| :--: |
در سرزمین همیشه در صحنه برره، اطلاعات کارمندان دولتی در یک دیتابیس قدیمی و پر از هرجومرج نگهداری میشود. سازمان مرموز «تَساب - تحلیل سایبری اهالی برره» ادعا میکند که میتواند با تحلیلهای پیشرفته، نبض قدرت و سیاستهای پشت پرده این سرزمین را در دست بگیرد.
آنها بهترین هکر خود، **طاها**، را برای این ماموریت استخدام میکنند. طاها با موفقیت به دیتابیس نفوذ کرده و یک کپی کامل از آن را به دست آورده است. اما حالا با یک مشکل بزرگ روبروست: مدیران «تَساب» از او گزارشهای تحلیلی و آماری پیچیدهای میخواهند که فراتر از تخصص اوست.
|  |
| :---: |
| جلسه سرّی تساب|
طاها که نمیخواهد این ماموریت پردرآمد را از دست بدهد، به صورت مخفیانه با شما، یک متخصص تحلیل داده، تماس میگیرد. او دادههای خام را در اختیار شما قرار داده و از شما خواسته تا پاسخ سه سوال کلیدی را برایش پیدا کنید. موفقیت او کاملاً به تحلیلهای دقیق شما بستگی دارد.
## نحوهی ارسال پاسخ
برای پاسخ به این سوال ابتدا فایل نوتبوک قرار گرفته در فایل اولیه را باز کنید و سپس مراحل را مطابق آنچه که از شما خواسته شده انجام دهید. در نهایت، پس از اجرای سلول جوابساز (آخرین سلول فایل نوتبوک) فایل `result.zip` ساخته شده را ارسال نمایید.
<details class="red">
<summary>
**هشدار مهم**
</summary>
توجه داشته باشید که پیش از اجرای سلول جوابساز، تغییرات اعمال شده در نوتبوک را با استفاده از کلید میانبر `ctrl+s` ذخیره کرده باشید در غیر این صورت، در پایان مسابقه **نمره** شما به **صفر** تغییر خواهد کرد.
همچنین اگر از کولب برای اجرای این فایل نوتبوک استفاده میکنید، قبل از ارسال فایل `result.zip`، آخرین نسخهی نوتبوک خود را دانلود کرده و داخل فایل ارسالی قرار دهید.
</details>
| فایل اولیهی پروژه را میتوانید از [این لینک](/contest/assignments/84377/download_problem_initial_project/306371/) دانلود کنید.|
| :--: |
در این سوال با **دادههای صنعتی** سروکار داریم. قطعات صنعتی به مرور زمان فرسوده میشوند و کارایی خود را از دست میدهند. خرابی این قطعات میتواند کل فرآیند تولید را تحت تأثیر قرار دهد. یکی از پارامترهای مهم در بررسی وضعیت قطعات، **دمای محیط اطراف آنها** است. دما میتواند اطلاعات زیادی درباره سلامت قطعه، فشارهای وارده یا شرایط کاری آن ارائه دهد.
وظیفه شما در این بخش از مسابقه، **پیشبینی دمای قطعات صنعتی** با استفاده از دیگر ویژگیهای آنهاست، تا بتوانید روند عملکرد و وضعیت قطعات را بهتر تحلیل و مدیریت کنید.

-----------------------
## معیار ارزیابی
برای ارزیابی مدل شما از معیار `R2 Score` استفاده میشود. برای نمرهگیری در این سوال مدل شما باید دارای `R2 Score` حداقل ۰.۶ باشد و در این حالت نمرهی نهایی بر اساس فرمول زیر محاسبه میگردد:
$$round(r2score, 3) \times 100$$
اگر مدل شما به حدنصاب نرسد، نمرهی دریافتی **صفر** خواهد بود.
<details class="red">
<summary>
**توجه**
</summary>
در طول مسابقه امتیازی که مشاهده میکنید، فقط نتیجهی ارزیابی مدل شما روی ۳۰ درصد از دادههای آزمون است. بعد از پایان زمان مسابقه، **امتیاز نهایی** شما روی ۷۰ درصد مابقی محاسبه میشود.
این کار به منظور جلوگیری از بیشبرازش (`overfitting`) و حفظ عمومیت مدل انجام میشود تا مطمئن شویم مدلهایی که دچار بیشبرازش شدهاند، در امتیازدهی نهایی، افت میکنند
</details>
---------------------------------
## نحوهی ارسال پاسخ
پاسخ نهایی شما باید در قالب فایلی با نام **submission.csv** ارائه شود. این فایل باید شامل یک ستون با نام **Air temperature [K]** باشد. در این ستون، برای هر نمونه از دادههای آزمون مشخص میکنید که دمای هوا برای آن نمونه تا چه حد بوده است.
جدول زیر نمونهای از سه سطر اول فایل خروجی مورد انتظار را نشان میدهد:
| **Air temperature [K]** |
|:---------:|
| 300.854 |
| 295.561 |
| 297.285 |
برای پاسخ به این سوال ابتدا فایل نوتبوک قرار گرفته در فایل اولیه را باز کنید و سپس مراحل را مطابق آنچه که از شما خواسته شده انجام دهید. در نهایت، پس از اجرای سلول جوابساز (آخرین سلول فایل نوتبوک) فایل `result.zip` ساخته شده را ارسال نمایید.
<details class="red">
<summary>
**هشدار مهم**
</summary>
توجه داشته باشید که پیش از اجرای سلول جوابساز، تغییرات اعمال شده در نوتبوک را با استفاده از کلید میانبر `ctrl+s` ذخیره کرده باشید در غیر این صورت، در پایان مسابقه **نمره** شما به **صفر** تغییر خواهد کرد.
همچنین اگر از کولب برای اجرای این فایل نوتبوک استفاده میکنید، قبل از ارسال فایل `result.zip`، آخرین نسخهی نوتبوک خود را دانلود کرده و داخل فایل ارسالی قرار دهید.
</details>
| فایل اولیهی سوال را میتوانید از [این لینک](/contest/assignments/84377/download_problem_initial_project/306372/) دانلود کنید.|
| :--: |
شرکت مخابراتی «**آوا تلکام**»، یکی از بازیگران قدیمی و خوشنام بازار ارتباطات ایران، در چند فصل اخیر با چالش جدیدی روبرو شده است. با ورود یک رقیب تهاجمی به بازار که با پیشنهادهای وسوسهانگیز و کمپینهای تبلیغاتی گسترده، سعی در جذب مشتریان شرکتهای دیگر دارد، **نرخ ریزش مشتریان** در آوا تلکام به شکل نگرانکنندهای افزایش یافته است.
تیم بازاریابی و فروش، استراتژیهای مختلفی مانند ارائه تخفیف و بستههای جدید را امتحان کردهاند، اما به نظر میرسد این راهحلها مقطعی بوده و مشکل اصلی را حل نمیکند. مدیران ارشد شرکت معتقدند که کلید حل این معما، در دادههای ارزشمندی نهفته است که تا به امروز به درستی از آنها استفاده نشده است: **صدای مشتریان**.
آوا تلکام هزاران ساعت مکالمه ضبطشده از تماسهای مشتریان با مرکز پشتیبانی را در اختیار دارد. این تماسها، که اخیراً با استفاده از تکنولوژیهای پیشرفته به متن تبدیل شدهاند، گنجینهای از شکایات، درخواستها، نیازها و احساسات واقعی مشتریان هستند.
**چالش اصلی اینجاست:** آیا میتوانیم قبل از اینکه مشتری تصمیم به رفتن بگیرد، با تحلیل ترکیبی از دادههای کلاسیک مشتری و متن گفتگوهای او با مرکز پشتیبانی، زنگ خطر را بشنویم و جلوی ریزش او را بگیریم؟
شما به عنوان دانشمند داده در تیم هوش تجاری آوا تلکام، مسئولیت این پروژه حیاتی را بر عهده گرفتهاید. موفقیت شما میتواند میلیونها تومان از هزینههای جذب مشتری جدید را صرفهجویی کرده و وفاداری مشتریان فعلی را به شرکت بازگرداند.
شما در نهایت باید سیستمی طراحی کنید که با توجه به ویژگیهای جمعآوری شده از مشتریان، **احتمال ریزش یا خروج مشتری** را پیشبینی کند؟
<details class="yellow">
<summary>**دادگان**</summary>
مجموعه داده مورد استفاده شامل ویژگیهای جمعآوری شده از مشتریان است که عبارتاند از:
| *نام ستون (Column Name)* | *توضیح مختصر* |
|:----------------------------:|:-------------------------------------------------------------------------:|
| *custId* | شناسه منحصر به فرد هر مشتری |
| *sex* | جنسیت مشتری |
| *isElderly* | مشخص میکند که آیا مشتری سالمند است یا خیر |
| *partner* | مشخص میکند که آیا مشتری متاهل است یا خیر |
| *dependents* | مشخص میکند که آیا مشتری افراد تحت تکفل دارد یا خیر |
| *membershipDuration* | مدت زمان عضویت مشتری (معمولاً به ماه) |
| *agreementTerm* | نوع قرارداد مشتری (مثلاً ماهانه، یک ساله، دو ساله) |
| *acquisitionChannel* | کانالی که مشتری از طریق آن جذب شده است (مثلاً آنلاین) |
| *phoneService* | آیا مشتری سرویس تلفن دارد یا خیر |
| *multipleLines* | آیا مشتری بیش از یک خط تلفن دارد یا خیر |
| *internetService* | نوع سرویس اینترنت مشتری (مثلاً DSL یا فیبر نوری) |
| *monthlyDataUsageGb* | میانگین حجم اینترنت مصرفی ماهانه مشتری (به گیگابایت) |
| *cyberProtectionService* | آیا مشتری سرویس محافظت سایبری دارد یا خیر |
| *onlineBackup* | آیا مشتری سرویس پشتیبانگیری آنلاین دارد یا خیر |
| *deviceProtection* | آیا مشتری سرویس محافظت از دستگاه دارد یا خیر |
| *techSupport* | آیا مشتری سرویس پشتیبانی فنی دارد یا خیر |
| *streamingTv* | آیا مشتری سرویس پخش آنلاین تلویزیون دارد یا خیر |
| *streamingMovies* | آیا مشتری سرویس پخش آنلاین فیلم دارد یا خیر |
| *recurringFee* | هزینه ثابت ماهانه مشتری |
| *cumulativeSpend* | مجموع تمام هزینههایی که مشتری پرداخت کرده است |
| *transactionMethod* | روش پرداخت مشتری |
| *paperlessBilling* | آیا مشتری از صورتحساب الکترونیکی استفاده میکند یا خیر |
| *billingIssues* | تعداد مشکلات مربوط به صورتحساب که مشتری داشته است |
| *supportTickets* | تعداد تیکتهای پشتیبانی که مشتری ثبت کرده است |
| *lastContactRating* | امتیازی که مشتری به آخرین تماس خود با پشتیبانی داده است |
| *serviceSatisfactionScore* | امتیاز کلی رضایت مشتری از خدمات |
| *mobileAppSatisfaction* | امتیاز رضایت مشتری از اپلیکیشن موبایل |
| *networkStabilityScore* | امتیاز پایداری شبکه برای مشتری |
| *avgNetworkLatencyMs* | میانگین تاخیر شبکه (پینگ) برای مشتری به میلیثانیه |
| *dataLimitWarnings* | تعداد هشدارهای اتمام حجم اینترنت که مشتری دریافت کرده |
| *loyaltyPoints* | امتیاز وفاداری مشتری |
| *customerFeedback* | بازخورد کیفی ثبت شده توسط مشتری |
| *competitorOffers* | آیا مشتری پیشنهادهایی از شرکتهای رقیب دریافت کرده است |
| *custExit* | متغیر هدف؛ مشخص میکند که آیا مشتری ریزش کرده یا خیر |
</details>
# ارزیابی
برای ارزیابی مُدل شما از سطح زیر ناحیه نمودار ROC استفاده میشود. برای مطالعه بیشتر در مورد این نمودار میتوانید [ویکیپدیا](https://en.wikipedia.org/wiki/Receiver_operating_characteristic) یا [راهنمای کوتاه نکات و ترفندهای یادگیری ماشین](https://stanford.edu/~shervine/l/fa/teaching/cs-229/cheatsheet-machine-learning-tips-and-tricks) را مطالعه کنید.
نتیجه AUC ROC مُدل شما بر روی دادگان آزمایش در عدد ۱۰۰ ضرب شده و به عنوان امتیاز این مرحله در نظر گرفته میشود (بالاترین امتیاز ممکن از این مرحله ۱۰۰ میباشد).
داوری این سوال قبل از پایان مسابقه، تنها بر اساس ۳۰ درصد از دادگان آزمایش (`test`) خواهد بود. پس از اتمام مسابقه، برای بهروزرسانی نهایی جدول امتیازات از ۱۰۰ درصد دادگان آزمایش استفاده خواهد شد؛ این کار برای جلوگیری از بیشبرازش (`overfit`) روی دادگان آزمایش انجام میشود.
# خروجی
شما باید پس از ساخت سیستم خود، فایل `test.csv` را خوانده و به ازای هر آیدی یا کاربر موجود در آن مجموعه داده، **احتمال** ریزش هر کاربر را با توجه به ویژگیهای آن تخمین بزنید. در نهایت شما باید فایل *CSV* با نام `submission.csv` که هر سطر آن تخمین شما برای ریزش مشتری است را ساخته و به همراه **فایل کد** ارسال کنید.
| *custId* | *custExit* |
|:---------:|:----------:|
| m64861 | 0.22 |
| ... | ... |
| zk62733 | 0.53 |
نجات مشتریان در «آوا تلکام»
| فایل اولیهی دادگان آموزش و آزمون را میتوانید از [این لینک](/contest/assignments/84377/download_problem_initial_project/306368/) دانلود کنید.|
|:-:|
در دنیای امروز، سرعت انتشار خبر به حدی بالاست که گاهی تشخیص حقیقت از دروغ دشوار میشود. برخی منابع با اهداف مختلف، اخبار جعلی یا تحریفشده منتشر میکنند که میتواند اثرات اجتماعی، اقتصادی و روانی داشته باشد. در این سوال، شما باید مدلی بسازید که بتواند بر اساس متن خبر (شامل تیتر و محتوای خبر)، تشخیص دهد که آیا خبر **واقعی** است یا **جعلی**.
به شما مجموعهای از اخبار فارسی داده میشود که برای هر نمونه، برچسب آن به صورت `real` (واقعی) یا `fake` (جعلی) مشخص شده است. با استفاده از این دادهها باید مدل خود را آموزش دهید تا بتواند بر روی مجموعهی تست، اخبار را به درستی دستهبندی کند.
### توضیحات داده
دادهها در قالب یک فایل CSV ارائه میشوند و شامل ستونهای زیر هستند:
- `id`: شناسه یکتا برای هر خبر
- `headline`: تیتر خبر
- `content`: متن کامل یا خلاصه خبر
- `label`: (فقط در دادهی آموزش) مقدار `درست` یا `نادرست`
### هدف
مدلی طراحی کنید که با استفاده از تیتر و متن خبر، بتواند اخبار جعلی را شناسایی کند. میتوانید از روشهای یادگیری ماشین کلاسیک، یادگیری عمیق و یا روشهای پیشرفته مبتنی بر مدلهای زبانی استفاده کنید.
### ⚠️ نکات مهم
- دادهها بهگونهای تقسیم شدهاند که خبرهای مربوط به یک رویداد فقط در یکی از مجموعههای آموزش یا تست قرار دارند.
- استفاده از دادههای خارجی فقط در صورتی مجاز است که عمومی و رایگان باشند و در توضیحات کد ذکر شوند.
- دادهی تست فاقد ستون `label` است و باید خروجی مدل شما روی آن تولید شود.
### معیار ارزیابی
برای ارزیابی از **Macro-F1** استفاده میشود تا اثر عدم توازن داده کاهش یابد. فرمول آن به صورت زیر است:
$$F1_{macro} = \frac{1}{2} (F1_{real} + F1_{fake})$$
<details class="red">
<summary>
**توجه**
</summary>
> در صورتی که Macro-F1 شما کمتر از ۰.۵ باشد، نمرهٔ نهایی صفر خواهد بود.
</details>
<details class="red">
<summary>
**توجه**
</summary>
در طول مسابقه امتیازی که مشاهده میکنید، فقط نتیجهی ارزیابی مدل شما روی ۳۰ درصد از دادههای آزمون است. بعد از پایان زمان مسابقه، **امتیاز نهایی** شما روی ۷۰ درصد مابقی محاسبه میشود.
این کار به منظور جلوگیری از بیشبرازش (`overfitting`) و حفظ عمومیت مدل انجام میشود تا مطمئن شویم مدلهایی که دچار بیشبرازش شدهاند، در امتیازدهی نهایی، افت میکنند.
</details>
### نحوه ارسال پاسخ
برای این سوال یک فایل `result.zip` ارسال کنید که شامل موارد زیر است:
1. **`submission.csv`**: خروجی مدل شما روی `test.csv` با یک ستون:
- `label` (`درست` یا `نادرست`)
2. **`notebook.ipynb`**: کد کامل شامل پیشپردازش، آموزش مدل، و تولید خروجی.
| فایل اولیهی دادگان آموزش و آزمون را میتوانید از [این لینک](/contest/assignments/84377/download_problem_initial_project/306369/) دانلود کنید.|
|:-:|
کوئرا تصمیم گرفته به جونیورای کوچک که پنج سال داره یاد بده که هر کلمهای که میبینه چیه تا بتونه تفاوت یک بیماری با اثر هنری رو یاد بده. اما چون بازار ایجنت ها داغه، تصمیم گرفته که برای این کار یه ایجنتی بنویسه و برای همین نیاز به کمک شما داره.
این ایجنت باید فایل زیپ قرار داده شده رو بخونه. این فایل دامپ ستونهای یک دیتابیسه. و هر ولیوی اون، یک متن رمز شدهست.(راهنمایی: این رمزگذاری به عدد ۶۴ علاقه داره) بعد از decode کردن مقادیر رمز شده، باید هر سطر به [مدل زبانی مشخص شده](https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free)، داده بشه و این مقادیر براش توسط مدل زبانی پر بشه:
```json
{
"تاریخ و زمان": [],
"مکان جغرافیایی": [],
"معابر شهری": [],
"مرکز پزشکی/درمانی": [],
"مرکز آموزشی": [],
"مرکز رسانه ای": [],
"مرکز ترانزیت": [],
"مرکز فرهنگی/هنری/مذهبی": [],
"مرکز ورزشی": [],
"نهاد حکومتی/سیاسی": [],
"سازمان مالی/تجاری": [],
"شخص": [],
"بیماری": [],
"درصد": [],
"مقدار پول": [],
"محصول": [],
"رویداد/مناسبت": [],
"عنوان شغلی": [],
"قومیت/ملیت/مذهب": [],
"شماره": [],
"حیوان": [],
"گیاهان": [],
"شاخه علمی": [],
"شاخه ورزشی": [],
"زبان": [],
"اثر ادبی/هنری": [],
}
```
<details class="red">
<summary>
**توجه**
</summary>
اگه کنجکاو شدی بدونی چطور متن رو تکهتکه میکنن و اسامی مهم رو میکشن بیرون، فقط سه تا حرف رو سرچ کن: NER
</details>
سپس به همهی این خروجیهایی که از مدل زبانی گرفته شدهن به ترتیب در فرمت csv سیو بشن. (یعنی در هر سطر این csv، یک جیسون پرشده به فرمت بالا وجود خواهد داشت.)
### نحوه ارسال پاسخ
برای این سوال یک فایل `result.zip` ارسال کنید که شامل موارد زیر است:
1. **`submission.csv`**: خروجی مدل شما با یک ستون:
- `gold`
2. **`solution.py`**: کد کامل شامل پیشپردازش، آموزش مدل، و تولید خروجی.
**امتیازگیری:**
تعداد دیتاها ۵۵ تاست. و ماکسیمم امتیاز سوال ۱۰۰ تا. اسکور F1 برای پاسختون محاسبه میشه و به میزان این اسکور، امتیاز دریافت میکنید. (بنابرین ماکسیمم امتیاز ممکن برای دریافت، ۱۰۰ هستش.)
`F1 = 2 * (precision * recall) / (precision + recall)`
<details class="red">
<summary>
**توجه**
</summary>
کدهای ارسال شده دستی تست میشن. به این صورت که فایل زیپ قرار داده شده در کنارشون(یعنی در فولدر یکسانی هستن) رو باید بخونه و خروجی csv رو کامل همونجا سیو کنه. (پس دقت کنید که ایجنت باید تمام دیتاست رو یکجا بخونه و دیتاش رو پراسس کنه. (یعنی به ازای هر سطر، پراسس جداگانه نداشته باشیم.))
</details>
<details class="red">
<summary>
**توجه**
</summary>
برای استفاده از مدل زبانی مجاز(یعنی Llama 3.3 70B) میتونید [از اینجا](https://openrouter.ai/meta-llama/llama-3.3-70b-instruct:free/api) پیش برید.
</details>