Comment traitez-vous des classes déséquilibrées ?

Questions d’entrevue Apprentissage supervisé

Seniordesequilibreclassificationmetriques

La réponse qui distingue un candidat expérimenté commence par ne pas toucher aux données : le déséquilibre est d’abord un problème de métrique et de seuil, pas un problème d’échantillon.

Un modèle entraîné sur 1 % de fraudes n’est pas cassé parce qu’il prédit rarement « fraude » — il est cassé si on l’évalue avec l’exactitude, qui récompense le silence.

Dans l’ordre, ce qu’on fait

1. Changer de métrique. Avant tout le reste. L’exactitude n’a aucun sens ici ; on prend le rappel sous contrainte de précision, l’aire sous la courbe précision-rappel, ou directement un coût métier chiffré. Cette étape seule règle beaucoup de cas qu’on croyait être des problèmes de données.

2. Déplacer le seuil. Le 0,5 par défaut n’a rien de spécial : c’est un choix arbitraire hérité de l’implémentation. Sur des classes déséquilibrées, le seuil optimal est souvent à 0,08 ou à 0,03, et on le choisit sur la courbe précision-rappel du jeu de validation.

3. Pondérer les classes. Une ligne de code, aucun exemple inventé, aucun exemple jeté :

python
modele = LogisticRegression(class_weight='balanced')
# ou, sur un gradient boosting :
modele = XGBClassifier(scale_pos_weight=n_negatifs / n_positifs)

La pondération multiplie l’erreur commise sur la classe rare, ce qui revient à dire au modèle que ces erreurs coûtent plus cher. C’est presque toujours suffisant.

4. Rééchantillonner, en dernier. Sous-échantillonner la classe majoritaire jette de l’information ; sur-échantillonner la minoritaire duplique et invite au surapprentissage. SMOTE interpole entre voisins de la classe rare plutôt que de copier, ce qui est mieux — et reste risqué en grande dimension, où « entre deux voisins » ne veut pas dire grand-chose.

Les deux pièges à mentionner

Le rééchantillonnage ne doit toucher que l’entraînement. Jamais la validation, jamais le test, et jamais avant le découpage. Un SMOTE appliqué avant la validation croisée place des points interpolés de part et d’autre de la coupure : le score obtenu est excellent et entièrement faux. En pratique, cela veut dire un pipeline imblearn à l’intérieur des blocs, pas un fit_resample en début de script.

Le rééchantillonnage casse la calibration. Après un rééquilibrage, les probabilités sorties ne correspondent plus au taux réel de positifs : un modèle entraîné à 50/50 sur un phénomène à 1 % prédit des probabilités très surestimées. Si la probabilité sert à autre chose qu’à ordonner, il faut recalibrer.

Et la question qu’il faut retourner

Avant les techniques : combien y a-t-il de positifs en valeur absolue ? Trois cents fraudes sur trente millions de transactions, c’est un problème de rareté, pas de proportion, et les vraies réponses sont ailleurs — collecter plus de cas positifs, enrichir les variables, ou traiter le problème comme une détection d’anomalies plutôt que comme une classification.

Toutes les questions Apprentissage supervisé