Ensachage avec suréchantillonnage pour les modèles prédictifs d'événements rares


13

Est-ce que quelqu'un sait si ce qui suit a été décrit et (de toute façon) si cela ressemble à une méthode plausible pour apprendre un modèle prédictif avec une variable cible très déséquilibrée?

Souvent dans les applications CRM de data mining, nous chercherons un modèle où l'événement positif (succès) est très rare par rapport à la majorité (classe négative). Par exemple, je peux avoir 500 000 cas où seulement 0,1% sont de la classe d'intérêt positive (par exemple, le client a acheté). Ainsi, afin de créer un modèle prédictif, une méthode consiste à échantillonner les données par lesquelles vous conservez toutes les instances de classe positives et uniquement un échantillon des instances de classe négatives afin que le rapport de la classe positive à la classe négative soit plus proche de 1 (peut-être 25% à 75% de positif à négatif). Le suréchantillonnage, le sous-échantillonnage, SMOTE, etc. sont toutes des méthodes dans la littérature.

Ce qui m'intéresse, c'est de combiner la stratégie d'échantillonnage de base ci-dessus mais avec l'ensachage de la classe négative.

  • Conserver toutes les instances de classe positives (par exemple 1 000)
  • Échantillonnez les instances de classe négatives afin de créer un échantillon équilibré (par exemple 1 000).
  • Adapter le modèle
  • Répéter

Quelqu'un a entendu parler de ça avant? Le problème qu'il semble sans ensachage est que l'échantillonnage de seulement 1 000 instances de la classe négative lorsqu'il y en a 500 000 est que l'espace des prédicteurs sera clairsemé et vous risquez de ne pas avoir une représentation des valeurs / modèles de prédicteurs possibles. L'ensachage semble aider cela.

J'ai regardé rpart et rien ne "casse" quand l'un des échantillons n'a pas toutes les valeurs pour un prédicteur (ne se casse pas lors de la prédiction des instances avec ces valeurs de prédicteur:

library(rpart)
tree<-rpart(skips ~ PadType,data=solder[solder$PadType !='D6',], method="anova")
predict(tree,newdata=subset(solder,PadType =='D6'))

Des pensées?

MISE À JOUR: J'ai pris un ensemble de données du monde réel (données de réponse de marketing direct) et je l'ai partitionné au hasard en formation et validation. Il existe 618 prédicteurs et 1 cible binaire (très rare).

Training:
Total Cases: 167,923
Cases with Y=1: 521

Validation:
Total Cases: 141,755
Cases with Y=1: 410

J'ai pris tous les exemples positifs (521) de l'ensemble d'entraînement et un échantillon aléatoire d'exemples négatifs de la même taille pour un échantillon équilibré. J'adapte un arbre rpart:

models[[length(models)+1]]<-rpart(Y~.,data=trainSample,method="class")

J'ai répété ce processus 100 fois. Puis a prédit la probabilité de Y = 1 sur les cas de l'échantillon de validation pour chacun de ces 100 modèles. J'ai simplement fait la moyenne des 100 probabilités pour une estimation finale. J'ai décilé les probabilités sur l'ensemble de validation et calculé dans chaque décile le pourcentage de cas où Y = 1 (la méthode traditionnelle pour estimer la capacité de classement du modèle).

Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10)) 

Voici la performance: entrez la description de l'image ici

Pour voir comment cela se comparait à l'absence d'ensachage, j'ai prédit l'échantillon de validation avec le premier échantillon uniquement (tous les cas positifs et un échantillon aléatoire de la même taille). De toute évidence, les données échantillonnées étaient trop clairsemées ou trop ajustées pour être efficaces sur l'échantillon de validation retenu.

Suggérant l'efficacité de la routine d'ensachage en cas d'événement rare et de grand n et p.

entrez la description de l'image ici

Réponses:


7

