Imbalanced data et Machine Learning

Les données déséquilibrées posent de réelles difficultés aux algorithmes de Machine Learning et de Deep Learning. Faisons le tour des nombreuses façon d’y remédier.
imbalanced-data
Sommaire

Cet article est le premier de notre série consacrée aux données déséquilibrées.

Les données déséquilibrées sont une situation très fréquente dans les données réelles : détection de fraudes, dépistage de cancer, prévision de crises financières… Tous ces événements réjouissants sont rares, et donc difficiles à prédire. Les données déséquilibrées sont donc un sujet de longue date en Machine Learning, et une myriade de méthodes existent pour les traiter : il est parfois difficile de s’y retrouver ! Nous faisons le point dans cet article sur :

  • les problèmes que posent les données déséquilibrées en Machine Learning
  • les grandes familles de méthodes pour entraîner des modèles performants sur ces données
  • la façon de choisir la méthode qui correspond le mieux à votre situation.

Mais d’abord, posons les bases.

Qu’est-ce que les données déséquilibrées ?

Les données déséquilibrées (ou imbalanced data) sont un problème fréquemment rencontré dans les modèles de classification, qu’il s’agisse de classification binaire (ex : détecter une maladie) ou de classification multi-classes (ex : prédire le modèle de voiture acheté). Nous présentons ici le cas binaire, qui est plus simple à appréhender et peut ensuite facilement se généraliser au multi-classes.

On peut parler de données déséquilibrées dès lors que les deux classes ne sont pas présentes avec la même fréquence dans les données, i.e. que le ratio n’est pas 50%/50%. Mais en pratique on ne parle de données déséquilibrées qu’à partir du moment où le déséquilibre dépasse 10%/90%. Par exemple, dans le cas d’une détection de fraude, il se peut que 99.9% des transactions effectuées soient valides, et seulement 0.1% frauduleuses. Les transactions valides sont alors appelées la classe majoritaire, et les fraudes la classe minoritaire.

Imbalance ratio

Les articles de recherche utilisent souvent “l’Imbalance ratio” pour caractériser le degré de déséquilibre :

\begin{equation*} \text{Imbalance ratio} = \frac{\text{Nb d’observations majoritaires}}{\text{Nb d’observations minoritaires}} \end{equation*}

Avec cette définition, Imbalance ratio >= 1, la valeur 1 correspondant à des données parfaitement équilibrées. Dans notre exemple, il vaut 99.9/0.1 = 999.

Convention “Individus minoritaires = individus positifs”

Dans un modèle prédisant « Y = 1 si fraude, Y=0 s’il n’y a pas de fraude », les individus positifs (Y=1) sont la classe minoritaire, et les négatifs (Y=0) sont la classe majoritaire. La classe minoritaire correspond souvent aux individus positifs, car la survenance de l’événement rare qui nous intéresse (la fraude, la panne, le décès…) est en général labellisée par Y=1.

Notons qu’il s’agit d’une pure convention ; il suffirait de prendre « Y = 1 s’il n’y a pas de fraude, Y = 0 s’il y a fraude » pour que la classe minoritaire corresponde aux observations négatives.

Nous utilisons dans cette série d’articles la convention “classe minoritaire = classe des positifs”, afin de standardiser les modèles présentés. Nous parlerons donc indifféremment d’individus minoritaires ou d’individus positifs.

Quels problèmes posent les données déséquilibrées ?

Le problème des données déséquilibrées se pose différemment selon les modèles. Nous présentons ici ses effets sur les modèles à base d’arbres, les modèles linéaires et les réseaux de neurones. Et nous détaillons le cas des algorithmes par arbres, qui permet de bien illustrer les difficultés rencontrées.

Modèles à base d’arbres

Intéressons-nous d’abord aux arbres de décision comme les CART (Classification And Regression Trees) et à leurs améliorations à partir des méta-algorithmes de Bagging (ce qui donne la Random Forest) et le Boosting (ce qui donne le Gradient Boosting). Ces algorithmes peuvent être réunis sous l’appellation “algorithmes à base d’arbres” (tree-based learners).

