Fundamente de Data Science

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).

MetricaFormulaCe răspunde
Acuratețe(TP+TN)/totalce procent din predicții e corect
PrecizieTP/(TP+FP)din cele prezise pozitive, câte chiar sunt?
RecallTP/(TP+FN)din pozitivele reale, câte am găsit?
F12·P·R/(P+R)media armonică precizie–recall
AUCaria sub curba ROCcât de bine ordonează modelul pozitivele înaintea negativelor, indiferent de prag
Capcana acurateței: la un dataset cu 99% clasa „sănătos", modelul care răspunde mereu „sănătos" are 99% acuratețe și 0 utilitate. La clase dezechilibrate folosește F1 sau AUC.

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

MetricaFormulaObservații
MAEmedia |y−ŷ|în unitățile țintei; robustă la outlieri
MSEmedia (y−ŷ)²pedepsește puternic erorile mari
RMSE√MSEca MSE, dar înapoi în unitățile țintei
1 − SSE/SST1 = 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

Calcul manual + verificare sklearn Ușor Rezolvată

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

1. Detectorul leneș Exercițiu

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"?

2. MAE vs RMSE Exercițiu

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?

3. Citirea enunțului Platformă

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).