Weiß jemand, ob das Folgende beschrieben wurde und (wie auch immer), ob es sich um eine plausible Methode zum Lernen eines Vorhersagemodells mit einer sehr unausgeglichenen Zielvariablen handelt?
In CRM-Anwendungen des Data Mining wird häufig nach einem Modell gesucht, bei dem das positive Ereignis (Erfolg) im Vergleich zur Mehrheit (negative Klasse) sehr selten ist. Zum Beispiel kann es 500.000 Fälle geben, in denen nur 0,1% der positiven Interessenklasse angehören (z. B. wenn der Kunde gekauft hat). Um ein Vorhersagemodell zu erstellen, besteht eine Methode darin, die Daten abzutasten, wobei Sie alle positiven Klasseninstanzen und nur eine Stichprobe der negativen Klasseninstanzen aufbewahren, sodass das Verhältnis von positiver zu negativer Klasse näher bei 1 liegt (möglicherweise 25%). zu 75% positiv zu negativ). Überabtastung, Unterabtastung, SMOTE usw. sind alle Methoden in der Literatur.
Ich bin gespannt darauf, obige grundlegende Sampling-Strategie mit dem Absacken der negativen Klasse zu kombinieren.
- Behalte alle positiven Klasseninstanzen (zB 1.000)
- Probieren Sie die negativen Klasseninstanzen aus, um eine ausgewogene Stichprobe zu erstellen (z. B. 1.000).
- Passen Sie das Modell
- Wiederholen
Hat jemand schon mal davon gehört? Das Problem ohne Bagging ist, dass bei einer Stichprobe von nur 1.000 Instanzen der negativen Klasse bei 500.000 der Prädiktorraum knapp wird und Sie möglicherweise keine Darstellung möglicher Prädiktorwerte / -muster haben. Bagging scheint hier Abhilfe zu schaffen.
Ich habe rpart angeschaut und nichts "bricht", wenn eine der Stichproben nicht alle Werte für einen Prädiktor enthält (bricht nicht, wenn dann Instanzen mit diesen Prädiktorwerten vorhergesagt werden:
library(rpart)
tree<-rpart(skips ~ PadType,data=solder[solder$PadType !='D6',], method="anova")
predict(tree,newdata=subset(solder,PadType =='D6'))
Irgendwelche Gedanken?
UPDATE: Ich habe einen Datensatz aus der realen Welt (Marketing Direct Mail Response-Daten) genommen und zufällig in Training und Validierung aufgeteilt. Es gibt 618 Prädiktoren und 1 binäres Ziel (sehr selten).
Training:
Total Cases: 167,923
Cases with Y=1: 521
Validation:
Total Cases: 141,755
Cases with Y=1: 410
Ich habe alle positiven Beispiele (521) aus dem Trainingssatz und eine Zufallsstichprobe von negativen Beispielen derselben Größe für eine ausgewogene Stichprobe genommen. Ich passe einen Teilbaum an:
models[[length(models)+1]]<-rpart(Y~.,data=trainSample,method="class")
Ich habe diesen Vorgang 100 Mal wiederholt. Dann wurde die Wahrscheinlichkeit von Y = 1 für die Fälle der Validierungsstichprobe für jedes dieser 100 Modelle vorhergesagt. Ich habe einfach die 100 Wahrscheinlichkeiten für eine endgültige Schätzung gemittelt. Ich habe die Wahrscheinlichkeiten des Validierungssatzes dekiliert und in jedem Dekil den Prozentsatz der Fälle berechnet, in denen Y = 1 ist (die traditionelle Methode zur Schätzung der Rangordnungsfähigkeit des Modells).
Result$decile<-as.numeric(cut(Result[,"Score"],breaks=10,labels=1:10))
Hier ist die Leistung:
Um zu sehen, wie dies im Vergleich zu keinem Absacken der Fall ist, habe ich die Validierungsstichprobe nur mit der ersten Stichprobe vorhergesagt (alle positiven Fälle und eine Zufallsstichprobe derselben Größe). Es ist klar, dass die erfassten Daten zu dünn oder zu stark angepasst waren, um in der Hold-out-Validierungsstichprobe wirksam zu sein.
Hinweis auf die Wirksamkeit der Absackroutine bei seltenen Ereignissen und großen n und p.
quelle