Fantoma din Mașinărie (11/12)
Autor: Ștefan Saraev
Context
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.
Date de intrare
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șianomaly_scorelipsesc complet (coloanele nu există)- Conține date dintr-o perioadă nouă de monitorizare
Sarcini
Sarcina A - Clasificare binară (50 puncte)
Trebuie să antrenezi un clasificator binar capabil să prezică failure (0 sau 1) pentru fiecare rând din test.csv.
Sarcina B - Estimarea scorului de anomalie (50 puncte)
Trebuie să antrenezi un model capabil să prezică scorul de anomalie pentru fiecare rând din test.csv.
Formatul fișierului de submisie
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 |
Format
Pentru fiecare id din test.csv, trebuie să existe două rânduri în fișierul de submisie:
- unul cu
subtaskID = 1pentru predicția defailure - unul cu
subtaskID = 2pentruanomaly_score
Exemplu
id,subtaskID,answer
100001,1,0
100001,2,12.4
100002,1,1
100002,2,87.9
100003,1,0
100003,2,34.1
Evaluare
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.
Sarcina A - Clasificare binară (50 puncte)
Predicțiile pentru coloana failure vor fi evaluate folosind o metrică de clasificare binară:
- F1-score (clasa pozitivă = 1) - pentru a evalua capacitatea modelului de a identifica corect serverele care vor avea defecțiuni;
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)
Sarcina B - Estimarea scorului de anomalie (50 puncte)
Predicțiile pentru coloana anomaly_score vor fi evaluate folosind o metrică de regresie:
- MAE (Mean Absolute Error) - măsoară eroarea medie absolută;
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 final = Scor Sarcina A + Scor Sarcina B