FichesCarte › Partie 07 · Arbres, ensembles, k-means › chaîne 02

Bagging et forêt aléatoire — la variance seule

Pourquoi moyenner cent arbres profonds marche, pourquoi ça ne baisse pas le biais, pourquoi ajouter des arbres finit par ne plus rien changer, et à quoi sert de tirer m features par nœud. Une seule formule tient toute la chaîne — Var(moyenne) = ρσ² + (1 − ρ)σ²/B : le second terme s'éteint avec B, le premier jamais. Fil rouge : un arbre profond de variance σ² ; à ρ = 0,5 cent arbres donnent 0,505 σ², à ρ = 0,1 ils donnent 0,109 σ² — et c'est ce ρ que la forêt achète en tirant m features par nœud.

Ce que cette chaîne suppose acquis
  • Un arbre profond est faible en biais et fort en variance. Poussé à fond il isole les points et recopie le tirage (p07-01 pas 5) ; un seul point retiré change sa racine et tout ce qui en descend (pas 8).
  • Bootstrap. Rééchantillonner n lignes avec remise parmi n : des doublons, et 1 − (1 − 1/n)n → 1 − e−1 = 0,632 de lignes distinctes (p01-05 pas 4). Le 37 % de cette chaîne n'a pas d'autre origine que ce calcul.
  • La variance d'une moyenne corrélée. Var() = ρσ² + (1 − ρ)σ²/B, comptage des B² cases de la matrice de covariance, dérivée une fois pour toutes dans b04 pas 1. Ici on l'applique, on ne la redémontre pas.
  • Biais et variance. L'erreur se décompose en biais² + variance + bruit, et ce qui est tiré est le dataset entier (p06-01 pas 3). Le bagging est le quatrième étage de b03.
Hypothèses posées
H1Les B arbres ont la même loi : mêmes hyperparamètres, tirages identiquement distribués. Donc même biais, même variance σ², et une seule corrélation ρ deux à deux. H2On moyenne (régression) ou on vote (classification). Par linéarité de l'espérance, le biais de la moyenne est exactement le biais d'un arbre — rien dans la suite ne le touchera. H3Ce qui est tiré est le dataset entier. σ² et ρ se lisent donc sur la variabilité d'un jeu de données à l'autre, jamais sur celle des bootstraps à jeu fixé — à jeu fixé les bootstraps sont indépendants et ρ vaudrait zéro.

La chaîne

Le décor

Un arbre poussé à fond a presque tout son erreur en variance : peu de biais, et une sensibilité maximale au tirage. Le bouton profondeur ne fait qu'échanger l'un contre l'autre le long du même compromis.

Pour sortir du compromis au lieu de le parcourir, il faut une autre ressource : plusieurs arbres.

« Un arbre profond est presque sans biais et presque tout en variance, donc le régler en profondeur ne fait que déplacer le compromis sans l'améliorer, donc la seule sortie est d'en ajuster plusieurs et de les moyenner. »

Fil rouge — un arbre profond, chiffré

Nuage 1D : n = 30 points, x uniforme sur [0 ; 4], y = f(x) + ε avec ε ~ 𝒩(0 ; 1). Arbre de régression poussé à fond, on lit sa prédiction en x0 = 2, où f(x0) = 2,62.

Sur 4 000 jeux de données tirés de la même population :

moyennebiaisvarianceEQM
un arbre profond2,61−0,0050,980,98

Le biais est à peine mesurable ; toute l'erreur est de la variance — et elle vaut à peu près le bruit lui-même. C'est le cas idéal pour ce qui suit.

Moyenner réduit la variance, pas le biais tronc

Par linéarité, E[moyenne] = E[un arbre] : le biais ne bouge pas d'un iota. Tout le gain possible est donc en variance, et il est donné par le comptage des cases de la matrice de covariance (b04 pas 1) :

Var(moyenne de B arbres) = ρσ² + (1 − ρ) σ²/B

Second terme : s'éteint avec B. Premier terme : ne voit pas passer B. À ρ = 0 on retrouverait σ²/B — un cas particulier, jamais celui d'arbres entraînés sur les mêmes données.

« La moyenne de B arbres a le même centre qu'un arbre, donc le biais est inchangé, donc tout le gain est en variance, donc ce gain est plafonné par la corrélation entre arbres. »

Fil rouge — 25 arbres baggés, mêmes 4 000 jeux
moyennebiaisvariance
un arbre profond2,61−0,0050,98
moyenne de 252,61−0,0250,49

Même centre : l'écart des deux moyennes vaut 0,013, sous l'erreur Monte-Carlo (0,016). Variance divisée par deux : 0,49 / 0,98 = 0,50.

