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
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 !