Machine Learning
Machine Learning en conditions réelles
Le carnet d'un praticien ML qui a appris à se méfier de ses propres chiffres. Trois fils rouges : la chasse aux fuites de données et aux scores gonflés, la rigueur statistique sur les comparaisons de modèles (bootstrap apparié, 5x2cv, McNemar), et le passage du score académique à la décision métier (seuil par coût, calibration auditée). On montre le code fautif ET le code correct, et on chiffre toujours l'écart.
20 snippets phares
- TargetEncoder natif : encodage par la cible sans fuiteLe TargetEncoder de scikit-learn applique un cross-fitting interne pendant fit_transform : chaque ligne est encodée par des moyennes calculées sans elle, ce qui neutralise la fuite de cible.
- Cross-validation purgée avec embargo (finance)Générateur de folds temporels qui retire les observations adjacentes au fold de test : indispensable quand les labels couvrent plusieurs périodes (rendement à horizon H) et se chevauchent.
- Nested CV : estimer la performance APRÈS tuningLe score d'un GridSearchCV est optimiste car les hyperparamètres ont été choisis sur ces mêmes folds. La boucle externe d'une nested CV donne l'estimation non biaisée de la procédure complète.
- Seuil par minimisation du coût métier attenduQuand un faux négatif coûte 50 fois plus qu'un faux positif, le bon seuil ne se lit sur aucune courbe standard : on minimise directement le coût total attendu sur la validation.
- PSI : détecter la dérive d'une feature en productionLe Population Stability Index compare la distribution d'une variable entre l'entraînement et la production. Seuils usuels : < 0.10 stable, 0.10-0.25 à surveiller, > 0.25 drift majeur.
- Validation adversariale : train et test sont-ils comparables ?Entraîner un classifieur à distinguer train et production : une AUC proche de 0.5 signifie des distributions semblables ; au-delà de 0.7, les features les plus importantes désignent la source du drift.
- Exporter un pipeline complet en ONNX et vérifier la paritéConversion du pipeline scikit-learn entier (preprocessing inclus) en ONNX, puis assertion numérique entre les sorties sklearn et onnxruntime — l'étape que l'on regrette d'avoir sautée.
- Sérialiser le modèle AVEC ses métadonnées de traçabilitéUn .joblib nu est une bombe à retardement : embarquer version, date, hash des données, métriques et colonnes attendues dans le même artefact rend chaque modèle auditable.
- Contraintes de monotonie : injecter la connaissance métierForcer le modèle à respecter des relations connues (plus d'endettement ne baisse jamais le risque) : régularisation gratuite, robustesse au bruit et modèle défendable devant un comité.
- Fuite corrigée : sélection de features sur tout le datasetSélectionner les features corrélées à la cible AVANT la cross-validation produit des AUC mirobolantes sur du bruit pur — démonstration chiffrée, puis correction par pipeline.
- Duel des gradient boostings : XGBoost, LightGBM, CatBoost, HistGBBanc d'essai des quatre implémentations majeures du gradient boosting sur le même jeu tabulaire : AUC, temps d'entraînement, latence de prédiction et taille du modèle sérialisé, dans un seul tableau de décision.
- Bootstrap de la différence d'AUC : l'écart est-il réel ?Bootstrap APPARIÉ sur le jeu de test : les deux modèles sont évalués sur les mêmes tirages, ce qui isole la différence de qualité du simple bruit d'échantillonnage. Verdict par intervalle de confiance.
- Variance de graine : le même modèle entraîné dix foisDix entraînements identiques à graine près quantifient le bruit propre du modèle : tout gain de tuning inférieur à cette variance est indiscernable du hasard — un garde-fou à calculer une fois par projet.
- Le SMOTE fausse les probabilités : preuve et correctifDémonstration chiffrée : après rééquilibrage 50/50, les probabilités prédites sont 6 fois trop hautes. La correction analytique du prior (Elkan, 2001) les ramène au taux réel sans réentraîner.
- Prédiction conforme split : un intervalle garanti à 90 %Split conformal prediction en 12 lignes : le quantile des résidus d'un jeu de calibration dédié donne un intervalle dont la couverture est mathématiquement garantie, quel que soit le modèle.
- Fuite par doublons : des lignes du test déjà vues au trainHachage des lignes pour détecter les doublons exacts entre train et test, puis AUC recalculée avec et sans : la différence chiffre exactement de combien le score annoncé était gonflé.
- Labels suspects : détection par confiance croisée (style cleanlab)Les prédictions out-of-fold donnent la probabilité que le modèle accorde au label observé : les lignes où cette confiance est minuscule sont des candidates au mauvais étiquetage, triées pour revue humaine.
- Null importances : l'importance est-elle significative ?Cinquante modèles entraînés sur une cible mélangée construisent la distribution nulle de l'importance de chaque feature : seule une importance réelle qui dépasse le 95e percentile nul prouve un vrai signal.
- Évaluer un signal de trading ML : win rate, profit factor, expectancyL'AUC ne paie pas les factures : conversion des probabilités d'un modèle en métriques de trading — nombre de trades, win rate, profit factor, expectancy et drawdown maximal de la courbe d'équité.
- Rappel à taux de faux positifs fixé : la métrique fraudeLecture opérationnelle de la courbe ROC : pour chaque budget de faux positifs (0.1 %, 0.5 %, 1 %, 5 %), le seuil à appliquer, le rappel obtenu et le volume d'alertes quotidien que l'équipe devra absorber.