FichesCarte › Partie 06 · Évaluer › chaîne 01

Biais, variance, bruit

Un modèle appris sur un jeu de données se serait-il trompé pareil sur un autre jeu tiré de la même population ? Ici l'objet aléatoire est le dataset d'entraînement entier : la prédiction en un point a un centre et une largeur. L'erreur quadratique se coupe alors exactement en trois — biais² + variance + σ² — et le troisième terme ne part jamais. Fil rouge : f(x) = x sur une grille de 10 points, σ = 0,5, trois apprenants (constante, droite, plus proche voisin).

Ce que cette chaîne suppose acquis
  • Les trois colonnes (p01-01 · pas 2) : devant toute question de variabilité, ranger ce qui est fixe, ce qui est aléatoire, et la procédure qui va de l'un à l'autre. Cette chaîne ne change qu'une case : la colonne aléatoire.
  • Variance = espérance de l'écart au carré (p00-02 · pas 3), et sa forme décentrée : E[(Xc)²] = Var(X) + (E[X] − c)² pour toute constante c. Toute la décomposition n'est que cette identité, appliquée à la bonne variable aléatoire.
  • Moyenne d'un échantillon : si y1yn sont indépendantes de variance σ², alors Var(ȳ) = σ²/n. C'est le seul calcul de variance fait à la main ici.
Hypothèses posées
H1Le monde s'écrit y = f(x) + ε, avec E[ε] = 0 et Var(ε) = σ². La fonction f est inconnue mais fixe ; le bruit ε est indépendant d'un point à l'autre. H2On répète l'expérience : tirer un dataset D de taille n, apprendre fD, prédire en un x fixé. La prédiction fD(x) est une variable aléatoire de D, pas de x. H3Erreur quadratique. La décomposition exacte en trois termes est propre à elle : pour la log-loss ou la 0/1, l'intuition rigide / souple tient, la formule non.

La chaîne

Le décor

On n'a qu'un seul dataset, on a appris un seul modèle, on lit une seule erreur. La question honnête est ailleurs : ce modèle-là se serait-il trompé pareil sur un autre jeu tiré de la même population ?

Même question qu'en p01-01, avec un objet aléatoire plus gros : là c'était une ligne de données, ici c'est le jeu entier.

« Un seul jeu a été tiré, donc le modèle appris est lui-même un tirage, donc la question est ce qu'il aurait donné sur un autre jeu. »

Le fil rouge

f(x) = x sur [0, 1], σ = 0,5, et n = 10 points sur la grille xi = i/9 (i = 0…9). Trois apprenants, du plus rigide au plus souple :

apprenantce qu'il peut représenterparamètres
constante y = ȳune horizontale1
droite (OLS)toutes les droites — dont la vraie2
plus proche voisinn'importe quoi : il interpole10

Le vrai f est une droite : l'ordre de ces trois apprenants n'a rien d'universel, il dépend de f. C'est justement ce qu'on veut nommer.

Le tirage, c'est le dataset tronc

On rejoue les trois colonnes de p01-01, et la colonne aléatoire change d'objet.

FIXE f, le point x où l'on prédit, σ²  ·  ALÉATOIRE le dataset D tout entierfDfD(x)  ·  PROCÉDURE tirer D → ajuster → prédire en x

Écrire « les données sont aléatoires » ne suffit pas : ce qui est tiré est le jeu complet, donc ce qui varie est le modèle appris, donc la prédiction en un x fixé a une distribution.

« Le modèle appris dépend du dataset, donc sa prédiction en x est une variable aléatoire du tirage, donc elle a un centre et une largeur, donc on peut nommer chacun des deux. »

Application — x = 0,37, mille datasets imaginaires

Le point x = 0,37 est fixe, la vraie valeur f(0,37) = 0,37 aussi. Seul D change. Ce que chaque apprenant produit alors :

apprenantcentre ED[fD(0,37)]biais²variance
constante0,50,01690,0250
droite0,3700,0291
voisin0,3330,00130,2500

