Séance 4 — CART et coût empirique régularisé
2 octobre 2026
Adult — recensement américain de 1994.
Cible : revenu annuel supérieur à 50 000 dollars.
10 000 observations, 12 variables explicatives, 24 % de positifs.
4 variables numériques : âge, heures travaillées…
8 variables catégorielles : emploi, diplôme, statut marital, profession, situation familiale, origine, sexe, pays de naissance.
Les modèles gaussiens supposent des variables continues. Beaucoup de variables d’Adult sont catégorielles.
Encoder les professions par des nombres impose un ordre arbitraire.
Une modalité comme étiquette, pas comme quantité.
Valeurs manquantes dans workclass, occupation et native-country.
Manquants non aléatoires. occupation manque surtout chez les personnes sans emploi.
Une valeur manquante peut être informative. Une modalité dédiée conserve cette information.
Des régions rectangulaires. Une prédiction constante par région.
Une seule variable par découpe : \(x_j \leq s\), ou \(x_j \in A\) pour une variable catégorielle.
Frontières parallèles aux axes. Une contrainte forte, source de lisibilité.
Un modèle, deux lectures. Chaque nœud interne correspond à une frontière noire.
Au nœud \(t\), CART choisit le couple \((j,s)\) qui maximise la baisse d’impureté :
\[ \Delta i(j, s) = i(t) - \frac{n_g}{n_t} i(t_g) - \frac{n_d}{n_t} i(t_d) \]
Recherche exhaustive sur les variables et les seuils.
Choix glouton : optimum local, sans garantie globale. Aucun retour en arrière.
Pour une proportion \(p\) de la classe 1 dans un nœud :
\[ \begin{aligned} \text{Gini} \quad & i(t) = 2p(1-p) \\ \text{entropie} \quad & i(t) = -p \log_2 p - (1-p)\log_2(1-p) \\ \text{erreur} \quad & i(t) = \min(p, 1-p) \end{aligned} \]
Nœud de 100 personnes : 40 % au-dessus de 50 k\(.\)i(t) = 2 4 6 = 0{,}48$.
Découpe sur marital-status :
| \(n\) | \(p\) | Gini | |
|---|---|---|---|
| marié | 50 | 0,64 | 0,461 |
| non marié | 50 | 0,16 | 0,269 |
\[ \Delta i = 0{,}48 - \tfrac{50}{100}(0{,}461) - \tfrac{50}{100}(0{,}269) = 0{,}115 \]
Comparaison avec toutes les autres découpes.
Le taux d’erreur est linéaire par morceaux. Son gain peut rester nul malgré deux fils plus purs.
Gini et entropie sont strictement concaves. Toute séparation utile réduit l’impureté.
Gini et entropie pour faire croître l’arbre. Le taux d’erreur pour l’élaguer.
Pas de critère d’arrêt local fiable.
Un seuil sur \(\Delta i\) peut arrêter trop tôt. Un faible gain peut ouvrir sur de bonnes découpes.
Réponse de Breiman : arbre maximal, puis élagage.
Une feuille par observation : erreur d’apprentissage nulle, erreur de test en hausse.
Séance 1 :
\[ f^* = \arg\min_{f \in \mathcal F} \; \hat R(f, D_n) + H(f) \]
avec \(H\) croissant avec la capacité de \(f\).
CART : une réalisation exacte de ce principe.
Pour un arbre \(T\), de \(|T|\) feuilles :
\[ R_\alpha(T) = R(T) + \alpha |T| \]
\(R(T)\) : taux d’erreur d’apprentissage, décroissant avec la taille.
\(|T|\) : nombre de feuilles, donc capacité.
\(\alpha \geq 0\) : prix d’une feuille.
\(\alpha = 0\) — aucune pénalité, arbre maximal.
\(\alpha\) très grand — arbre réduit à sa racine.
Entre les deux : arbre de taille intermédiaire.
Pour chaque \(\alpha\), il existe un unique plus petit sous-arbre \(T_\alpha\) qui minimise \(R_\alpha\).
Quand \(\alpha\) croît de \(0\) à l’infini, ces \(T_\alpha\) forment une suite finie et emboîtée :
\[ T_{\max} \supset T_1 \supset T_2 \supset \cdots \supset \{\text{racine}\} \]
Un continuum réduit à une liste finie.
Pour un nœud interne \(t\), soit \(T_t\) la branche qui en part. On compare garder la branche ou la remplacer par une feuille :
\[ g(t) = \frac{R(t) - R(T_t)}{|T_t| - 1} \]
\(g(t)\) : baisse d’erreur par feuille supplémentaire.
Élagage du \(g\) minimal — le maillon faible. Répétition jusqu’à la racine.
Une marche par branche élaguée. Échelle horizontale logarithmique.
\(\alpha\) : hyperparamètre choisi par validation croisée.
L’erreur d’apprentissage croît avec \(\alpha\). Inutile pour choisir.
Minimum intérieur de l’erreur de validation : \(\hat\alpha\).
Compromis biais-variance réglé par un seul nombre.
from sklearn.tree import DecisionTreeClassifier
# la suite emboîtée et ses alpha de coupure
complet = DecisionTreeClassifier(random_state=0).fit(X, y)
chemin = complet.cost_complexity_pruning_path(X, y)
chemin.ccp_alphas
# un arbre élagué pour un alpha donné
arbre = DecisionTreeClassifier(ccp_alpha=0.002).fit(X, y)cost_complexity_pruning_path implémente le maillon faible.
Un chemin racine–feuille : une règle.
Première découpe : situation familiale. Puis diplôme et revenus du capital.
LDA fournit huit coefficients à lire ensemble. L’arbre fournit des règles.
Interprétabilité par la forme du modèle. Pas d’explication ajoutée après coup.
Même construction. Deux substitutions.
Impureté : variance intra-nœud. \(\;i(t) = \frac{1}{n_t}\sum_{i \in t} (y_i - \bar y_t)^2\).
Prédiction d’une feuille : moyenne des \(y_i\).
Fonction constante par morceaux. Aucune extrapolation.
Pour chaque variable \(j\) : somme pondérée des baisses d’impureté.
Biais envers les variables à nombreuses modalités : davantage de découpes, donc davantage de gains fortuits.
Dans Adult, sex et race demandent une prudence supplémentaire.
CART original : bipartition des modalités en deux groupes.
Valeurs manquantes : scissions de substitution fondées sur d’autres variables.
scikit-learn n’implémente aucune des deux. Encodage numérique obligatoire.
Même partitionnement récursif. Spécificité de CART : arbre maximal, puis élagage pénalisé.
Trois sous-échantillons à 90 %. Trois arbres différents.
Instabilité : variance élevée.