En présence de données déséquilibrées, un modèle à base d’arbres a un biais faible et une variance élevée [1]. Les arbres vont en effet avoir tendance à surapprendre (overfit) : ils se situent dans un espace globalement pur (la majorité de l’espace ne contient que des observations négatives) avec quelques régions d’impureté très localisées (là où se trouvent les positifs). Ils peuvent donc facilement réduire leur biais en délimitant strictement les observations minoritaires. Dans l’exemple ci-dessous, le CART parvient à isoler parfaitement les positifs en surapprenant les données. Il prédit une probabilité de 1 à l’intérieur des rectangles verts et de 0 en dehors, et atteint ainsi une performance maximale sur la base Train (AUC Precision-Recall de 100%). 

Imbalanced data Machine Learning Apprentissage des données train

Figure 1. Apprentissage des données Train. L’arbre (CART) surapprend et isole parfaitement les individus positifs. L’AUC Precision-Recall sur la base Train est donc de 100% (l’AUC ROC aussi).

Qu’en est-il sur la base Test ?

Observons le résultat du modèle sur la base Test :

Imbalanced data Machine Learning Prédiction sur données test

Figure 2. Prédiction sur données Test. Le modèle a surappris les données (overfitting) et n’obtient qu’un AUC Precision-Recall de 5%.

Les observations positives de la base Test se situent dans la même région – le signal est bien cohérent entre Train et Test – mais majoritairement hors des zones étroites définies par le modèle, générant des faux négatifs. A l’inverse, des observations négatives se trouvent dans ces zones, générant des faux positifs. La performance chute donc fortement (AUC Precision-Recall de 5%) : on obtient une variance élevée (100% sur Train vs 5% sur Test), caractéristique du surapprentissage.

Solution « naïve » :  régularisation forte

Il est possible de réduire le surapprentissage :

  • En régularisant plus fortement chaque arbre (réduire max_depth, augmenter min_samples_split, min_impurity_decrease, max_leaf_nodes [2]…).
  • En perturbant davantage le bagging pour la random forest (réduire max_samples et max_features [3]… )
  •  En perturbant davantage le boosting pour le gradient boosting (réduire subsample, max_features et learning_rate [4]…).

Cependant si le signal est complexe, une forte régularisation (regularization) conduira à une performance très limitée. Dans l’exemple ci-dessous, restreindre la profondeur de l’arbre permet de réduire sa variance, mais au prix d’une simplification trop grande. On tente d’approximer avec un rectangle un signal qui a une forme d’ellipse, ce qui est sous-optimal.

Imbalanced data Machine Learning Apprentissage régularisé données Train

Figure 3. Apprentissage régularisé de Train. L’arbre fortement contraint (max_depth = 4 ici) généralise en n’identifiant qu’une seule région. Il obtient un AUC Precision-Recall de 20%, qui reste sous-optimal.

Imbalanced data Machine Learning Prédiction du modèle régularisé sur Test

Figure 4. Prédiction du modèle régularisé sur Test. La performance sur Test est proche de celle obtenue sur Train (faible variance), avec un AUC Precision-Recall de 16%.

Modèles linéaires

Un modèle linéaire comme une régression logistique (logistic regression) parviendra difficilement à modéliser de telles données : si les observations minoritaires sont trop peu nombreuses, la maximisation de la vraisemblance (likelihood maximisation) conduira généralement à prédire une surface plane, c’est-à-dire à donner une probabilité uniforme pour tous les individus. En effet, si le modèle tente de déformer cette surface pour capter le signal des positifs, l’augmentation des résidus (i.e. des erreurs de prédiction) sur les négatifs dépassera la diminution des résidus sur les positifs, ceux-ci étant trop peu nombreux.

Ainsi dans notre exemple de fraude, une régression logistique aboutira généralement à prédire une probabilité de fraude de 0.1% à toutes les observations (à moins que le signal soit très simple à identifier). La performance sur la base Train est alors celle d’un modèle aléatoire (random model) : AUC ROC de 50%, AUC Precision-Recall de 0.1% (égale au taux de positifs dans la base). Nous obtenons un classifieur avec un biais maximal. La variance de ce classifieur est, elle, nulle puisque la performance d’un modèle aléatoire est la même sur les données Train et Test.

Réseaux de neurones

