Cum să evaluezi modele machine learning
In this tutorial, you'll learn how to evaluate ML models using the right metrics — accuracy, precision, recall, F1-score, and ROC-AUC — and when to use each one.
Problema
"Acuratețea" de 95% sună bine, dar dacă 95% din date sunt din clasa majoritară, modelul poate fi inutil. Fiecare problemă are nevoie de metrica potrivită, iar alegerea greșită duce la concluzii false.
Soluția Greșită
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
model = RandomForestClassifier()
model.fit(X_train, y_train)
# Doar acuratete — insuficient
print(f"Acuratete: {model.score(X_test, y_test):.3f}")
Problema: Acuratețea nu spune nimic despre cât de bine identifică modelul clasa pozitivă. Un model care prezice mereu "0" poate avea acuratețe 95% dacă doar 5% sunt "1".
Soluția Corectă
from sklearn.metrics import classification_report, confusion_matrix
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
import pandas as pd
df = pd.read_csv("date.csv")
X = df.drop("target", axis=1)
y = df["target"]
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)
model = RandomForestClassifier(random_state=42)
model.fit(X_train, y_train)
predictii = model.predict(X_test)
print(classification_report(y_test, predictii))
print(confusion_matrix(y_test, predictii))
Output:
precision recall f1-score support
0 0.96 0.98 0.97 100
1 0.92 0.85 0.88 30
accuracy 0.95 130
Implementare Pas cu Pas
1. Matricea de confuzie — baza oricarei evaluari
from sklearn.metrics import confusion_matrix
import seaborn as sns
import matplotlib.pyplot as plt
cm = confusion_matrix(y_test, predictii)
sns.heatmap(cm, annot=True, fmt="d", cmap="Blues")
plt.xlabel("Predicted")
plt.ylabel("Actual")
plt.show()
2. Precision, Recall, F1-Score
from sklearn.metrics import precision_score, recall_score, f1_score
print(f"Precizie: {precision_score(y_test, predictii):.3f}")
print(f"Recall: {recall_score(y_test, predictii):.3f}")
print(f"F1-Score: {f1_score(y_test, predictii):.3f}")
3. ROC-AUC — performanța la toate pragurile
from sklearn.metrics import roc_auc_score, roc_curve
probabilitati = model.predict_proba(X_test)[:, 1]
auc = roc_auc_score(y_test, probabilitati)
print(f"AUC: {auc:.3f}")
fpr, tpr, _ = roc_curve(y_test, probabilitati)
plt.plot(fpr, tpr, label=f"AUC = {auc:.3f}")
plt.xlabel("False Positive Rate")
plt.ylabel("True Positive Rate")
plt.legend()
plt.show()
Sfaturi pentru Prevenire
- Acuratețea e utilă doar când clasele sunt echilibrate
- Folosește F1-Score când ai nevoie de un echilibru între precizie și recall
- ROC-AUC e independent de prag și excelent pentru compararea modelelor
- Pentru regresie: R2, RMSE, MAE
- Raportează întotdeauna mai multe metrici, nu una singură
Greșeli Comune
- Folosești doar acuratețea — ascunde probleme cu clase dezechilibrate
- Ignori matricea de confuzie — nu vezi tipurile de erori
- Alegi F1 în loc să alegi între precizie și recall — depinde de costul erorilor
- Nu setezi threshold-ul corect — pragul implicit de 0.5 nu e mereu optim
- Evaluezi pe același set de mai multe ori — cauți overfitting pe test
Întrebări Frecvente
Built by the developers of Doda Browser, DodaZIP, and Durga Antivirus Pro. DodaTech tools integrate seamlessly with sklearn for enhanced productivity and security.
Built by the developers of DodaTech
Doda Browser, DodaZIP & Durga Antivirus Pro