Didacticiel — Classification & interprétabilité
Arbres de décision industriels
L'arbre de décision est la première brique du ML tabulaire : non-linéaire, lisible, et capable d'exprimer des règles actionnables en atelier. Ajustez un modèle sur un dataset défauts pièce ou vie d'outil, jouez avec la profondeur, comparez MDI et permutation importance, visualisez l'arbre et la frontière de décision. 100 % navigateur via Pyodide + scikit-learn.
1. Pourquoi un arbre vs régression ou réseau de neurones ?
Les trois modèles ne jouent pas dans la même cour. L'arbre a trois avantages terrain décisifs pour l'industrie :
- Interprétabilité native — chaque prédiction est un chemin racine → feuille, lisible comme une règle métier (« Si température > 180 °C ET vibration > 0.8 → NOK »). Une régression donne des coefficients, un réseau donne une boîte noire. Pour un audit qualité ou une procédure IATF, l'arbre gagne.
- Non-linéarité native — l'arbre partitionne l'espace en rectangles, il capte les seuils physiques (usure > 75 h) sans qu'on les code manuellement. Une régression linéaire nécessite d'expliciter les termes polynomiaux ou des transformations.
- Gestion des interactions — la deuxième coupe dépend du chemin pris à la première,
donc l'arbre encode gratuitement les interactions « vibration ET usure ». Une régression
linéaire les ignore sauf si on ajoute explicitement un terme
vibration × usure.
Arbre vs régression
Si la relation X → Y est non-monotone ou contient des effets seuils, l'arbre est presque toujours meilleur (en précision ET en lisibilité). Si la relation est quasi-linéaire et qu'on veut des intervalles de confiance rigoureux, la régression reste supérieure.
Limites de l'arbre : instable aux petites variations du dataset (bootstrap donne des arbres différents), pas d'extrapolation au-delà des données d'entraînement, et sensible à l'overfit si on laisse la profondeur libre. D'où les ensembles (random forest, gradient boosting) qui traitent ces défauts.
2. Critères de split — Gini, Entropie, MSE
À chaque nœud, l'arbre choisit la paire (feature, seuil) qui minimise l'impureté pondérée des enfants. Trois critères dominent :
| Critère | Formule | Type | Quand utiliser |
|---|---|---|---|
| Gini | 1 − Σ pₖ² | Classif | Défaut sklearn. Rapide, résultats ≈ entropie |
| Entropie | −Σ pₖ · log₂(pₖ) | Classif | Base ID3 / C4.5. Légèrement plus lente |
| MSE | Σ(yᵢ − ȳ)² / n | Régression | Défaut sklearn régression |
En pratique, les écarts empiriques entre Gini et entropie dépassent rarement 2 % de précision. Garder le défaut sklearn est la règle 99 % du temps.
Information gain = H(parent) − Σ (wᵢ · H(enfanti))
On choisit le split qui maximise le gain d'information (classif) ou qui minimise la MSE pondérée (régression).
3. Profondeur et min_samples — biais vs variance
Les deux hyperparamètres anti-overfit les plus importants :
-
max_depth— profondeur maximale de l'arbre. Contrôle directement la complexité. Typique en industrie : 3-7. Laisser àNone= quasi-certain d'overfit. -
min_samples_leaf— nombre minimum d'échantillons par feuille. Empêche les feuilles à 1 seul point (mémorisation). Typique : 5-20 pour un dataset de 300-1000 lignes.
| Profondeur | Risque | Cas typique |
|---|---|---|
| 1-2 | Sous-apprentissage | Modèle jouet, démo |
| 3-5 | Sweet spot industrie | Interprétable, robuste |
| 6-10 | Overfit latent | OK si min_samples_leaf élevé |
| > 10 | Overfit quasi certain | Réservé aux ensembles (RF, GBM) |
Pruning post-hoc : sklearn propose le cost-complexity pruning (ccp_alpha).
On construit un arbre profond puis on coupe les branches dont l'amélioration en précision validée
ne justifie pas la complexité ajoutée. Alternative au pre-pruning via max_depth.
Fiche de critères industriels — choisir max_depth
Dataset < 500 lignes → 3-4 · Dataset 500-5000 → 4-6 · Dataset > 5000 → 5-8
Classe déséquilibrée (< 10 %) → 3-4 + class_weight='balanced'
Besoin d'extraire des règles lisibles → 3-5 maximum
4. Importance des variables — MDI vs permutation
Deux méthodes, une seule vérité (parfois) :
- MDI (Mean Decrease Impurity) — importance basée sur la réduction d'impureté (Gini / entropie) apportée par chaque feature dans les splits. Calculée gratuitement pendant le fit. Biaisée en faveur des variables à haute cardinalité ou continues.
- Permutation importance — on permute aléatoirement une feature sur le jeu de test, on mesure la chute de précision. Robuste aux features corrélées et continues, mais coûteuse (k × n_features fits additionnels).
Règle de production : toujours reporter les deux. Si elles divergent sur le top 3 des variables, enquêter avant de livrer — souvent une corrélation cachée ou une variable à cardinalité trompeuse.
Cas typique : sur un dataset vie d'outil, MDI peut classer heure_du_jour comme
importante (cardinalité = 24). Permutation importance la classe dernière. L'opérateur confirme : l'heure
n'a pas d'effet physique, on la retire du modèle en production.
5. Quand passer à un ensemble (random forest, gradient boosting) ?
Hiérarchie de décision — préservez la règle simple d'abord :
- Un arbre unique max_depth=5 satisfait (précision test > 90 %, R² > 0.85) → garder. Interprétabilité prime.
- Arbre unique plafonne → passer à random forest (200-500 arbres,
max_features='sqrt'). Gain typique : 2-5 points de précision. - Random forest ne suffit pas → gradient boosting (XGBoost, LightGBM). Gains supplémentaires 1-3 points, au prix d'une interprétabilité dégradée. Compenser avec SHAP.
- Tabulaire industriel > 10 000 lignes → XGBoost en défaut. Règles résiduelles extraites via SHAP si audit.
Règle d'or : un arbre de profondeur 4 qui explique 88 % vaut mieux qu'un XGBoost à 92 % que personne ne comprend ni ne maintient. La dette d'interprétabilité coûte cher en audit et en drift monitoring.
Données
Dataset classification : 300 pièces × 8 features → défaut OK/NOK. Interaction vibration × usure. Généré au fit (seed fixe). Vous pouvez éditer ou importer votre CSV.
Colonnes de features + une colonne cible. Pour un CSV importé, la dernière colonne est la cible (ou nommée
defaut, target, y). Détection auto classification (≤ 10 valeurs)
vs régression (numérique continue).
Hyperparamètres
Exercices
Testez votre compréhension — cliquez pour voir la réponse.
01 Dataset OK/NOK (pré-chargé, 300 pièces × 8 features). Vous ajustez un arbre avec max_depth=3, critère Gini. L'arbre atteint 86% de précision test. La racine coupe sur vibration_capteur > 0.72. Que vous dit ce choix de racine ?
Réponse : La variable vibration_capteur est celle qui réduit le plus l'impureté Gini à la première coupe — c'est le prédicteur dominant dans ce dataset. Toute analyse terrain commence par cette variable.
Un arbre ne choisit pas la racine au hasard : c'est la feature qui maximise la baisse d'impureté. Si elle change entre deux fits (avec bootstrap), c'est un signal d'instabilité → envisager random forest.
02 Vous passez max_depth=20 sur le même dataset. Précision train = 100%, précision test = 78%. Diagnostic ?
Réponse : Sur-apprentissage classique. L'arbre a mémorisé le bruit du train. Revenir à max_depth 3-5, augmenter min_samples_leaf à 10-20, ou passer à un random forest qui moyenne plusieurs arbres.
La signature de l'overfit sur un arbre : train ≈ 100%, gap train-test > 10 points. La courbe apprentissage montre train plat et test qui décroche au-delà d'une profondeur seuil.
03 Sur le dataset régression (vie outil), vous comparez un arbre (max_depth=4) et une régression linéaire. L'arbre donne RMSE test = 8.2h, la régression RMSE test = 12.5h. Pourquoi cet écart ?
Réponse : La relation entre features et vie d'outil n'est pas linéaire : effet seuil sur la vitesse, interactions matière × profondeur. L'arbre capture ces non-linéarités par partitionnement, la régression linéaire les ignore.
Règle pratique : si un arbre shallow bat nettement une régression, cherchez les interactions ou non-linéarités cachées. Un ingénieur procédé peut souvent les nommer.
04 Toggle : vous activez 'interaction AND'. Un arbre de profondeur 2 détecte-t-il l'interaction vibration × usure ?
Réponse : Oui, c'est une des forces de l'arbre : la deuxième coupe dépend du chemin pris à la première. Avec profondeur 2, l'arbre peut exprimer « SI vibration > 0.8 ET usure > 75h → NOK ». Aucune feature explicite d'interaction n'est nécessaire.
À l'inverse, une régression linéaire Y = a·vibration + b·usure ne capture PAS cette interaction. Il faudrait ajouter un terme vibration × usure explicite.
05 Feature importance MDI donne : température 0.42, usure 0.31, vibration 0.18, autres < 0.10. Mais permutation importance place vibration en tête. Comment expliquer ?
Réponse : MDI est biaisée en faveur des variables à nombreuses modalités (continues, cardinalité élevée). Si température_outil a beaucoup de valeurs distinctes, elle est souvent choisie pour des splits qui diminuent marginalement l'impureté, gonflant artificiellement son MDI. Permutation importance mesure l'impact réel sur la précision test — fiable pour les variables corrélées ou de haute cardinalité.
Règle : en production, toujours reporter AU MOINS les deux métriques. Si elles divergent, creuser avant de livrer au métier.
06 Classe déséquilibrée : 92% OK, 8% NOK. Un arbre prédit OK tout le temps : précision 92%, rappel NOK = 0%. Comment corriger ?
Réponse : Trois leviers : (1) class_weight='balanced' dans sklearn pour pondérer la minorité ; (2) sur-échantillonner la classe NOK (SMOTE) ; (3) changer la métrique d'évaluation — F1 ou recall au lieu de l'accuracy qui est trompeuse en imbalanced.
Ne JAMAIS juger un modèle imbalanced à l'accuracy seule. Sur 1% de NOK, un modèle 'tout OK' fait 99% et 0% de détection — catastrophe en contrôle qualité.
07 Règle extraite : « Si vibration > 0.8 ET usure > 75h → 92% NOK (n=45) ». Le métier vous demande d'appliquer cette règle sur une autre ligne de production. Légitime ?
Réponse : Non, pas directement. Les seuils 0.8 et 75h viennent du dataset de cette ligne. Sur une autre ligne, les capteurs, matières, vitesses peuvent différer → refit obligatoire. La règle EST transférable en forme (la combinaison vibration × usure est physiquement plausible), PAS en valeurs numériques.
Un arbre est un modèle local à son jeu de données. Documenter le périmètre de validité est aussi important que la règle elle-même.
08 Vous observez que la courbe d'apprentissage montre train train train → NOK et test plafonne à profondeur=4. Que choisir ?
Réponse : Choisir max_depth = 4 ou 5 (point où test arrête de progresser). Aller plus profond augmente le risque d'overfit sans gain attendu. Si 4 est le plafond test, essayer un random forest (profondeur illimitée mais moyennée) pour voir si le plafond monte.
La courbe apprentissage (train vs test selon profondeur) est le diagnostic le plus direct pour choisir max_depth. Automatiser avec validation croisée pour robustesse.
Ce didacticiel vous aide ? BCUB3 déploie des modèles d'arbres (et leurs ensembles) sur vos données de contrôle final, maintenance et procédés : détection de défauts, règles qualité auditables, prévision de vie d'outil.
Discuter d'un cas concret