Mais 0,50, pas 1/25 = 0,04. Résolvons 0,50 = ρ + (1 − ρ)/25 : il vient ρ = 0,47. Les arbres ne sont pas indépendants, et ce nombre-là est tout le sujet des quatre pas suivants.

Figure 1 — même centre, largeur divisée

Deux histogrammes sur la même échelle. En haut : la prédiction en x0 = 2 d'un seul arbre profond, un tirage = un nouveau jeu de 30 points. En bas : la moyenne de 25 arbres ajustés sur 25 bootstraps de ce même jeu. Tire quelques centaines de fois des deux côtés : le trait rouge (la moyenne empirique) se cale au même endroit, près de f(x0) = 2,62 — le biais n'a pas bougé — tandis que l'écart-type passe d'environ 0,99 à 0,70. Pas de 0,99 à 0,20 : ce n'est pas √25.

D'où viennent des arbres différents : le bootstrap

Chaque arbre est ajusté sur un rééchantillon de n lignes tirées avec remise parmi les n (p01-05 pas 4) : des doublons, 63 % de lignes distinctes, 37 % absentes.

Assez pour déplacer des seuils de coupure. Pas assez pour rendre deux arbres étrangers : ils voient les mêmes features fortes et les retrouvent aux mêmes endroits. D'où un ρ non seulement positif, mais grand.

« Chaque arbre voit 63 % des lignes, donc deux arbres en partagent 40 % et surtout toutes les features fortes, donc leurs coupures se ressemblent, donc ρ est grand et pas petit. »

Application — n = 1 000 lignes
(1 − 1/1000)1000 = 0,3677  →  e−1 = 0,3679

Un bootstrap contient 632 lignes distinctes et en laisse 368 dehors. Deux bootstraps du même jeu : 0,632² = 40 % des 1 000 lignes sont dans les deux — soit 63 % des lignes distinctes de l'un.

Et ce n'est que le recouvrement des lignes. Les features, elles, sont partagées à 100 % : si une feature domine, elle domine dans tous les arbres. Sur le fil rouge, le ρ mesuré au pas 2 vaut 0,47.

Le plancher ρσ² tronc

À ρ = 0,5, cent arbres ne font pas mieux que 0,5 σ² ; mille non plus. Ajouter des arbres n'est jamais nuisible — il n'y a pas de surapprentissage en B, la courbe est monotone décroissante — mais devient vite inutile.

Pour descendre sous le plancher, il n'y a qu'un levier : baisser ρ.

« Le terme en 1/B s'éteint, donc au-delà d'une centaine d'arbres il ne reste que ρσ², donc le seul levier restant est la corrélation, donc il faut rendre les arbres différents autrement que par les lignes. »

Application — deux ρ, en unités de σ² (un arbre seul)
Bρ = 0,5 (bagging)ρ = 0,1 (forêt)
100,55000,1900
1000,50500,1090
1 0000,50050,1009
0,50000,1000

À ρ = 0,5 : passer de 10 à 100 arbres gagne 0,045 ; passer de 100 à 1 000 en gagne 0,0045. Dix fois le calcul pour un demi-centième de variance.

Changer ρ de 0,5 à 0,1 à B = 100 fait tomber la variance de 0,505 à 0,109 : 4,6 fois moins. Aucun nombre d'arbres n'obtient cela à ρ = 0,5.

Figure 2 — le plancher que B ne franchit pas

Var(moyenne)/σ² contre B, en échelle log de 1 à 1 000. Bleu : ρ = 0, la droite en σ²/B qui descend sans fin. Violet : la courbe au ρ choisi ; rouge : son plancher ρσ². Le segment vert mesure tout ce que rapporte le passage de 10 à 100 arbres. Les deux boutons posent les deux régimes du fil rouge : au preset bagging le violet colle à son plancher avant B = 30, au preset forêt le plancher lui-même a baissé d'un facteur 5 et la courbe a de la place pour descendre.

La forêt : tirer m features par nœud tronc

À chaque nœud, seules m features tirées au hasard sont candidates — m = √p en classification, p/3 en régression, par défaut. Une feature dominante n'est donc plus toujours disponible : d'autres coupures sont choisies, et les arbres cessent de se ressembler.

Le prix : chaque arbre est un peu plus biaisé, puisqu'il n'a pas toujours la meilleure coupure sous la main. Ce plancher divisé vaut bien plus que ce petit biais.

« Restreindre les features candidates empêche une même feature de mener tous les arbres, donc ρ tombe, donc le plancher baisse, donc la moyenne descend plus bas, au prix d'un léger biais par arbre. »