De même que les algorithmes présentés ci-dessus, les réseaux de neurones (neural networks) sont biaisés en faveur de la classe majoritaire (i.e. la très grande majorité de l’espace sera prédite comme ayant une probabilité nulle de survenance d’un individu minoritaire), et dans les cas extrêmes ignorent complètement les individus minoritaires.

Une étude approfondie de 2019 (Survey on deep learning with class imbalance [5]) montre que la recherche sur l’apprentissage de données déséquilibrées en deep learning est restée à ce jour très limitée, les travaux empiriques disponibles portant essentiellement sur la computer vision avec des réseaux convolutionnels (convolutional neural networks).

L’étude montre que certaines méthodes classiques du machine learning (présentées ci-dessous) sont d’intérêt pour le deep learning, comme le rééchantillonnage et l’apprentissage sensible aux coûts. D’autres méthodes qui exploitent les spécificités des réseaux de neurones présentent également un potentiel d’amélioration.

Une étude de 2021 propose une nouvelle approche dont les résultats expérimentaux sont prometteurs. L’algorithme proposé, MetaBalance [6], s’appuie sur le cadre du Model-Agnostic Meta-Learning et utilise des stratégies d’échantillonnage différentes au sein de l’inner-loop et de l’outer-loop, ce qui permet de réduire le surapprentissage des individus minoritaires.

Quelles métriques utiliser pour des données déséquilibrées ?

Rappelons d’abord qu’il ne faut pas utiliser l’accuracy sur des données déséquilibrées ! Pour optimiser l’accuracy dans notre exemple de fraude, il suffirait de prédire toutes les transactions comme normales (Y=0) pour obtenir 99.9% d’accuracy. Un modèle aussi performant qu’inutile.

Il est plus raisonnable, si l’on veut conserver une métrique très courante, de retenir l’AUC ROC – Area Under the ROC Curve. Et l’état de l’art est à notre sens d’utiliser l’AUC Precision-Recall, qui est plus informatif que l’AUC ROC lorsque les données sont déséquilibrées [7]. Il arrive, lors de l’optimisation du modèle, de voir l’AUC PR évoluer quand l’AUC ROC reste figé, ce qui abonde dans le sens d’une moindre informativité de ce dernier.

Enfin, si l’on a une idée claire de la précision ou du recall nécessaires pour l’application opérationnelle de son modèle, on peut choisir d’optimiser directement ces métriques (par exemple optimiser la précision sous contrainte de recall).

Pour plus d’informations, vous pouvez consulter nos articles consacrés aux métriques de classification.

Comment utiliser les données déséquilibrées en Machine Learning ?

La correction des déséquilibres a généré une littérature abondante depuis le début des années 2000, et de nombreuses méthodes sont implémentées et disponibles, sur Python comme sur R. Ces méthodes peuvent agir à 3 niveaux :  au niveau des données (data-level solutions), au niveau des algorithmes (algorithm-level solutions), ou au niveau de l’erreur de classification.

Data-level solutions

Ces solutions consistent à opérer un rééchantillonnage des données utilisées pour l’entraînement des algorithmes de Machine Learning. Ceci vise un rééquilibrage des classes, pour faciliter l’apprentissage. Trois méthodes principales existent :

  • Le sous-échantillonnage aléatoire (random undersampling, RUS) des observations majoritaires. Cet undersampling peut être global : on retire aléatoirement x% des observations majoritaires. Il peut aussi être spécifique, avec des méthodes de clustering-based undersampling [8] ou d’undersampling des observations frontalières [9].
  • Le sur-échantillonnage aléatoire (random oversampling, ROS) des observations minoritaires. On tire au hasard des individus minoritaires que l’on rajoute aux données. Les individus minoritaires se voient ainsi « clonés » de multiples fois, raison pour laquelle cette méthode est aussi appelée Replicative oversampling. Elle est peu efficace pour les arbres car ils continuent à surapprendre ces points sans généraliser, mais elle peut fonctionner pour un modèle linéaire comme une régression logistique.
  • Le sur-échantillonnage synthétique (SMOTE pour Synthetic Minority Oversampling Technique) est une méthode plus avancée, qui produit des observations minoritaires ressemblantes mais distinctes de celles déjà existantes. Pour plus de précisions, vous pouvez consulter notre article dédié au SMOTE.

