| فایل اولیهی دادگان آموزش و آزمون را میتوانید از [این لینک](/contest/assignments/89137/download_problem_initial_project/303237/) دانلود کنید. |
|:-:|
در این سؤال ترکیبی، دادههای مربوط به تمامی حالتهای معیوب در اختیار شما قرار گرفته است. مدل شما باید دو برچسب را به طور همزمان پیشبینی کند:
+ **نوع خرابی (fault_type)**: میتواند یکی از `bearing_fault`، `misalignment`، `lubrication_fault` یا `sensor_fault` باشد.
+ **منبع خرابی (fault_source)**: مقدار آن یا `equipment_fault` است یا `sensor_fault`.
### توضیحات داده
+ دادهها برای هر حسگر در قالب دو فایل جداگانه ارائه شده است:
+ `SensorName_train.csv`
+ `SensorName_test.csv`
+ هر فایل شامل ستونهای `timestamp` و مقدار همان حسگر است.
+ در نسخهی **train**، دو ستون برچسب `fault_type` و `fault_source` فقط در فایلی وجود دارد که **بالاترین نرخ نمونهبرداری** را دارد. سایر فایلهای train فاقد این برچسبها هستند.
+ زمانها تغییر یافتهاند، اما **ترتیب زمانی کاملاً حفظ شده است**.
+ نرخ نمونهبرداری سنسورها متفاوت است (۱، ۲، ۵، ۱۰ یا ۱۵ ثانیه). بنابراین، برای تحلیل چندحسگری باید دادهها بر اساس `timestamp` همگامسازی شوند.
### هدف
مدلی بسازید که بر اساس سیگنالهای حسگرها، به طور همزمان منبع خرابی (تجهیز یا حسگر) و نوع خرابی (یکی از چهار حالت) را تشخیص دهد. این مسئله یک مسألهی **چندبرچسبی (Multi-Label)** است؛ یعنی هر رکورد باید دو مقدار پیشبینیشده داشته باشد.
### ⚠️ نکات مهم
+ تمامی ردیفها معیوب هستند؛ دادههای عادی در این مجموعه وجود ندارد.
+ خرابیهای حسگر ممکن است با تغییرات ثابت، جهشهای کوتاه یا مقادیر گمشده همراه باشند؛ در حالی که خرابیهای تجهیز عموماً چندین سنسور را تحت تأثیر قرار میدهند.
+ این سوال ترکیبی از دو مسئلهٔ پیشین است. میتوانید از مدلهای چند خروجی استفاده کنید یا دو مدل مجزا آموزش دهید و خروجیهای آنها را در یک فایل ترکیب کنید.
+ دادههای آزمون فاقد هر دو ستون برچسب هستند و شما باید برای هر سطر مقدار هر دو برچسب را پیشبینی کنید.
### معیار ارزیابی
برای ارزیابی، دو مقدار **Macro‑F1** محاسبه میشود: یکی برای ستون `fault_type` (چهار کلاس) و دیگری برای ستون `fault_source` (دو کلاس). امتیاز کلی شما برابر میانگین این دو مقدار است:
$$F1_{type}=F1_{macro}(faultType)$$
$$F1_{source}=F1_{macro}(faultSource)$$
$$score= (\frac{round(F1_{type}, 3) + round(F1_{source}, 3)}{2})*100$$
<details class="red">
<summary>
**حداقل امتیاز**
</summary>
> در صورتی که هر یک از دو مقدار Macro‑F1 کمتر از ۰٫۵ باشد، نمرهٔ نهایی صفر خواهد بود.
</details>
<details class="red">
<summary>
**داده ارزیابی**
</summary>
در طول مسابقه تنها ۳۰ درصد از دادههای آزمون برای محاسبهٔ امتیاز موقت استفاده میشود و ۷۰ درصد باقیمانده بعد از اتمام مسابقه برای امتیازدهی نهایی به کار خواهد رفت تا از بیشبرازش جلوگیری شود.
</details>
<details class="red">
<summary>
**خروجی مورد انتظار**
</summary>
خروجی شما باید دقیقاً به اندازهی تعداد ردیفهای فایلی باشد که بالاترین نرخ نمونهبرداری را دارد، زیرا برچسبها در همان نقاط زمانی تعریف میشوند.
</details>
### نحوه ارسال پاسخ
یک فایل `result.zip` ارسال کنید که شامل دو بخش زیر باشد:
1. **`submission.csv`**: شامل دو ستون `fault_type` و `fault_source` که برای **تمام رکوردهای فایل تست سنسوری با بیشترین نرخ نمونهبرداری**، مقادیر پیشبینیشدهی نوع خرابی و منبع خرابی را نگه میدارد.
2. **`notebook.ipynb`**: شامل روند آمادهسازی داده (ادغام بر اساس `timestamp` و مدیریت نرخ نمونهبرداری متفاوت)، آموزش مدل/مدلها و تولید خروجی.