Автор: Ștefan Saraev
Ești inginer SRE (Site Reliability Engineer) la MegaCloud, o companie care operează un cluster de 200 de servere. Sistemul a început să se comporte ciudat: defecțiuni sporadice, reporniri neașteptate, pierderi de date.
Echipa anterioară a lăsat în urmă un sistem de monitorizare haotic: metrici numerice parțial corupte, etichete de categorie inconsistente, mesaje de alertă scrise de diferiți ingineri (fiecare cu stilul lui), și jurnale de sistem semi-structurate. Misiunea ta este să prezici care servere vor avea defecțiuni în următoarele ore.
Primești două fișiere CSV:
train.csv — istoric de monitorizare cu etichete parțiale:
| Coloană | Tip | Descriere |
|---|---|---|
id | int | Identificator unic |
timestamp | string | Momentul înregistrării (YYYY-MM-DD HH:MM:SS) |
server_id | string | Identificatorul serverului (ex: srv_042) |
region | string | Regiunea data center-ului (ex: eu-west, us-east, ap-south) |
server_type | string | Tipul hardware (ex: gpu-a100, cpu-epyc, storage-nvme) |
cpu_usage | float | Utilizare CPU (0–100) |
memory_usage | float | Utilizare memorie (0–100) |
disk_io | float | Operații disk I/O per secundă |
network_latency | float | Latență rețea (ms) |
error_rate | float | Rata de erori pe minut (0–50) |
temperature | float | Temperatura procesorului (°C) |
alert_title | string | Titlul scurt al alertei generate de sistemul de monitorizare |
system_log | string | Jurnalul de sistem semi-structurat (multi-linie, 3–15 rânduri) |
failure | int | 1 = serverul a avut defecțiune în următoarele 4 ore, 0 = nu. Lipsește pentru ~40% din rânduri (valoare: "") |
anomaly_score | int | O valoare între 0 și 100 |
test.csv — același format, dar:
failure și anomaly_score lipsesc complet (coloanele nu există)Trebuie să antrenezi un clasificator binar capabil să prezică failure (0 sau 1) pentru fiecare rând din test.csv.
Trebuie să antrenezi un model capabil să prezică scorul de anomalie pentru fiecare rând din test.csv.
Trebuie să generezi un fișier CSV numit, de exemplu, submission.csv, care să conțină predicțiile pentru toate rândurile din test.csv.
Fișierul de submisie trebuie să aibă exact următoarele coloane:
| Coloană | Tip | Descriere |
|---|---|---|
id | int | Identificatorul unic preluat din test.csv |
subtaskID | int | Identifică subtask-ul: 1 pentru predicția de failure, 2 pentru anomaly_score |
answer | float | Valoarea prezisă: 0 sau 1 pentru failure, respectiv un scor real pentru anomaly_score |
Pentru fiecare id din test.csv, trebuie să existe două rânduri în fișierul de submisie:
subtaskID = 1 pentru predicția de failuresubtaskID = 2 pentru anomaly_scoreid,subtaskID,answer
100001,1,0
100001,2,12.4
100002,1,1
100002,2,87.9
100003,1,0
100003,2,34.1
Punctajul total este de 100 puncte.
Soluția va fi evaluată separat pentru fiecare dintre cele două sarcini. Scorul final reprezintă suma punctajelor obținute.
Predicțiile pentru coloana failure vor fi evaluate folosind o metrică de clasificare binară:
Scorul va fi scalat la un maximum de 50 de puncte.
Punctajul se acordă după cum urmează:
score = 0 (dacă F1 ≤ 0.3)
score = 50 × (F1 - 0.3) / 0.3 (dacă 0.3 < F1 < 0.6)
score = 50 (dacă F1 ≥ 0.6)
Predicțiile pentru coloana anomaly_score vor fi evaluate folosind o metrică de regresie:
Scorul va fi scalat la un maximum de 50 de puncte.
Punctajul se acordă după cum urmează:
score = 50 (dacă MAE ≤ 8)
score = 50 × (13 - MAE) / 5 (dacă 8 < MAE < 13)
score = 0 (dacă MAE ≥ 13)
Scor final = Scor Sarcina A + Scor Sarcina B