Formation d'un arbre de décision contre des données déséquilibrées


43

Je suis novice dans l'exploration de données et j'essaie de former un arbre de décision par rapport à un ensemble de données extrêmement déséquilibré. Cependant, j'ai des problèmes avec une faible précision prédictive.

Les données comprennent les étudiants qui étudient les cours, et la variable de classe est le statut du cours qui a deux valeurs - Retiré ou Actuel.

  • Âge
  • Ethnicité
  • Le genre
  • Cours
    ...
  • Statut du cours

Dans le jeu de données, il y a beaucoup plus d'instances qui sont actuelles que retirées. Les instances retirées ne représentent que 2% du nombre total d'instances.

Je veux être capable de construire un modèle capable de prédire la probabilité qu'une personne se désiste à l'avenir. Cependant, lors du test du modèle avec les données d'entraînement, la précision du modèle est terrible.

J'ai eu des problèmes similaires avec les arbres de décision où les données sont dominées par une ou deux classes.

Quelle approche puis-je utiliser pour résoudre ce problème et créer un classificateur plus précis?


4
Une chose à considérer est de changer les termes de pénalité pour différents types de mauvais classement. Vous ne dites pas quel logiciel vous utilisez, mais je crois que tout bon logiciel d'arborescence doit inclure des moyens de le faire.
Peter Flom - Réintégrer Monica

Réponses:


62

C'est un problème intéressant et très fréquent en matière de classification - pas seulement dans les arbres de décision, mais dans pratiquement tous les algorithmes de classification.