La constante est décentrée et serrée ; le voisin est presque centré et très large — il recopie le bruit du point le plus proche (x = 1/3), donc sa variance vaut σ² tout rond.

Figure 1 — la distribution de la prédiction en x = 0,37

Chaque tirage = un dataset neuf (n = 10, σ = 0,5), un modèle réappris, une prédiction en x = 0,37. Le trait pointillé rouge marque la vraie valeur f(0,37) = 0,37, le trait plein la moyenne des tirages. Change d'apprenant : le décalage entre les deux traits est le biais, la largeur de l'histogramme est la variance. La constante est décalée et étroite, le voisin est bien placé et très étalé.

La décomposition tronc

Espérance sur les deux sources d'aléa — le dataset D et le bruit ε du point de test :

ED[(yfD(x))²] = (ED[fD(x)] − f(x))² + VarD(fD(x)) + σ²
= biais² + variance + bruit

Deux lignes : ajouter et retrancher ED[fD(x)] dans la parenthèse, développer le carré, et constater que le terme croisé s'annule (l'écart au centre est centré). Le σ² sort parce que ε du point de test est indépendant de D.

« L'écart au vrai se coupe en écart du centre au vrai plus écart au centre, donc l'erreur moyenne est le biais au carré plus la variance, donc il reste le bruit, qui ne dépend d'aucun modèle. »

Application — le fil rouge, chiffré

Erreur moyennée sur les 10 points de la grille (calcul exact, pas simulation) :

apprenantbiais²varianceσ²total
constante0,1020,0250,250,377
droite00,0500,250,300
voisin00,2500,250,500

La droite gagne parce que f est une droite : elle est la seule à n'avoir aucun biais tout en restant peu variable. Si f était une sinusoïde, la droite aurait un biais et le voisin reprendrait l'avantage.

Le 0,25 de la dernière colonne est le même pour les trois : c'est le plancher, et aucune colonne de gauche ne peut l'entamer.

Biais = rigidité

Un modèle qui ne peut pas représenter f a un centre faux, et il l'a quel que soit n : ajouter des données rend le centre plus stable, pas plus juste.

Le biais se paie en capacité de représentation, pas en volume de données. Il baisse quand on donne au modèle de quoi épouser f — plus de degrés, plus de features, moins de contrainte.

« La constante ne peut pas suivre une pente, donc son centre reste la moyenne de f quel que soit n, donc son biais ne bouge pas quand on ajoute des données, donc seule la flexibilité le fait baisser. »

Application — faire grossir n, en x = 0,37

Le centre de la constante est E[ȳ] = moyenne de f sur la grille = 0,5, pour tout n. Le biais en 0,37 vaut donc 0,5 − 0,37 = 0,13, et biais² = 0,0169, pour tout n.

nbiais² (constante)variance σ²/n
100,01690,0250
1000,01690,0025
1 0000,01690,00025

La colonne de droite fond, celle du milieu ne bouge pas d'un chiffre. Multiplier les données par cent ne rend pas une horizontale capable de monter.

Variance = sensibilité au tirage

Symétriquement, un modèle qui peut tout représenter épouse le bruit du jeu qu'on lui a donné : le plus proche voisin recopie littéralement l'ε du point le plus proche.

Pour tout ajustement linéaire en y (constante, OLS, polynôme, ridge) à p paramètres sur un design fixe, la variance moyennée sur les points du design vaut exactement

moyenne des Var(f(xi)) = σ² · p / n

Elle baisse avec n et monte avec p : c'est la formule du compromis, écrite d'un seul côté.

« Plus le modèle a de paramètres, plus il épouse le tirage, donc plus sa prédiction change d'un dataset à l'autre, donc sa variance monte proportionnellement au nombre de paramètres. »

Application — la formule rend les trois chiffres du fil rouge

σ² = 0,25 et n = 10 :

