Aller au contenu principal

Module 6 — Forêts aléatoires et agrégation bootstrap

Le module 5 s'est achevé sur un paradoxe : l'arbre est instable, donc peu fiable seul. La forêt aléatoire retourne ce défaut en force. En moyennant des centaines d'arbres volontairement diversifiés, elle réduit drastiquement la variance et devient l'un des modèles les plus robustes et les plus faciles à réussir du machine learning tabulaire.

L'idée : moyenner pour réduire la variance

Un principe statistique fonde tout : la moyenne de nombreuses estimations bruitées mais indépendantes est bien plus stable que chacune prise isolément. Si chaque arbre a une variance élevée mais des erreurs qui se compensent, leur moyenne annule une grande partie du bruit tout en conservant le signal.

Encore faut-il que les arbres soient différents — moyenner des arbres identiques n'apporterait rien. La forêt aléatoire injecte donc deux sources de diversité.

Deux ingrédients de diversité

1. Le bagging (agrégation bootstrap). Chaque arbre est entraîné sur un échantillon tiré au hasard avec remise des données d'origine (un bootstrap). Chaque arbre voit donc un jeu légèrement différent.

2. L'aléa des variables. À chaque coupe, l'arbre ne considère qu'un sous-ensemble aléatoire des variables. Cela empêche une variable très prédictive de dominer tous les arbres, et les décorrèle davantage — l'apport clé de la forêt aléatoire par rapport au simple bagging.

La prédiction finale est le vote majoritaire (classification) ou la moyenne (régression) de tous les arbres.

from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=300, max_features="sqrt").fit(X_train, y_train)

L'erreur out-of-bag : une validation gratuite

Comme chaque arbre n'utilise qu'un bootstrap, environ un tiers des observations lui restent inconnues (dites out-of-bag). On peut évaluer chaque observation sur les seuls arbres qui ne l'ont pas vue, obtenant une estimation de performance sans jamais toucher au jeu de test — une validation quasi gratuite, propre à la forêt.

model = RandomForestClassifier(n_estimators=300, oob_score=True).fit(X_train, y_train)
model.oob_score_ # estimation out-of-bag

Pourquoi c'est une valeur sûre

  • Robuste par défaut : fonctionne bien avec peu de réglage ; excellent premier modèle sérieux.
  • Peu sensible au sur-apprentissage : ajouter des arbres ne dégrade pas la performance (au pire, ça stagne).
  • Aucune mise à l'échelle, gère numérique et catégoriel, fournit l'importance des variables.
  • Parallélisable : les arbres s'entraînent indépendamment.

Ses limites : moins performante que le boosting bien réglé (module 7) sur les compétitions, plus lourde en mémoire, et son importance des variables peut être trompeuse quand des variables sont corrélées.

Le bon réflexe : la forêt comme point de repère

Face à un problème tabulaire, une forêt aléatoire par défaut est un excellent repère : rapide à mettre en place, robuste, elle donne d'emblée un niveau de performance sérieux à battre. Si elle suffit, on s'épargne la complexité du boosting. Sinon, elle sert de socle de comparaison. Régler ensuite n_estimators (plus = mieux, jusqu'à saturation), max_features et max_depth par validation croisée.

En résumé

  • La forêt aléatoire moyenne des centaines d'arbres pour transformer leur variance en robustesse.
  • Deux sources de diversité : le bagging (bootstrap des observations) et l'aléa des variables à chaque coupe.
  • L'erreur out-of-bag offre une estimation de performance gratuite, sans toucher au jeu de test.
  • C'est une valeur sûre : robuste, peu sensible au sur-apprentissage, sans mise à l'échelle — un excellent modèle de référence à battre.

Module suivant : l'amplification du gradient (XGBoost, LightGBM) — une autre façon de combiner des arbres, souvent championne du tabulaire.