Compromis Biais-Variance & Analyse des Erreurs
“Chaque erreur de modèle est soit une mauvaise hypothèse soit une sensibilité au bruit — diagnostiquer laquelle change tout”
Intuition visuelle pour sous/surapprentissage, décomposition biais-variance, courbes d'apprentissage et diagnostic de modèle.
Prérequis
Concepts Couverts
∑Formules Clés
Décomposition de l'Erreur
L'erreur totale attendue ne peut pas descendre en dessous du bruit irréductible σ² — plancher de performance
Biais
À quel point la prédiction moyenne s'éloigne de la vérité — mauvaise hypothèse structurelle du modèle
Variance
De combien les prédictions fluctuent selon différents ensembles d'entraînement — sensibilité au bruit des données
▶Simulation Interactive
⬡Architecture du Modèle
Diagnostiquer Ce qui Ne Va Pas avec Votre Modèle
Quand un modèle performe mal, il n'y a que deux causes fondamentales : il fait de mauvaises hypothèses structurelles (biais/sous-ajustement) ou il est trop sensible aux données d'entraînement spécifiques (variance/sur-ajustement). Ces causes ont des correctifs opposés — plus de données aide la variance mais pas le biais ; plus de capacité aide le biais mais pas la variance. Diagnostiquer le problème avant d'appliquer des correctifs est la compétence la plus importante en ML appliqué.
L'Analogie du Jeu de Fléchettes
Imaginez lancer 100 fléchettes sur une cible (la vraie fonction). Biais élevé = les fléchettes s'accumulent loin du centre (mauvais modèle). Variance élevée = les fléchettes se dispersent (prédictions inconsistantes). Biais faible + variance faible = les fléchettes se groupent sur le centre. Un polynôme de degré 1 a un biais élevé. Un polynôme de degré 20 a une variance élevée. Le degré 3-5 peut être la zone optimale.
L'erreur irréductible (σ²) est le bruit inhérent aux données — erreur de mesure, variables non observées. Aucun modèle ne peut la battre. Connaître σ² fixe le plafond de performance.
La Décomposition Mathématique
L'erreur de test attendue pour tout estimateur se décompose en trois termes additifs. L'erreur irréductible σ² est une propriété du processus générateur de données, pas du modèle. Le compromis : à mesure que la complexité augmente, le biais diminue mais la variance augmente. La régularisation (L1/L2) ajoute explicitement un terme de biais pour réduire la variance.
Courbes d'Apprentissage : Lire le Diagnostic
Tracez l'erreur d'entraînement et l'erreur de validation en fonction de la taille de l'ensemble d'entraînement. Signature de biais élevé : les deux courbes plafonnent à une erreur élevée — plus de données n'aidera pas. Signature de variance élevée : grand écart entre erreur d'entraînement (basse) et de validation (haute) — plus de données aidera ; essayez aussi dropout/régularisation.
Protocole Systématique d'Analyse des Erreurs
Établir une référence : un modèle naïf (classe majoritaire, prédiction moyenne) fixe le plancher
Performance au niveau humain : borne supérieure de la précision réalisable (plancher d'erreur irréductible)
Biais évitable = erreur_entraîn. - erreur_humaine : corriger avec un modèle plus grand, plus de caractéristiques
Variance = erreur_val. - erreur_entraîn. : corriger avec plus de données, dropout, régularisation
Décalage des données = distribution val. ≠ distribution entraîn. : corriger avec l'adaptation de domaine
Analyse des erreurs : inspecter 100 erreurs de validation, étiqueter par catégorie → corriger la plus grande
Diagnostic par Courbe d'Apprentissage
from sklearn.model_selection import learning_curve, train_test_split from sklearn.datasets import make_classification from sklearn.ensemble import GradientBoostingClassifier import matplotlib.pyplot as plt import numpy as np class="tok-comment"># ── Données dclass="tok-str">'exemple + modèle ───────────────────────────────────────── X, y = make_classification(n_samples=class="tok-num">800, 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) tailles_entr, scores_entr, scores_val = learning_curve( estimator=modele, X=X_train, y=y_train, train_sizes=np.linspace(class="tok-num">0.1, class="tok-num">1.0, class="tok-num">10), cv=class="tok-num">5, scoring='roc_auc', n_jobs=-class="tok-num">1, shuffle=True ) moy_entr = scores_entr.mean(axis=class="tok-num">1) et_entr = scores_entr.std(axis=class="tok-num">1) moy_val = scores_val.mean(axis=class="tok-num">1) et_val = scores_val.std(axis=class="tok-num">1) class="tok-comment"># Diagnostic : ecart = moy_entr[-class="tok-num">1] - moy_val[-class="tok-num">1] niveau = moy_val[-class="tok-num">1] if niveau < class="tok-num">0.7: print(class="tok-str">"BIAIS ÉLEVÉ : augmenter la complexité ou ajouter des caractéristiques") elif ecart > class="tok-num">0.1: print(class="tok-str">"VARIANCE ÉLEVÉE : ajouter des données, régularisation, ou réduire la complexité") else: print(class="tok-str">"Bonne généralisation — optimiser les hyperparamètres")
?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.