Machine learning appliqué à la finance · Essentiel · 8 min
Arbres de décision et forêts aléatoires
Objectif: Capturer des non-linéarités, évaluer interprétabilité, surapprentissage et compromis.
Avant de continuer
Il faut connaître la régression logistique, pour comparer un modèle linéaire à un modèle non-linéaire.
Vocabulaire
- Ensemble (ensemble learning)
- Combiner les prédictions de plusieurs modèles pour obtenir une prédiction plus robuste qu'un seul modèle.
- Importance des variables
- Une mesure de la contribution de chaque variable aux prédictions d'un arbre ou d'une forêt, à interpréter avec prudence en cas de variables corrélées.
Intuition
Un arbre de décision capture des non-linéarités et des interactions entre variables qu'une régression linéaire ne peut pas voir, en découpant récursivement les données par des règles simples ("si levier > 3, alors...") ; une forêt aléatoire moyenne de nombreux arbres légèrement différents pour réduire la variance et la sensibilité au bruit d'un arbre unique.
Définition
Quel problème ? Capturer des relations non-linéaires et des interactions entre variables, en classification comme en régression. Quand l'utiliser ? Quand la relation entre variables et cible n'est pas linéaire, ou quand on veut un modèle robuste avec peu de réglages. Quand l'éviter ? Quand l'interprétabilité stricte est requise (un arbre unique reste lisible, mais une forêt de centaines d'arbres redevient une boîte noire) ou quand les données sont peu nombreuses (risque de surapprentissage élevé). Un arbre découpe récursivement l'espace des variables pour minimiser l'impureté (Gini en classification, variance en régression) dans chaque feuille ; une forêt aléatoire entraîne de nombreux arbres sur des échantillons bootstrap différents, avec un sous-ensemble aléatoire de variables testées à chaque split, puis moyenne leurs prédictions.
Utilité
Quelles données/sortie ? Variables numériques ou catégorielles en entrée (pas besoin de normalisation, contrairement à la régression), une classe ou une valeur continue en sortie. Comment l'entraîner/évaluer ? Contrôler la profondeur maximale et le nombre minimal d'observations par feuille pour limiter le surapprentissage d'un arbre unique ; pour une forêt, régler le nombre d'arbres et la taille du sous-ensemble de variables, évaluer via validation croisée ou l'erreur out-of-bag (calculée automatiquement sur les observations non utilisées dans chaque arbre bootstrap). Pourquoi ce modèle ? Il capture des non-linéarités sans nécessiter de spécifier manuellement des termes d'interaction, contrairement à une régression linéaire.
Exemple concret
Classer des entreprises emprunteuses en catégories de notation de crédit à partir de dizaines de ratios financiers, dont certains n'ont d'effet que combinés (un fort levier n'est problématique que si la couverture des intérêts est également faible) : une forêt aléatoire capture naturellement cette interaction, alors qu'une régression logistique nécessiterait de créer manuellement un terme d'interaction levier×couverture.
Toujours bloqué ? Une autre façon de voir les choses
Un arbre de décision fonctionne comme une série de questions oui/non en cascade, un peu comme un arbre de diagnostic médical : "le levier dépasse-t-il 3 ? Si oui, la couverture des intérêts est-elle inférieure à 2 ? Si oui, catégorie à risque." Une forêt aléatoire, c'est demander cette série de questions à des centaines d'"experts" légèrement différents (chacun voyant un sous-échantillon différent des données et des variables), puis prendre la réponse majoritaire — plus fiable qu'un seul expert, aussi bon soit-il.
Formule indispensable
Variables, unités et hypothèses
- — Proportion d'observations de la classe k dans le nœud D
- — Impureté du nœud : 0 si toutes les observations sont de la même classe, maximale si les classes sont équiréparties
Hypothèses: Un split choisit la variable et le seuil qui réduisent le plus l'impureté pondérée des deux nœuds enfants par rapport au nœud parent.
Unités: Sans dimension, entre 0 et 1 (cas à 2 classes).
Exemple concret: Nœud avec 90% défauts, 10% non-défauts : Gini = 1−(0,9²+0,1²) = 0,18 — faible impureté, nœud déjà assez "pur".
Calcul détaillé
1) Pour un arbre : à chaque nœud, tester tous les splits possibles (variable, seuil) et choisir celui qui minimise l'impureté pondérée résultante ; répéter récursivement jusqu'à une profondeur maximale ou un nombre minimal d'observations par feuille. 2) Pour une forêt : répéter la construction d'arbre B fois sur des échantillons bootstrap différents, avec un sous-ensemble aléatoire de variables testées à chaque split ; la prédiction finale est la moyenne (régression) ou le vote majoritaire (classification) des B arbres.
Exemple de code Python
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import roc_auc_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, stratify=y, random_state=0)
modele = RandomForestClassifier(n_estimators=300, max_depth=6, random_state=0)
modele.fit(X_train, y_train)
probabilites = modele.predict_proba(X_test)[:, 1]
print("AUC :", roc_auc_score(y_test, probabilites))
# Importance des variables (à interpréter avec prudence si variables corrélées)
importances = dict(zip(X.columns, modele.feature_importances_))
print(sorted(importances.items(), key=lambda kv: -kv[1])[:5])Interprétation
L'erreur out-of-bag d'une forêt aléatoire donne une estimation de la performance de généralisation sans avoir besoin d'un jeu de test séparé (chaque arbre est évalué sur les observations qu'il n'a pas vues). L'importance des variables indique quelles variables contribuent le plus aux prédictions, mais deux variables très corrélées se "partagent" artificiellement l'importance, ce qui peut sous-estimer leur rôle réel individuel.
Pièges
Laisser un arbre unique croître sans limite de profondeur : il finit par mémoriser les données d'entraînement (surapprentissage extrême, un arbre par observation). Autre piège : croire qu'une forêt aléatoire est un modèle "boîte noire" totalement inexplicable — l'importance des variables et les valeurs SHAP offrent une interprétabilité partielle, moins directe qu'une régression mais pas nulle. Enfin, ne pas régler le nombre d'arbres ou la profondeur (garder les valeurs par défaut sans validation croisée) peut laisser un surapprentissage résiduel non détecté.
Trois points à retenir
- 1Un arbre découpe récursivement les données pour minimiser l'impureté (Gini) dans chaque feuille, capturant non-linéarités et interactions.
- 2Une forêt aléatoire moyenne de nombreux arbres entraînés sur des échantillons bootstrap différents, réduisant la variance d'un arbre unique.
- 3L'importance des variables doit être interprétée avec prudence en présence de variables corrélées.
Approfondir / démonstration
Le bagging (bootstrap aggregating) sur lequel repose la forêt aléatoire réduit la variance d'un ensemble de modèles sans en augmenter le biais, à condition que les modèles individuels soient suffisamment décorrélés entre eux : c'est précisément le rôle du sous-échantillonnage aléatoire des variables à chaque split (au-delà du simple bootstrap des observations), qui force les arbres à explorer des chemins de décision différents plutôt que de converger systématiquement vers les mêmes variables les plus prédictives — un mécanisme statistiquement proche de la diversification d'un portefeuille (M13-gp-a), où combiner des actifs peu corrélés réduit le risque global sans sacrifier le rendement espéré.