apprenantpσ²·p/nvariance mesurée
constante10,0250,025
droite20,0500,050
voisin (interpole)100,2500,250

Le voisin est le cas limite p = n : il a autant de paramètres que de points, donc σ²·n/n = σ². Interpoler, c'est prendre toute la variance du bruit à son compte.

Figure 2 — la flexibilité, vue sur un jeu et vue en moyenne

Autre jeu de données : f = sin(2πx), n = 12 points, σ = 0,3. En haut, le polynôme ajusté ; monte le degré et clique nouveau dataset : à degré 3 la courbe bouge à peine d'un tirage à l'autre, à degré 9 elle change du tout au tout — mêmes abscisses, même σ, courbe méconnaissable. En bas, les mêmes quantités en espérance sur tous les tirages : biais² descend, variance monte en ligne droite (σ²·p/n), et leur somme creuse un minimum.

Le U, et le gap qui n'est qu'un symptôme tronc

Biais² décroît avec la flexibilité, variance croît : leur somme passe par un minimum. Il existe donc une bonne flexibilité, et elle ne se lit que sur des données non vues.

L'erreur d'entraînement, elle, ne fait que descendre — un modèle souple contient le rigide, c'est un témoin atteignable (b02), pas un résultat à redémontrer. L'écart train / test grandit donc mécaniquement :

gap = E[erreur test] − E[erreur train] = 2σ² · p / n

Le gap est le symptôme de la variance, pas sa cause : il grandit parce que le train baisse et que le test monte.

« Le biais baisse et la variance monte avec la flexibilité, donc leur somme a un minimum, donc il existe une bonne flexibilité, donc elle ne se lit que sur des données non vues. »

Application — sinusoïde, n = 12, σ = 0,3 (σ² = 0,09)
degrébiais²variancetraintestgap
00,4580,0080,5410,5560,015
10,2540,0150,3290,3590,030
20,2540,0230,3210,3660,045
30,0070,0300,0670,1270,060
50,0000,0450,0450,1350,090
90,0000,0750,0150,1650,150

Le train descend de 0,541 à 0,015 sans jamais remonter ; le test touche son minimum à degré 3 puis remonte. Le gap, lui, double du degré 3 au degré 9 — exactement 2σ²p/n.

Figure 3 — train, test, et l'écart entre les deux

Les deux erreurs en espérance, sur le même jeu qu'en figure 2. Déplace le degré : le segment vert est le gap. Le train descend toujours et finit sous le plancher σ² = 0,09 — signe qu'il a mangé du bruit ; le test fait le U, minimum au degré 3. Choisir la flexibilité au train, c'est choisir le degré 9.

Le plancher σ² ne se lit pas dans les résidus

σ² est une propriété du problème — la part de y qu'aucune fonction de x ne prédit. Ce n'est pas la moyenne des résidus au carré d'un modèle ajusté.

E[erreur train] = σ² · (np)/n + biais²

Un modèle souple a absorbé une part du bruit : ses résidus sont plus petits que σ. Un modèle rigide a mis son biais dedans : ils sont plus grands. Aucun des deux ne rend σ.

« Un modèle souple absorbe une part du bruit, donc ses résidus sont plus petits que σ, donc leur moyenne au carré sous-estime le plancher, donc σ² ne se lit jamais sur les données d'entraînement. »

Application — deux lectures fausses du même σ = 0,3
modèlepE[erreur train]« σ̂ » = √trainvrai σ
degré 0 (rigide)10,5410,740,30
degré 3 (juste)40,0670,260,30
degré 9 (souple)100,0150,120,30

Le rigide surestime de 150 %, le souple sous-estime de 60 %. La correction n/(np) ne sauve que le cas sans biais.

Sur le fil rouge : σ² = 0,25 pèse 0,25 / 0,300 ≈ 83 % de l'erreur totale du meilleur modèle. Tout le travail de modélisation se joue sur les 17 % restants.

Où ça casse casse

La décomposition est une espérance sur des tirages qu'on n'a pas.

« Les trois termes vivent sur des datasets répétés, donc un seul jeu ne les sépare pas, donc ce qu'on mesure en pratique est leur somme, donc on pilote la flexibilité sans jamais voir lequel des deux on paie. »

Quatre limites
  • Un seul dataset. On n'observe ni le biais ni la variance, seulement leur somme, via un jeu de validation (p06-02). Les séparer demande de répéter le tirage : simulation quand on connaît f, rééchantillonnage (bootstrap) sinon — et le bootstrap ne rejoue pas la population, seulement l'échantillon.
  • Hors erreur quadratique. La coupure exacte en trois termes n'existe pas pour la log-loss ni pour la 0/1 : les décompositions proposées sont conventionnelles et non additives. L'intuition rigide / souple survit, la formule non — ne pas l'écrire au tableau pour un classifieur.
  • Régime moderne. Des réseaux très surparamétrés interpolent les données et généralisent (double descente : au-delà du point d'interpolation le test redescend). Le U reste vrai à taille de données fixée et flexibilité modérée, c'est-à-dire là où on l'utilise ; il ne décrit pas le régime pn.
  • Bruit hétérogène. σ² = σ²(x) : le plancher n'est pas le même partout. Une erreur totale plate peut cacher une zone bien modélisée et une zone irréductiblement bruitée — la moyenne sur x mélange les deux.

Résumé

À retenir
  1. Le tirage, c'est le dataset entier : fD(x) est une variable aléatoire de D, donc elle a un centre et une largeur.
  2. Erreur = biais² + variance + σ². Le σ² est irréductible, et il est invisible dans les résidus.
  3. Biais = rigidité : il ne baisse pas avec n, seulement avec la flexibilité. Variance = sensibilité au tirage : σ²·p/n, elle baisse avec n et monte avec p.
  4. Leur somme fait un U : la bonne flexibilité ne se lit que sur des données non vues. Le gap train/test (2σ²p/n) est le symptôme, pas la cause.
  5. Fil rouge : constante 0,102 + 0,025 · droite 0 + 0,050 · voisin 0 + 0,250 — et pour tous, plus σ² = 0,25.
« Si je retirais le dataset, le modèle appris changerait : sa prédiction en un point a un centre et une largeur. L'écart du centre au vrai est le biais, la largeur est la variance, et il reste le bruit qu'aucun modèle n'enlève. Un modèle rigide a du biais, un modèle souple a de la variance ; leur somme passe par un minimum qui ne se lit que sur des données non vues, parce que l'erreur d'entraînement, elle, ne fait que descendre. »

Chaîne verbalisée — une prise, à voix haute

5 maillons · clique pour révéler après avoir dit
  1. Quel est l'objet aléatoire ?
    Le dataset d'entraînement entier — pas une ligne. Donc le modèle appris f̂D, donc sa prédiction f̂D(x) en un x fixé.
  2. Écris la décomposition et dis d'où elle vient.
    biais² + variance + σ². On ajoute et retranche ED[f̂D(x)], on développe le carré, le terme croisé est nul parce que l'écart au centre est centré ; le σ² sort car le bruit du point de test est indépendant de D.
  3. Que fait plus de données ? Plus de flexibilité ?
    Plus de données : la variance baisse (σ²p/n), le biais ne bouge pas. Plus de flexibilité : le biais baisse, la variance monte.
  4. Pourquoi l'erreur d'entraînement ne fait-elle pas le U ?
    Témoin atteignable : un modèle souple contient le rigide, donc il fait au moins aussi bien sur les points qu'il a vus. Elle descend toujours, jusque sous σ².
  5. Peut-on lire σ² dans les résidus ?
    Non. E[train] = σ²(n − p)/n + biais² : un modèle souple rend les résidus plus petits que σ, un modèle rigide plus grands. σ² est une propriété du problème.