Fire Distinguisher - 9/10
Forfatter: Daniel Ion
Descrierea Problemei: Fire Distinguisher
Context
SafeDrive Technologies, o companie pionieră în domeniul siguranței auto, dezvoltă un sistem inteligent de prevenire a dezastrelor pentru vehicule moderne. Cu creșterea incidentelor cauzate de supraîncălzire și scurgeri de gaze, compania are nevoie de un Fire Distinguisher - un sistem AI capabil să detecteze în timp real anomalii periculoase și să le clasifice corect.
Tu ești inginerul principal de Machine Learning. Sarcina ta: să construiești sistemul de detectare care poate salva vieți.
Descrierea Datelor
Datele provin de la senzori montați în vehicule experimentale, colectate la intervale de 1 secundă:
Senzori Input:
id: id asociat înregistrăriigas_raw: Concentrația brută de gaz detectatătemp_c: Temperatura în grade Celsiusflame: Senzor binar de flacără (0 = absent, 1 = prezent)gas_avg: Media mobilă a concentrației de gaztemp_avg: Media mobilă a temperaturiidGas: Rata de schimbare a gazuluidTemp: Rata de schimbare a temperaturiisensor_noise: Zgomot introdus de senzortimestamp_ms: Timestamp Unix în milisecundesensor_id: ID-ul senzorului (S001-S005)battery_level: Nivelul bateriei senzoruluivehicle_speed: Viteza vehicululuiweather_condition: Condiția meteo (sunny, rainy, cloudy, foggy)gas_sensor_drift: Deriva senzorului de gazambient_temp: Temperatura ambientală
Target:
label: Tipul hazardului- NORMAL: Condiții sigure
- GAS_LEAK: Scurgere de gaz detectată
- OVERHEAT: Supraîncălzire periculoasă
- FIRE: Incendiu activ
Fișiere Furnizate
train.csv: Date de antrenament cu toate coloanele (inclusivlabel)test.csv: Date de test fără coloanalabel
Cerințele Misiunii
Subtask 1: Profilul hazardurilor (20 puncte)
Echipa de siguranță vrea să înțeleagă distribuția și caracteristicile hazardurilor în datele de antrenament.
Sarcina ta: Pentru train.csv, calculează următoarele 12 statistici:
- Procentul de citiri pentru fiecare tip de hazard (4 valori: NORMAL, GAS_LEAK, OVERHEAT, FIRE) - rotunjit la 2 zecimale
- Temperatura medie pentru fiecare tip de hazard (4 valori) - rotunjită la 1 zecimală
- Concentrația medie de gaz pentru fiecare tip de hazard (4 valori) - rotunjită la 1 zecimală
Ieșire: 12 valori numerice (4 procente + 4 temperaturi + 4 concentrații gaz).
Exemplu: Pentru NORMAL: 45.32% din citiri, temperatura medie 32.5°C, gaz mediu 245.3
Subtask 2: Scorul de anomalie (15 puncte)
Echipa de siguranță vrea să identifice citirile anormale care ar putea indica situații
periculoase. Citirile normale formează un pattern în spațiul feature-urilor — sarcina ta
este să măsori cât de departe este fiecare citire din test față de acest pattern.
1. Selectează cele mai relevante features
- Identifică top 6 atribute numerice care au cea mai puternică corelație Spearman cu
tipul de hazard (encodat:NORMAL=0, GAS_LEAK=1, OVERHEAT=2, FIRE=3) - În caz de egalitate, folosește ordinea alfabetică
2. Pregătește datele
- Înlocuiește valorile lipsă cu mediana (calculată doar pe train)
- Scalează datele folosind standardizare (antrenată pe train, aplicată pe test)
3. Definește profilul NORMAL
- Folosește doar înregistrările cu
label == "NORMAL"din train pentru a stabili
ce înseamnă "comportament normal"
4. Calculează scorul de anomalie
- Pentru fiecare citire din test, calculează distanța Mahalanobis față de centrul
distribuției NORMAL - Formula:
d = sqrt((x - mu)^T * Sigma^(-1) * (x - mu))mu= media vectorială a înregistrărilor NORMALSigma= matricea de covarianță a înregistrărilor NORMAL- Pentru stabilitate numerică, adaugă o mică regularizare înainte de inversare:
Sigma_reg = Sigma + I * 1e-6, undeIeste matricea identitate
- Rotunjește la 2 zecimale
Ieșire: Scorul de anomalie pentru fiecare ID din test.csv.
Exemplu:
2,5234,8.922,6567,1.232,7891,14.45Hint: În Python:
scipy.spatial.distance.mahalanobis()sau calcul manual cu numpy.
Subtask 3: Nivelul de risc (15 puncte)
Scorul brut obținut nu este ușor de interpretat de echipa de teren. Transformă-l
în categorii de risc (LOW/MEDIUM/HIGH) folosind praguri bazate pe date istorice.
1. Calculează praguri pe baza train
- Aplică aceeași procedură din Subtask 2 pe toate înregistrările din train
- Calculează percentila 33 și percentila 66 ale acestor scoruri
- Acestea devin pragurile tale:
p33șip66
2. Clasifică fiecare citire din test
| Condiție | Nivel de risc | Interpretare |
|---|---|---|
d < p33 | LOW | Comportament aproape normal |
p33 ≤ d < p66 | MEDIUM | Ușoară anomalie |
d ≥ p66 | HIGH | Anomalie semnificativă |
Ieșire: Nivelul de risc pentru fiecare ID din test.csv.
Exemplu:
3,5234,HIGH3,6567,LOW3,7891,HIGHSubtask 4: Clasificatorul de hazarduri (50 puncte)
CORE MISSION! Acesta este creierul sistemului Fire Distinguisher. În fiecare secundă, sute de vehicule transmit date, iar sistemul tău trebuie să decidă instant: e totul normal sau există un pericol? O greșeală la detecția unui incendiu poate costa vieți. SafeDrive contează pe tine să construiești cel mai precis clasificator posibil.
Sarcina ta: Pentru fiecare înregistrare din test.csv:
- Prezice
label_name(NORMAL / GAS_LEAK / OVERHEAT / FIRE) - Construiește un model de clasificare multi-class folosind feature-urile disponibile
Ieșire: Label-ul prezis (NORMAL, GAS_LEAK, OVERHEAT, sau FIRE) pentru fiecare citire din test.
Evaluare
| Subtask | Punctaj | Criteriu |
|---|---|---|
| 1 | 20 | Toate valorile corecte |
| 2 | 15 | Proporțional cu procentul de scoruri corecte (toleranță ±0.05) |
| 3 | 15 | Proporțional cu procentul de niveluri de risc corecte |
| 4 | 50 | F1-Score Weighted Multi-Class: • F1 ≥ 0.90 → 50 puncte • F1 < 0.60 → 0 puncte • Valorile intermediare → liniar. |
Scor final: 100 puncte maxim.
Formatul Fișierului de Trimitere (submission.csv)
Structura: subtaskID,datapointID,answer
| subtaskID | datapointID | answer |
|---|---|---|
| 1 | 1-12 | [Valori statistici] |
| 2 | [ID din test.csv] | [Scor anomalie: ex 8.92] |
| 3 | [ID din test.csv] | [Nivel risc: LOW/MEDIUM/HIGH] |
| 4 | [ID din test.csv] | [Label: NORMAL/GAS_LEAK/OVERHEAT/FIRE] |
Detalii:
Subtask 1: 12 rânduri cu statistici fixe
- datapointID 1-4: Procente pentru NORMAL, GAS_LEAK, OVERHEAT, FIRE
- datapointID 5-8: Temperaturi medii pentru cele 4 clase
- datapointID 9-12: Concentrații medii gaz pentru cele 4 clase
Subtask 2: N rânduri
- datapointID =
iddin test.csv - answer = scorul de anomalie Mahalanobis (rotunjit la 2 zecimale)
Subtask 3: N rânduri
- datapointID =
iddin test.csv - answer = nivelul de risc (
LOW,MEDIUM, sauHIGH)
Subtask 4: N rânduri
- datapointID =
iddin test.csv - answer = label prezis (
NORMAL,GAS_LEAK,OVERHEAT,FIRE)