Comme vous l'avez constaté de manière empirique, un ensemble de formations comprenant un nombre différent de représentants de l'une ou l'autre classe peut aboutir à un classificateur biaisé en faveur de la classe majoritaire. Appliqué à un ensemble de tests qui présente un déséquilibre similaire, ce classifieur génère une estimation de précision optimiste. Dans un cas extrême, le classificateur pourrait affecter chaque cas de test unique à la classe majoritaire, obtenant ainsi une précision égale à la proportion de cas de test appartenant à la classe majoritaire. C'est un phénomène bien connu en classification binaire (et il s'étend naturellement aux paramètres multi-classes).

Il s'agit d'un problème important, car un jeu de données déséquilibré peut conduire à des estimations de performances gonflées. Cela peut conduire à de fausses conclusions sur la signification avec laquelle l'algorithme a fonctionné mieux que le hasard.

La littérature sur l’apprentissage automatique sur ce sujet a essentiellement développé trois stratégies de solution.

  1. Vous pouvez rétablir l’équilibre sur le jeu d’entraînement en sous - échantillonnant la grande classe ou en sur- échantillonnant la petite classe, afin d’éviter tout biais de formation.

  2. Vous pouvez également modifier les coûts de la classification erronée, comme indiqué dans une réponse précédente, afin d'éviter tout biais.

  3. φ: =12(π++π-),π+π-

Précision vs précision équilibrée

Je recommanderais d’examiner au moins deux des approches ci-dessus conjointement. Par exemple, vous pouvez suréchantillonner votre classe minoritaire pour empêcher votre classificateur d’acquérir un biais en faveur de la classe majoritaire. Ensuite, lors de l’évaluation des performances de votre classificateur, vous pouvez remplacer la précision par la précision équilibrée. Les deux approches sont complémentaires. Lorsqu'ils sont appliqués ensemble, ils devraient vous aider à prévenir votre problème initial et à éviter de fausses conclusions.

Je serais heureux de publier quelques références supplémentaires à la littérature si vous souhaitez poursuivre sur ce sujet.


3
Broder - merci pour les informations détaillées. Cela a été vraiment utile! Au départ, j'ai essayé d'utiliser la fonctionnalité d'exploration de données dans SQL Server. Cependant, suivant votre conseil, je suis passé à l'aide de R. J'ai utilisé l'algorithme SMOTE pour rééquilibrer l'ensemble de données et j'ai essayé d'utiliser les arbres de décision et le SVM. Les DT offrent une précision équilibrée de 81%, et même meilleure avec le SVM. Une question cependant: devrais-je tester le modèle avec un ensemble de données contenant également des données rééquilibrées? Ou devrait-il être testé contre des données plus proches de l'original?
chrisb

2
C'est génial à entendre. En ce qui concerne votre question: vous ne pas voulez équilibrer vos données de test. Cela fausserait votre évaluation de la performance puisque vous testeriez deux exemples (dans le cas d'un suréchantillonnage) à deux reprises ou en omettiez quelques-uns (dans le cas d'un sous-échantillonnage). En résumé, vous souhaitez équilibrer votre ensemble d’entraînement (séparément dans chaque pli de validation croisée), puis effectuer un test sur les données de test non modifiées (potentiellement déséquilibrées).
Kay Brodersen

Merci Broder. Faire cela met une image différente sur les choses. La précision équilibrée chute à environ 56%. La sensibilité chute à 17% sur mon meilleur modèle (correspondant à la classe dont j'ai besoin pour obtenir de meilleures prévisions). Je suppose que cela a du sens car la classe suréchantillonnée est cette classe, donc ces exemples seront comptés plusieurs fois. J'essaierai d'augmenter l'équilibrage du jeu de données d'entraînement pour voir si cela fait une différence.
chrisb

Après l'avoir testé avec différentes proportions de données équilibrées, la meilleure précision que je puisse obtenir est avec Ada Boost à 60%. J'ai du mal à déterminer ce qui est «bon». Mon objectif principal est de prédire les étudiants qui peuvent se retirer de leur cours. Avec Withdraw étant ma classe positive, j'ai essayé de maximiser mon nombre de vrais positifs (c'est-à-dire d'augmenter la sensibilité). En rééquilibrant les données, cela se fait au détriment du nombre de faux négatifs. 60% ne semble pas beaucoup mieux que le hasard pour moi - mais je n'ai pas de base pour ce qui est "bon" dans ce cas.
chrisb

2
@ chrisb, c'est un commentaire légèrement (!) tardif. Sur une tangente, vous pouvez essayer la régression des dangers proportionnels de Cox ( cran.r-project.org/doc/contrib/Fox-Companion/… ) pour modéliser la survie de vos étudiants. Vous n'avez peut-être pas besoin d'un prélèvement ou d'un échantillonnage excessif.
Zhubarb

8

Les quatre idées suivantes peuvent vous aider à résoudre ce problème.

  1. 2*Precjesjeon*RecunellPrecjesjeon+Recunell

  2. Utilisez le paramètre 'prior' dans les arbres de décision pour informer l'algorithme de la fréquence antérieure des classes de l'ensemble de données, c'est-à-dire s'il y a 1 000 positifs dans un ensemble de 1 000 000 de données prior = c(0.001, 0.999)(en R).

  3. Utilisez l'argument 'pondération' dans la fonction de classification que vous utilisez pour pénaliser sévèrement l'algorithme en cas de classification erronée des rares cas positifs.

  4. Utilisez l'argument 'coût' dans certains algorithmes de classification - par exemple, rpartdans R - pour définir les coûts relatifs des erreurs de classification de vrais positifs et de vrais négatifs. Naturellement, vous devriez définir un coût élevé pour la classification erronée de la classe rare.

Je ne suis pas en faveur du suréchantillonnage, car il introduit des observations dépendantes dans l'ensemble de données, ce qui va à l'encontre des hypothèses d'indépendance formulées à la fois dans les statistiques et dans l'apprentissage automatique.


2

J'ai donné une réponse dans le sujet récent :

Ce que nous faisons, c'est choisir un échantillon avec des proportions différentes. Dans l'exemple susmentionné, il s'agirait de 1 000 cas de "OUI" et, par exemple, de 9 000 cas de "NON". Cette approche donne des modèles plus stables. Cependant, il doit être testé sur un échantillon réel (celui comportant 1 000 000 lignes).

Non seulement donne cette approche plus stable, mais les modèles sont généralement meilleurs, en ce qui concerne les mesures d'élévation.

Vous pouvez le rechercher comme "suréchantillonnage dans les statistiques", le premier résultat est plutôt bon: http://www.statssa.gov.za/isi2009/ScientificProgramme/IPMS/1621.pdf


1

Ajout de la réponse de @Kay à la première stratégie de solution: le suréchantillonnage minoritaire synthétique ( SMOTE ) fait généralement mieux que le sous-échantillonnage ou le sur-échantillonnage de mon expérience, car je pense que cela crée en quelque sorte un compromis entre les deux. Il crée des échantillons synthétiques de la classe minoritaire à l'aide des points de données tracés sur l'espace de prédicteurs multivariés et prend plus ou moins les points médians entre les points adjacents de cet espace pour créer de nouveaux points synthétiques et par conséquent équilibrer les deux tailles de classe. (pas sûr des points médians, détails de l'algorithme ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.