Comment gérer les problèmes de Classification déséquilibrée – Partie II

Temps de lecture : 3 minutes

Comment gérer les problèmes de Classification déséquilibrée
Partie II

Les méthodes pour lutter contre le déséquilibre des données

Après avoir détaillé les différents problèmes liés au déséquilibre des données et démontré que le choix de la bonne métrique de performance est essentiel pour l’évaluation de nos modèle, nous allons présenter une liste non-exhaustive des techniques utiles pour lutter contre ce type de problèmes.

1) Collecter davantage de données

Cela peut paraître simpliste, mais la collecte de données supplémentaires est presque toujours négligée et peu parfois s’avérer efficace.

Pouvez-vous collecter plus de données ? Prenez quelques minutes pour réfléchir à la possibilité de collecter davantage de données pour votre problème, cela pourrait éventuellement rééquilibrer vos classes à un degré variable.

2) Utiliser des méthodes de rééchantillonnage 

Vous pouvez modifier l’ensemble de données que vous utilisez avant d’entraîner votre modèle prédictif afin d’avoir des données plus équilibrées.

Cette stratégie est appelée rééchantillonnage et il existe deux méthodes principales que vous pouvez utiliser pour égaliser les classes : 

Le sur-échantillonnage : Oversampling et le sous-échantillonnage :Undersampling. 

Les méthodes d’Oversampling fonctionnent en augmentant le nombre d’observations de la (des) classe(s) minoritaire(s) afin d’arriver à un ratio classe minoritaire/ classe majoritaire satisfaisant.

 Les méthodes d’Undersampling fonctionnent en diminuant le nombre d’observations de la  (des) classe(s) majoritaire(s) afin d’arriver à un ratio classe minoritaire/ classe majoritaire satisfaisant. 

Sur Python, le package imblearn proposent un panel de méthodes de rééchantillonnage disponibles ici

Ces approches sont très faciles à mettre en œuvre et rapides à exécuter. Elles constituent un excellent point de départ.

Notre conseil: toujours essayer les deux approches sur tous vos ensembles de données déséquilibrées,  et vérifier si cela améliore vos métriques de performances choisies.

Privilégiez le sous-échantillonnage lorsque vous disposez de grands jeux de données : des dizaines ou des centaines de milliers de cas ou plus.

Privilégiez le sur-échantillonnage lorsque vous ne disposez pas de beaucoup de données :des dizaines de milliers ou moins.

Envisagez de tester différents ratios de classes. Par exemple, vous ne devez pas obligatoirement viser un ratio 1:1 dans un problème de classification binaire, essayez d’autres ratios.

3) La génération d’échantillons synthétiques

Il existe des algorithmes pour générer des échantillons synthétiques de manière automatique. Le plus populaire de ces algorithmes est SMOTE (pour Synthetic Minority Over-sampling Technique). Comme son nom l’indique, SMOTE est une méthode de sur-échantillonnage. Elle fonctionne en créant des échantillons synthétiques à partir de la classe minoritaire au lieu de créer de simples copies. Pour en savoir plus sur SMOTE, consultez l’article original.
L’algorithme ClusterCentroids est un algorithme d’Undersampling  qui utilise des méthodes de Clustering pour générer un certain nombre de centroïdes à partir des données d’origine, afin de perdre le moins d’information possible sur la classe majoritaire, lorsque celle-ci doit être réduite.
 

4) Repenser le problème

Parfois, les méthodes de rééchantillonnage ne sont pas assez efficaces, et dans ce cas il convient de repenser le problème. 

Il peut s’agir de l’algorithme utilisé qui ne convient pas à vos données. N’hésitez pas à en tester d’autres, combinés éventuellement aux méthodes de rééchantillonnage vues ci-dessus.

Les modèles d’ensemble à base d’arbres comme les RandomForest sont généralement plus adaptés aux données déséquilibrées.

Il est également possible de jouer avec les probabilités. Si l’on souhaite par exemple, pouvoir absolument prédire la grande majorité des churners potentiels, quitte à mal classer quelques non-churners, on peut modifier le seuil de probabilité au delà duquel les clients sont considérés comme churners.

Plus le seuil est bas, plus la précision de notre classe augmentera, mais le rappel diminuera.

 

5) Utiliser un modèle pénalisé

La classification pénalisée permet d’imposer un coût supplémentaire au modèle pour les erreurs de classification commises sur la classe minoritaire pendant la formation. Ces pénalités peuvent biaiser le modèle pour qu’il accorde plus d’attention à la classe minoritaire.

Dans la plupart des classes d’algorithmes de scikit-learn, il est possible de simplement utiliser le paramètre `class_weight`. Il permet de pénaliser les erreurs faites sur une classe par un nouveau poids. Plus le poids d’une classe est important, plus les erreurs sur cette classe sont pénalisées, et plus on lui donne de l’importance.

Les poids doivent être indiqués sous forme de dictionnaire, par exemple : `{0:1, 1:5}`, pour donner 5 fois plus de poids aux erreurs faites sur la classe 1. 

L’argument ` »balanced »` permet d’associer à chaque classe un poids inversement proportionnel à sa fréquence.

 

6) Utiliser des méthodes générant des sous-ensembles sous-échantillonnés 

Une autre solution proposée par le module  imblearn.ensemble, est l’utilisation de classes contenant des modèles d’ensembles comme le Boosting ou Bagging qui sont entraînés à chaque étape de l’algorithme sur un échantillon rééquilibré automatiquement entre les différentes classes.

Ces implémentations de modèles permettent de se passer de méthodes de rééchantillonnage avant l’entraînement, et de les appliquer de manière automatique à chaque sélection de données par l’algorithme.

7) Soyez créatifs 

Vous pouvez tester l’ensemble de ces techniques, les combiner, ou même penser à relabeliser les données de la classe majoritaire en sous-classes pour obtenir un problème de classification multi-classes plus équilibré.

Dans certains cas, vous pouvez également penser à utiliser d’autre méthodes de Machine Learning comme l’ Anomaly Detection ou l’ Active Learning.

Nous avons présenté un certain nombre de techniques, parmi lesquelles vous pourrez choisir lorsque vous serez amenés à travailler avec ce genre de données. N’hésitez pas à tester ces méthodes individuellement, et commencez par les plus simples !

Envie d’améliorer vos compétences pour réussir à construire des modèles performants et fiables à partir d’ensembles de données déséquilibrés? Découvrez tous nos modules d’apprentissage ! 

N’hésitez pas à nous contacter pour plus d’infos ! 

 
Uncategorized

Ethique ou Big Data

Comment faire prévaloir une question d’éthique en matière de données alors que la concurrence se veut mondiale ? Les européens doivent-ils se soumettre à une concurrence américaine et asiatique déloyale pour une question d’éthique ?

Lire plus »
Article XG Boost
Best Practices

XGBoost, grand gagnant des compétitions

XGBoost signifie eXtreme Gradient Boosting. Codé en C++, il est disponible dans à peu près tous les langages de programmations utiles en Machine Learning. Quels sont ses atouts ? Pourquoi remporte t-il si régulièrement les compétitions Kaggle ?

Lire plus »
Fermer le menu