Jusqu’à quel point faut-il rééquilibrer les données ? La réponse dépend fortement de la complexité des données et du modèle utilisé, mais il n’est pas nécessaire de rétablir un équilibre parfait 50%/50% entre les classes. En ordre de grandeur, un ratio de 5-10% d’observations minoritaires est souvent suffisant pour les modèles par arbres. La meilleure méthode consiste à optimiser le taux d’undersampling et/ou d’oversampling en même temps que les hyperparamètres du modèle.

Notons enfin qu’il ne faut jamais échantillonner les données de Validation ou de Test. Ce point est précisé dans l’article suivant.

Algorithm-level solutions

Certaines méthodes s’appuient sur les caractéristiques propres des algorithmes pour développer des solutions au déséquilibre des données. Voici les principales méthodes disponibles :

  • Le rééchantillonnage interne au sein du Bagging, implémenté dans la fonction BalancedBaggingClassifier du package imbalanced-learn sous Python [10]. Cette méthode exploite l’échantillonnage aléatoire des données à chaque itération pour rééquilibrer les données. Elle récupère au cours de l’échantillonnage une proportion d’individus minoritaires supérieure à leur proportion réelle, qui est paramétrable.Le Bagging étant un méta-algorithme agnostique au modèle utilisé, cette méthode peut être employée en “enveloppe” de n’importe quel algorithme de classification.Le package Imbalanced-learn propose aussi une fonction BalancedRandomForestClassifier. Cette fonction revient à utiliser la fonction BalancedBaggingClassifier sur un arbre de décision (DecisionTreeClassifier) mais permet de conserver l’ensemble des fonctionnalités propres à la fonction RandomForestClassifier (comme le warm_start).
  • Le rééchantillonnage interne au sein du Boosting, implémenté dans la fonction RUSBoostClassifier. L’algorithme RUSBoost [10] repose sur le même principe de rééquilibrage au cours de l’échantillonnage des données à chaque itération.
  • La sur-pondération globale des observations minoritaires dans l’apprentissage :
    • Via le gradient (boosting) : c’est le rôle du paramètre scale_pos_weight dans XGBoost, qui permet de donner davantage de poids aux observations minoritaires.
    • Via le Gini (bagging) dans la Weighted Random Forest [11]. C’est le rôle du paramètre class_weight de RandomForestClassifier, qui accroît le poids des classes minoritaires dans le calcul de pureté lors de la recherche du meilleur split (split-finding).

Cost-sensitive solutions

Le cost-sensitive learning (apprentissage sensible aux coûts) [12] est un type d’apprentissage qui prend en compte le coût des erreurs de classification (misclassification costs). Appliqué aux données déséquilibrées et en conservant la convention “individus minoritaires = individus positifs”, cette approche consiste à accorder un poids plus grand aux faux négatifs (les positifs qui sont prédits négatifs) qu’aux faux positifs (les négatifs qui sont prédits positifs) lors de l’apprentissage. Ainsi le modèle est davantage incité à prendre en compte les individus minoritaires qu’il prédit mal.

Cette approche est souvent confondue avec les méthodes de sur-pondération globales présentées ci-dessus. Elle est pour autant bien différente, car elle accroît la pondération des positifs mal classés, là où les méthodes globales accroissent indifféremment la pondération de tous les individus positifs.

Quelle méthode choisir ?

Il est difficile de faire émerger un consensus de la littérature, qui se contredit fréquemment. Les articles de recherche rendent de fait souvent la comparaison difficile, car ils :

  • Font appel à des jeux de données de tailles variables (de l’ordre du millier au million de lignes selon les articles), avec des imbalance ratios différents et un signal plus ou moins complexe.
  • Font appel à des modèles différents, parfois sans optimiser les hyperparamètres de ces modèles.
  • N’optimisent pas toujours les méthodes qu’ils utilisent. On peut ainsi trouver un article sur une méthode d’undersampling, qui se compare avec un SMOTE sans optimiser les hyperparamètres de ce dernier. On obtient sans surprise une meilleure performance de la méthode d’undersampling…
  • Utilisent des métriques qui ne sont pas assez fiables. Ceci est en particulier vrai de certains articles de blog, qui utilisent un seuil fixe (valeur par défaut de 50% ou autre) pour calculer leur matrice de confusion et les indicateurs qui en découlent (precision, sensitivity/recall, specificity, F1-score…). Les résultats présentés de cette façon n’ont en général aucune valeur.