À l'exception de l'inclusion des mêmes exemples de classe positive dans chaque sac, il s'agit du S ^ 3Bagging tel que décrit dans S ^ 3Bagging: méthode d'induction du classificateur rapide avec sous-échantillonnage et ensachage . (Je n'ai pas revu cet article en profondeur, je l'ai juste survolé.)

Je ne vois rien de mal en théorie à votre approche, bien que j'aie vu beaucoup plus fréquemment un sous-échantillonnage combiné à un boosting qu'à un bagging.

Cela ne répond peut-être pas exactement à votre question, mais un excellent document sur les différentes façons de traiter les données déséquilibrées est Apprendre des données déséquilibrées . Il semble que l'apprentissage sensible aux coûts soit plus approprié dans votre cas. Puisque vous utilisez des forêts de décision, la section 3.2.3 Arbres de décision sensibles au coût serait probablement utile. Il est dit,

En ce qui concerne les arbres de décision, l'ajustement sensible au coût peut prendre trois formes: premièrement, des ajustements sensibles au coût peuvent être appliqués au seuil de décision; deuxièmement, des considérations sensibles aux coûts peuvent être accordées aux critères de répartition à chaque nœud; et enfin, des schémas d'élagage sensibles au coût peuvent être appliqués à l'arbre

Des ajustements sensibles au coût du seuil de décision signifient essentiellement choisir votre seuil de décision en fonction des performances du ROC ou de la courbe de rappel de précision. Les performances de la RPC en particulier sont robustes aux données déséquilibrées.

Les critères de répartition sensibles aux coûts se résument à changer votre fonction d'impureté pour gérer les données déséquilibrées. Le document mentionné ci-dessus déclare,

Dans [63], trois fonctions d'impureté spécifiques, Gini, Entropy et DKM, se sont avérées avoir amélioré l'insensibilité aux coûts par rapport à la ligne de base de précision / taux d'erreur. De plus, ces expériences empiriques ont également montré que l'utilisation de la fonction DKM produisait généralement des arbres de décision non élagués plus petits qui, au pire, fournissaient des précisions comparables à Gini et Entropy. Une base théorique détaillée expliquant les conclusions de ces résultats empiriques a ensuite été établie dans [49], qui généralise les effets de la croissance de l'arbre de décision pour tout choix de critères de crachat.

Quant à la taille,

Cependant, en présence de données déséquilibrées, les procédures d'élagage tendent à supprimer les feuilles décrivant le concept de minorité. Il a été démontré que même si l'élagage des arbres induit par des données déséquilibrées peut nuire aux performances, l'utilisation d'arbres non élagués dans de tels cas n'améliore pas les performances [23]. En conséquence, une attention a été accordée à l'amélioration de l'estimation de la probabilité de classe à chaque nœud pour développer des structures d'arbre de décision plus représentatives de sorte que l'élagage puisse être appliqué avec des effets positifs. Certains travaux représentatifs incluent la méthode de lissage de Laplace de l'estimation de probabilité et la technique de taille de Laplace [49].

[23] N. Japkowicz et S. Stephen, «Le problème de déséquilibre de classe: une étude systématique», Intelligent Data Analysis, vol. 6, non. 5, pages 429 à 449, 2002.

[49] C. Elkan, «Les fondements de l'apprentissage sensible aux coûts», Proc. Int'l Joint Conf. Intelligence artificielle, pp. 973-978, 2001.

[63] C. Drummond et RC Holte, «Exploiting the Cost (In) Sensitivity of Decision Tree Splitting Criteria», Proc. Int'l Conf. Machine Learning, p. 239-246, 2000.


0

C'est très intéressant. J'ai récemment un projet qui a une situation similaire où la validation sur les événements rares fonctionne bien tandis que la validation des non-événements dans la plage prédite la plus basse (telle que 0,0 - 0,1) s'est effectuée de manière instable d'un mois à l'autre. Les raisons derrière, comme vous l'avez mentionné, en raison de la grande population de non-événements, il est préférable d'inclure plus d'échantillons dans les ensembles de formation afin qu'il y ait suffisamment d'échantillons pour couvrir diverses combinaisons de variables.

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.