Évaluation des Modèles & Métriques
“La précision est un mensonge — apprendre à choisir la bonne métrique pour le vrai problème”
Guide complet : précision, rappel, F1, ROC-AUC, matrice de confusion, validation croisée et choix de métrique.
Prérequis
Concepts Couverts
∑Formules Clés
Score F1
Moyenne harmonique de la précision et du rappel — pénalise les mauvais scores dans les deux sens
AUC-ROC
Probabilité qu'un positif aléatoire soit mieux classé qu'un négatif aléatoire — indépendant du seuil
MCC
Coefficient de corrélation de Matthews — meilleure métrique unique pour les données déséquilibrées
RECM
Racine de l'erreur carrée moyenne — pénalise les grandes erreurs, mêmes unités que la cible
Score R²
Fraction de la variance expliquée ; 1=parfait, 0=prédit la moyenne, <0=pire que la moyenne
EAM
Erreur Absolue Moyenne — robuste aux valeurs aberrantes, interprétable dans les unités de la cible
▶Simulation Interactive
⬡Architecture du Modèle
Quand la Précision Tue
Imaginez prédire le cancer (prévalence 0,1%). Un modèle qui prédit 'pas de cancer' pour tout le monde obtient 99,9% de précision — et tue des patients. En détection de fraude (0,5% de fraude), une haute précision est sans signification. Le choix de la métrique est une décision métier, pas technique. Se tromper peut signifier déployer un modèle qui optimise pour la mauvaise chose entièrement.
En 2021, l'algorithme de recrutement d'Amazon avait 98,4% de précision — mais discriminait systématiquement les femmes parce que la précision était la métrique optimisée.
La Matrice de Confusion comme Tableau Complet
Chaque prédiction tombe dans l'une des quatre catégories : Vrai Positif (positif correctement prédit), Faux Positif (prédit positif, réellement négatif), Vrai Négatif (négatif correctement prédit), Faux Négatif (prédit négatif, réellement positif). FP = Erreur de Type I (fausse alarme). FN = Erreur de Type II (manqué). Lequel compte plus dépend entièrement de l'application.
Courbe ROC : Évaluation Indépendante du Seuil
Un classifieur produit un score, pas seulement une prédiction binaire. La courbe ROC montre tous les compromis possibles en balayant le seuil de 0 à 1 : traçant TPR (rappel) vs FPR. AUC = 0,5 signifie devinette aléatoire, AUC = 1,0 est parfait. L'AUC a une belle interprétation probabiliste : P(score(positif) > score(négatif)).
K-Fold Stratifié : La Bonne Façon de Valider
La validation hold-out gaspille des données et a une variance élevée. La validation croisée K-Fold utilise toutes les données. Le K-Fold Stratifié assure que chaque pli a la même distribution de classes que le jeu de données complet. Le TimeSeriesSplit empêche les fuites de données : les données futures n'informent jamais les prédictions passées.
StratifiedKFold : maintient les proportions de classes dans chaque pli
TimeSeriesSplit : toutes les données d'entraînement viennent avant les données de validation dans le temps
GroupKFold : assure que tous les échantillons du même groupe (patient, utilisateur) sont dans le même pli
RepeatedStratifiedKFold : répéter K-Fold N fois avec des graines aléatoires différentes → estimation de variance plus faible
Pipeline d'Évaluation Complet
from sklearn.metrics import ( classification_report, roc_auc_score, f1_score, average_precision_score, matthews_corrcoef, confusion_matrix ) from sklearn.model_selection import StratifiedKFold, train_test_split from sklearn.datasets import make_classification from sklearn.ensemble import GradientBoostingClassifier import numpy as np class="tok-comment"># ── Données d'exemple + modèle ───────────────────────────────────────── X, y = make_classification(n_samples=class="tok-num">1000, n_features=class="tok-num">10, random_state=class="tok-num">42) X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=class="tok-num">0.2, random_state=class="tok-num">42) modele = GradientBoostingClassifier(n_estimators=class="tok-num">100, random_state=class="tok-num">42) skf = StratifiedKFold(n_splits=class="tok-num">5, shuffle=True, random_state=class="tok-num">42) probs_hors_plis = np.zeros(len(y_train)) for pli, (idx_tr, idx_val) in enumerate(skf.split(X_train, y_train)): modele.fit(X_train[idx_tr], y_train[idx_tr]) probs_hors_plis[idx_val] = modele.predict_proba(X_train[idx_val])[:, class="tok-num">1] print(fclass="tok-str">"Pli {pli+class="tok-num">1} AUC : {roc_auc_score(y_train[idx_val], probs_hors_plis[idx_val]):.4f}") class="tok-comment"># Évaluation complète hors-pli print(fclass="tok-str">"\nAUC hors-pli : {roc_auc_score(y_train, probs_hors_plis):.4f}") print(fclass="tok-str">"AUC-PR hors-pli : {average_precision_score(y_train, probs_hors_plis):.4f}") print(fclass="tok-str">"MCC : {matthews_corrcoef(y_train, probs_hors_plis > class="tok-num">0.5):.4f}") class="tok-comment"># Seuil optimal par F1 seuils = np.linspace(class="tok-num">0.01, class="tok-num">0.99, class="tok-num">200) f1s = [f1_score(y_train, probs_hors_plis > t) for t in seuils] seuil_optimal = seuils[np.argmax(f1s)] print(fclass="tok-str">"Seuil optimal : {seuil_optimal:.3f}, F1 : {max(f1s):.4f}")
Métriques de Régression : Quand MSE Ne Suffit Pas
La classification a la précision, F1, AUC. La régression a toute une famille de métriques — chacune sensible à différents types d'erreurs. Choisir la mauvaise peut masquer des défaillances catastrophiques du modèle.
EAM (Erreur Absolue Moyenne) : Σ|yᵢ−ŷᵢ|/n — robuste aux valeurs aberrantes, mêmes unités que la cible, intuitif. Plus bas est mieux.
ECM (Erreur Carrée Moyenne) : Σ(yᵢ−ŷᵢ)²/n — pénalise fortement les grandes erreurs. Différentiable partout. Plus bas est mieux.
RECM : √ECM — mêmes unités que la cible, pénalise les grandes erreurs. Métrique de régression la plus courante sur Kaggle.
R² (coefficient de détermination) : 1 − ECM/Var(y) — fraction de variance expliquée. 1=parfait, 0=prédit la moyenne, <0=pire que la moyenne.
MAPE : Σ|yᵢ−ŷᵢ|/yᵢ/n — erreur en pourcentage. Intuitif pour les affaires. Indéfini quand yᵢ=0, biaisé vers les petites valeurs.
REML (RMSE log-échelle) : √Σ(log(ŷ+1)−log(y+1))²/n — robuste aux valeurs aberrantes, pénalise les sous-prédictions. Pour données de comptage.
Perte Huber : quadratique pour petites erreurs, linéaire pour grandes — meilleur de EAM+ECM, robuste ET différentiable.
Métriques de Classement et Calibration
Au-delà de la précision de la prédiction ponctuelle, les modèles doivent parfois classer correctement (recommandation, recherche) ou produire des probabilités bien calibrées (risque médical, finance).
Spearman ρ : corrélation de rangs entre prédit et réel — mesure la relation monotone, pas la magnitude.
NDCG (Gain Cumulatif Actualisé Normalisé) : pertinence gradée, actualisée par position. Utilisé en recherche/recommandation.
Calibration (ECE) : Erreur de Calibration Attendue — les prédictions à confiance 80% se réalisent-elles 80% du temps ?
Score de Brier : ECM sur les probabilités pour la classification binaire — plus bas est mieux. Bon pour les prévisions probabilistes.
Log-Loss (Entropie Croisée) : −Σyᵢ·log(pᵢ)+(1−yᵢ)·log(1−pᵢ) — pénalise fortement les prédictions erronées confiantes.
Le Choix de Métrique est une Décision Métier
Règle : choisissez la métrique qui correspond au coût des erreurs dans votre application. RMSE pour les prix des maisons. MAE pour les temps de livraison. MAPE quand l'erreur relative compte. AUC quand l'équilibre des classes change. F1 quand FP et FN ont tous deux des coûts. MCC pour la métrique unique la plus équilibrée sur des données déséquilibrées.
?Vérification des Connaissances
La progression est sauvegardée dans votre navigateur — aucun compte requis.
Besoin d'un ingénieur IA ou data scientist ?
Je conçois des modèles ML sur mesure, des agents IA, de la vision par ordinateur et de l'automatisation — de l'idée à la production.