Il faut donc conserver un esprit critique sur les publications autour des données déséquilibrées et ne pas tirer de conclusion définitive à partir d’un article, surtout s’il est testé sur un seul jeu de données, n’optimise pas les méthodes et modèles qu’il emploie ou, pire, calcule des performances peu fiables.

Les cas simples où un random undersampling peut suffire

Si la classe majoritaire est en grand nombre, pourquoi ne pas simplement réduire ce nombre? La réponse à cette question dépend de trois critères : le volume de vos données, le taux de déséquilibre, et la complexité du signal. Quelques repères pour réfléchir à partir de ces critères :

  1. Le volume des données : plus ce volume est important, plus le random undersampling peut être intéressant. Supposons dans notre modèle de fraude que nous disposions d’un milliard de transactions. Nous avons 1 million de fraudes (0.1%), et 999 millions de transactions normales. Sur un tel volume de transactions normales, la loi des grands nombres s’applique et il est possible de fortement sous-échantillonner sans modifier la structure des données. En échantillonnant 1% des observations majoritaires, on obtient une base avec 9.99 millions de négatifs et 1 million de positifs, soit 9% d’observations positives. Ce qui est un grand progrès à moindre coût.
    Cette approche est moins intéressante en deep learning, où les algorithmes ont besoin de volumes importants de données pour apprendre.
  2. Le taux de déséquilibre : si les données sont faiblement déséquilibrées (5%/95% par exemple), on peut faire un random undersampling léger (par exemple retirer un quart des observations majoritaires pour atteindre un taux d’observations minoritaires de 8%). Le risque de dénaturer les données reste modéré du fait qu’on a peu sous-échantillonné, même si le volume des données est trop faible pour que la loi des grands nombres s’applique.
  3. La complexité du signal : ce critère est moins aisément quantifiable, mais peut s’appréhender par la connaissance que l’on a du domaine. Plus votre signal est complexe, et plus un sous-échantillonnage qui ne respecte pas la loi des grands nombres lui sera préjudiciable. A l’inverse, si vous savez que votre signal est assez simple, sous-échantillonner “brutalement” est une option. Si de plus votre intention est de faire un modèle simple (une régression logistique par exemple), alors l’undersampling est envisageable.

Dans les autres cas, quelle méthode choisir ?

Nous l’avons vu, les méthodes pour apprendre à partir de données déséquilibrées sont très nombreuses et plus ou moins complexes. Les résultats de recherche ne permettant pas de trancher, il nous semble utile de suivre les lignes directrices suivantes :

  • Ne pas retenir automatiquement la méthode la plus complexe et attractive.
  • Utiliser une méthode que l’on maîtrise bien : l’algorithme SMOTE est l’exemple parfait d’une méthode qui peut faire plus de mal que de bien si elle est utilisée de façon inadaptée. Nous consacrons trois articles au sein de cette série à l’algorithme SMOTE, qui est puissant.
  • Certaines méthodes peuvent être combinées. On peut par exemple associer un Random undersampling et un SMOTE. La meilleure solution est alors d’optimiser globalement le pipeline « undersampling + SMOTE + Modèle », en traitant le taux d’undersampling et les paramètres du SMOTE comme des hyperparamètres de ce pipeline global, au même titre que ceux du modèle. On peut ensuite optimiser ce pipeline avec une méthode d’optimisation comme un Random Search ou un Bayesian Search.

En général on peut combiner une méthode data-level + une méthode algorithm-level + une technique de cost-sensitive learning. Mais attention à la multiplication des paramètres à optimiser !

Conclusion

Les méthodes usuelles de Machine Learning ont des difficultés à bien modéliser les données déséquilibrées. Elles ont en effet tendance à surapprendre (overfit) les observations minoritaires, ce qui conduit à un faible biais mais à une forte variance.  La régularisation est alors une solution naïve qui réduit la variance mais conduit à une performance très limitée.

