4.1 Metrici de evaluare
Fiecare problemă de pe platformă anunță metrica după care ești punctat. Cine înțelege metrica își optimizează corect soluția — cine nu, pierde puncte fără să știe de ce.
Teorie
Metrici pentru clasificare
Toate pornesc de la cele patru rezultate posibile: TP (pozitiv corect), TN (negativ corect), FP (alarma falsă), FN (pozitivul ratat).
| Metrica | Formula | Ce răspunde |
|---|---|---|
| Acuratețe | (TP+TN)/total | ce procent din predicții e corect |
| Precizie | TP/(TP+FP) | din cele prezise pozitive, câte chiar sunt? |
| Recall | TP/(TP+FN) | din pozitivele reale, câte am găsit? |
| F1 | 2·P·R/(P+R) | media armonică precizie–recall |
| AUC | aria sub curba ROC | cât de bine ordonează modelul pozitivele înaintea negativelor, indiferent de prag |
Precizie vs recall e un compromis: filtrul de spam vrea precizie mare (să nu piardă emailuri bune); screeningul medical vrea recall mare (să nu rateze bolnavi). Curbele ROC sunt detaliate în lecția 4.4.
Metrici pentru regresie
| Metrica | Formula | Observații |
|---|---|---|
| MAE | media |y−ŷ| | în unitățile țintei; robustă la outlieri |
| MSE | media (y−ŷ)² | pedepsește puternic erorile mari |
| RMSE | √MSE | ca MSE, dar înapoi în unitățile țintei |
| R² | 1 − SSE/SST | 1 = perfect; 0 = la fel de bun ca media; poate fi negativ |
Alegerea metricii adecvate
Regula 1: folosește metrica din enunț — pe ea ești punctat. Regula 2: pentru deciziile tale interne — clase dezechilibrate → F1/AUC; erori mari inacceptabile → RMSE; outlieri în țintă → MAE.
Implementări în scikit-learn
from sklearn.metrics import (accuracy_score, precision_score, recall_score,
f1_score, roc_auc_score, classification_report,
mean_absolute_error, mean_squared_error, r2_score)
# clasificare
print(classification_report(y_val, y_pred)) # tot tabloul dintr-o comandă
print(roc_auc_score(y_val, model.predict_proba(X_val)[:, 1]))
# regresie
print("MAE:", mean_absolute_error(y_val, y_pred))
print("RMSE:", mean_squared_error(y_val, y_pred) ** 0.5)
print("R2:", r2_score(y_val, y_pred))
# la multi-clasă: average="macro" (clasele contează egal) sau "weighted"
f1_score(y_val, y_pred, average="macro")
Problemă rezolvată: aceeași predicție, patru verdicte
Un model de detectare a fraudei a produs: y_real = [1,0,0,1,1,0,0,0,1,0], y_pred = [1,0,0,0,1,0,1,0,0,0]. Calculăm toate metricile de mână, apoi verificăm.
Rezolvarea completă
Numărăm: TP = 2 (pozițiile 1, 5) · FN = 2 (pozițiile 4, 9) · FP = 1 (poziția 7) · TN = 5.
Acuratețe = 7/10 = 0.70 · Precizie = 2/3 ≈ 0.67 · Recall = 2/4 = 0.50 · F1 = 2·(0.67·0.5)/(0.67+0.5) ≈ 0.57
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
y_real = [1,0,0,1,1,0,0,0,1,0]
y_pred = [1,0,0,0,1,0,1,0,0,0]
print(accuracy_score(y_real, y_pred)) # 0.7
print(precision_score(y_real, y_pred)) # 0.667
print(recall_score(y_real, y_pred)) # 0.5
print(f1_score(y_real, y_pred)) # 0.571
Interpretare: acuratețea de 70% sună bine, dar modelul ratează jumătate din fraude (recall 0.5) — inacceptabil pentru o bancă. Metrica potrivită schimbă verdictul.
Probleme propuse
Pe un set cu 95 negativi și 5 pozitivi, calculează acuratețea, precizia, recall-ul și F1 pentru modelul care prezice mereu 0. Ce metrici demască „lenea"?
Două modele au aceleași erori {2,2,2,2} respectiv {0,0,0,8}. Calculează MAE și RMSE pentru fiecare. Care model preferi pentru predicția dozei unui medicament și de ce?
Alege 3 probleme de pe platformă și identifică pentru fiecare metrica de evaluare din enunț. Explică pentru fiecare cum îți schimbă strategia (de exemplu: F1 → contează pragul de decizie).