Application — p = 100 features
mune feature donnée est candidate…
classification√100 = 10dans 10 % des nœuds
régression100/3 ≈ 33dans 33 % des nœuds
baggingp = 100dans 100 % des nœuds

La probabilité qu'une feature donnée soit candidate est exactement m/p. En classification, 90 % des nœuds doivent couper sans la feature dominante — c'est là que les arbres divergent.

Sur le fil rouge : ρ passe de 0,5 à 0,1, le plancher de 0,5 σ² à 0,1 σ² (divisé par 5), et à B = 100 la variance tombe de 0,505 à 0,109. m est le vrai réglage d'une forêt ; B ne l'est pas (pas 9).

Out-of-bag : le test gratuit

Chaque ligne est absente de ≈ 37 % des bootstraps — c'est le même calcul qu'au pas 3, lu dans l'autre sens. Prédire cette ligne avec ces arbres-là seulement donne une erreur sur données non vues, sans mettre le moindre pli de côté.

C'est le témoin atteignable de b02 lieu 5 : un ensemble que le choix n'a pas touché. Légèrement pessimiste, puisqu'il note une forêt de 37 arbres et non de B.

« Chaque ligne est hors du sac de 37 % des arbres, donc on peut la prédire avec ces arbres-là seuls, donc l'erreur ainsi obtenue porte sur des données non vues, donc elle remplace un jeu de validation, à un léger pessimisme près. »

Application — combien d'arbres pour chaque ligne

n = 1 000, B = 100 : chaque ligne est hors-sac de 36,8 arbres en moyenne. On la prédit avec ceux-là, on compare à son y, on moyenne sur les 1 000 lignes : c'est l'erreur OOB.

Le pessimisme, chiffré. À ρ = 0,1, une moyenne de 36,8 arbres a une variance de 0,1 + 0,9/36,8 = 0,1245 σ², contre 0,109 pour les 100 arbres qu'on déploiera. L'OOB note un modèle un peu moins bon que celui qu'on livre : c'est une borne haute, utilisable telle quelle.

Usage : tracer l'erreur OOB contre B et s'arrêter quand la courbe est plate. C'est à cela que sert B, et à rien d'autre.

Figure 3 — qui a vu quoi : le sac et le hors-sac

20 lignes en colonnes, 12 arbres en lignes. Point violet plein : la ligne est dans le bootstrap de cet arbre (il l'a vue). Cercle rouge vide : elle en est absente — cet arbre est out-of-bag pour elle, et lui seul a le droit de la prédire. La colonne 7 est marquée : compte ses cercles vides, ce sont les arbres qui votent pour la ligne 7. Nouveau tirage : la part de cercles vides retombe toujours autour de 35,8 % = (1 − 1/20)20, qui tend vers 36,8 % quand n grandit. Aucune ligne n'est jamais orpheline longtemps, aucune n'est vue par tous.

Pourquoi des arbres profonds

Le bagging ne baisse que la variance. Il lui faut donc des composants dont l'erreur est de la variance : à faible biais, forte variance — des arbres profonds.

Des souches (profondeur 1) baggées restent des souches : leur biais traverse la moyenne intact, et il n'y avait presque pas de variance à prendre. Les arbres courts sont pour le boosting, qui lui attaque le biais (p07-03).

« Moyenner ne touche pas au biais, donc il faut des composants dont l'erreur est surtout de la variance, donc arbres profonds pour le bagging et la forêt, donc arbres courts réservés au boosting, qui lui baisse le biais. »

Application — profond contre souche, mêmes 3 000 jeux
biaisvarianceEQMEQM baggé ×25
arbre profond−0,0050,9790,9790,479 (−51 %)
souche (d = 1)−0,6100,0830,4540,407 (−10 %)

La souche est déjà stable : variance 0,083, il n'y a presque rien à lui prendre. Son EQM est bloquée par son biais, et 25 souches ne le bougent pas (−0,610 → −0,579) ; 1 000 non plus.

L'arbre profond, lui, voit son EQM divisée par deux — et elle continuerait à descendre jusqu'à son plancher ρσ².

Importance des features : deux mesures, deux pièges

MDI — baisse d'impureté cumulée sur tous les nœuds où la feature a coupé. Gratuite, calculée pendant l'ajustement, et biaisée vers les features à beaucoup de modalités : plus de coupures candidates, donc plus de chances d'en trouver une bonne par hasard.

Permutation — on brouille une colonne et on regarde l'erreur OOB monter. Plus honnête, plus chère. Dans les deux cas, « importance » n'est pas « causalité » : deux features corrélées se partagent le crédit.

« Une feature à beaucoup de modalités offre plus de coupures candidates, donc elle gagne plus souvent par hasard, donc la MDI la surévalue, donc on lit l'importance par permutation sur l'out-of-bag dès que la réponse compte. »

Application — deux features de bruit pur

n = 300, y tiré à pile ou face, indépendant de tout. Deux features, elles aussi du bruit pur : une binaire (2 modalités), une continue (300 modalités). Arbre de profondeur 6, MDI moyennée sur 40 tirages :

feature (bruit pur)modalitéspart de la MDI
continue30094 %
binaire26 %

Aucune des deux ne sait quoi que ce soit sur y. Le classement est un pur artefact du nombre de coupures candidates. À lire comme un avertissement : une MDI ne compare que des features de même granularité.

Où ça casse casse

Les quatre pannes sont la chaîne lue à l'envers : ρ qui ne descend pas, un biais que la moyenne ne peut pas atteindre, et un B pris pour un réglage.

« Le bagging ne dispose que de la variance, donc il échoue partout où l'erreur est ailleurs, donc on diagnostique en regardant ρ et le biais des composants, donc jamais en ajoutant des arbres. »

Quatre limites
  • ρ reste élevé malgré m. Une feature écrasante — souvent une fuite (p06-02 pas 7) — n'est candidate que dans m/p des nœuds, mais quand elle l'est elle gagne toujours, et l'arbre y revient à chaque profondeur. La forêt redevient du bagging. Symptômes : une importance qui écrase tout, une OOB trop belle.
  • Biais partagé. Mille arbres qui ne savent pas tourner les axes moyennent mille escaliers : le résultat est plus lisse, mais reste un escalier (p07-01 casse). La moyenne ne crée pas de capacité — elle ne fait que retirer du bruit.
  • Extrapolation. Toute prédiction est une moyenne de y observés : hors du support des x d'entraînement, la forêt rend le palier du bord, exactement comme un arbre. Une tendance qui dérive n'est jamais prolongée.
  • B n'est pas un hyperparamètre à régler. Assez grand pour que la courbe OOB soit plate, c'est tout : il n'y a rien à valider croisée sur B, puisque la courbe est monotone. Ce qui se règle, c'est m et la taille minimale de feuille.

Résumé

À retenir
  1. Moyenner B arbres : biais inchangé, variance ρσ² + (1 − ρ)σ²/B.
  2. Le bootstrap fabrique des arbres différents mais corrélés : 63 % de lignes distinctes, et 100 % des features en commun.
  3. Plancher ρσ² : au-delà de ~100 arbres, plus de gain ; jamais de perte non plus.
  4. Forêt : m features par nœud ⇒ ρ baisse (0,5 → 0,1) ⇒ plancher divisé par 5 ; léger biais par arbre, largement rentable.
  5. OOB : chaque ligne prédite par les ≈ 37 % d'arbres qui ne l'ont pas vue — erreur de test gratuite, légèrement pessimiste.
  6. Arbres profonds pour la forêt, courts pour le boosting ; B se stabilise, m et la profondeur se règlent.
« Le bagging moyenne des arbres profonds ajustés sur des bootstraps : le biais reste celui d'un arbre, la variance tombe à ρσ² plus (1 − ρ)σ² sur B. Au-delà d'une centaine d'arbres il ne reste que le plancher ρσ², donc la forêt aléatoire tire m features par nœud pour décorréler les arbres et baisser ce plancher. L'erreur out-of-bag, sur les 37 % d'arbres qui n'ont pas vu chaque ligne, est un test gratuit. »

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

6 maillons · clique pour révéler après avoir dit
  1. Que fait le bagging au biais et à la variance ?
    Biais inchangé (linéarité de l'espérance) ; variance ρσ² + (1 − ρ)σ²/B.
  2. Pourquoi cent arbres et pas mille ?
    Le terme en 1/B s'éteint ; il ne reste que ρσ². De 10 à 100 on gagne 0,045 σ², de 100 à 1 000 : 0,0045.
  3. À quoi sert m dans une forêt ?
    Décorréler les arbres : une feature n'est candidate que dans m/p des nœuds, donc ρ baisse et le plancher avec lui. Prix : un léger biais par arbre.
  4. D'où vient le 37 % ?
    (1 − 1/n)n → e−1 = 0,368 : la part des lignes absentes d'un bootstrap. Un seul calcul, deux usages — la corrélation entre arbres et l'OOB.
  5. Pourquoi des arbres profonds ici et courts en boosting ?
    Le bagging ne baisse que la variance, il lui faut donc des composants à faible biais. Le boosting baisse le biais, il part de composants faibles.
  6. B se règle-t-il par validation croisée ?
    Non : la courbe OOB est monotone, on prend B assez grand pour qu'elle soit plate. Ce qui se règle, c'est m et la profondeur.