Les données déséquilibrées nécessitent des métriques d’évaluation adaptées. Les métriques s’appuyant sur la précision et le recall comme l’AUC Precision-Recall sont les plus pertinentes.

Il existe trois familles de méthodes pour apprendre à partir de données déséquilibrées : des méthodes de data sampling qui modifient les données brutes d’apprentissage, des méthodes d’apprentissage spécifiques, avec rééchantillonnage interne ou re-pondération des individus, et des méthodes d’apprentissage sensibles aux coûts.

Pour choisir une méthode, il faut rester critique dans les résultats issus de la recherche et réfléchir à partir de ses données. Dans certains cas un random undersampling peut suffire : grand volume de données, faible déséquilibre, signal peu complexe. Dans les autres cas, de nombreuses méthodes existent et peuvent se combiner. Attention cependant à bien maîtriser les effets de ces méthodes sur l’apprentissage de votre modèle, en particulier si l’interprétabilité et la robustesse de ce dernier sont des points clés de votre projet.

Cette série se poursuit avec trois articles consacrés à un algorithme phare : le SMOTE.

Références :

[1]    N. V. Chawla, K. W. Bowyer, L. O. Hall, et W. P. Kegelmeyer, « SMOTE: Synthetic Minority Over-sampling Technique », J. Artif. Intell. Res., vol. 16, p. 321‑357, juin 2002.

[2]    « sklearn.tree.DecisionTreeClassifier », scikit-learn. https://scikit-learn/stable/modules/generated/sklearn.tree.DecisionTreeClassifier.html (consulté le 27 janvier 2022).

[3]    « sklearn.ensemble.RandomForestClassifier », scikit-learn. https://scikit-learn/stable/modules/generated/sklearn.ensemble.RandomForestClassifier.html (consulté le 29 novembre 2021).

[4]    « sklearn.ensemble.GradientBoostingClassifier », scikit-learn. https://scikit-learn/stable/modules/generated/sklearn.ensemble.GradientBoostingClassifier.html (consulté le 29 novembre 2021).

[5]    J. M. Johnson et T. M. Khoshgoftaar, « Survey on deep learning with class imbalance », J. Big Data, vol. 6, no 1, p. 27, déc. 2019, doi: 10.1186/s40537-019-0192-5.

[6]    A. Bansal, M. Goldblum, V. Cherepanova, A. Schwarzschild, C. B. Bruss, et T. Goldstein, « MetaBalance: High-Performance Neural Networks for Class-Imbalanced Data », ArXiv210609643 Cs, juin 2021, Consulté le: 28 janvier 2022. [En ligne]. Disponible sur: http://arxiv.org/abs/2106.09643

[7]    T. Saito et M. Rehmsmeier, « The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets », PLOS ONE, vol. 10, no 3, p. e0118432, mars 2015.

[8]    W.-C. Lin, C.-F. Tsai, Y.-H. Hu, et J.-S. Jhang, « Clustering-based undersampling in class-imbalanced data », Inf. Sci., vol. 409‑410, p. 17‑26, oct. 2017, doi: 10.1016/j.ins.2017.05.008.

[9]    N. Japkowicz, « The Class Imbalance Problem: Significance and Strategies », in In Proceedings of the 2000 International Conference on Artificial Intelligence (ICAI, 2000, p. 111‑117.

[10]    C. Seiffert, T. M. Khoshgoftaar, J. Van Hulse, et A. Napolitano, « RUSBoost: A Hybrid Approach to Alleviating Class Imbalance », IEEE Trans. Syst. Man Cybern. – Part Syst. Hum., vol. 40, no 1, p. 185‑197, janv. 2010, doi: 10.1109/TSMCA.2009.2029559.

[11]    C. Chen, « Using Random Forest to Learn Imbalanced Data », p. 12.

[12]    C. X. Ling et V. S. Sheng, « Cost-Sensitive Learning », in Encyclopedia of Machine Learning, C. Sammut et G. I. Webb, Éd. Boston, MA: Springer US, 2010, p. 231‑235. doi: 10.1007/978-0-387-30164-8_181.

 

Crédit image : Joanna Ławniczak – Dribble

Sommaire

Voir aussi

Voir aussi

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *