Wie werden OOB und Verwirrungsmatrix für zufällige Gesamtstrukturen interpretiert?

35

Ich habe von jemandem ein R-Skript zum Ausführen eines zufälligen Gesamtstrukturmodells erhalten. Ich habe es geändert und mit einigen Mitarbeiterdaten ausgeführt. Wir versuchen, freiwillige Trennungen vorherzusagen.

Hier einige zusätzliche Informationen: Dies ist ein Klassifizierungsmodell, bei dem 0 = Mitarbeiter verblieben, 1 = Mitarbeiter gekündigt wurde. Wir sehen uns derzeit nur ein Dutzend Prädiktorvariablen an % des gesamten Datensatzes.

Ich starte das Modell mit verschiedenen Auswahlmöglichkeiten für mtry und ntree, habe mich aber für das Folgende entschieden. Die OOB beträgt 6,8% , was ich denke , ist gut, aber die Verwirrung Matrix scheint für die Vorhersage von Bedingungen eine andere Geschichte zu erzählen , da die Fehlerquote bei 92,79% recht hoch ist Bin ich recht in der Annahme , dass ich nicht verlassen können und nutzen dieses Modell , weil die hohe Fehlerrate für die Vorhersage von Begriffen? Oder gibt es etwas, das ich auch tun kann, um RF zu verwenden und eine geringere Fehlerrate für die Vorhersage von Begriffen zu erhalten?

 FOREST_model <- randomForest(theFormula, data=trainset, mtry=3, ntree=500, importance=TRUE, do.trace=100)
ntree      OOB      1      2
  100:   6.97%  0.47% 92.79%
  200:   6.87%  0.36% 92.79%
  300:   6.82%  0.33% 92.55%
  400:   6.80%  0.29% 92.79%
  500:   6.80%  0.29% 92.79%
> print(FOREST_model)

Call:
 randomForest(formula = theFormula, data = trainset, mtry = 3,      ntree = 500, importance = TRUE, do.trace = 100) 
               Type of random forest: classification
                     Number of trees: 500
No. of variables tried at each split: 3

        OOB estimate of  error rate: 6.8%
Confusion matrix:
     0  1 class.error
0 5476 16 0.002913328
1  386 30 0.927884615
> nrow(trainset)
[1] 5908
daniellopez46
quelle

Antworten:

20

Die Verwirrungsmatrix wird an einem bestimmten Punkt berechnet, der durch den Grenzwert für die Stimmen bestimmt wird. Abhängig von Ihren Anforderungen, dh einer besseren Genauigkeit (Reduzierung von Falsch-Positiven) oder einer besseren Empfindlichkeit (Reduzierung von Falsch-Negativen), können Sie einen anderen Cutoff bevorzugen.

Zu diesem Zweck empfehle ich, (i) eine ROC-Kurve , (ii) eine Rückrufgenauigkeit und (iii) eine Kalibrierungskurve zu zeichnen, um den für Ihre Zwecke am besten geeigneten Grenzwert auszuwählen. Alle diese Funktionen können mit den folgenden 2 Funktionen aus der ROCR R-Bibliothek (auch auf CRAN verfügbar ) problemlos aufgezeichnet werden :

pred.obj <- prediction(predictions, labels,...)
performance(pred.obj, measure, ...)

Beispielsweise:

rf <- randomForest (x,y,...);
OOB.votes <- predict (rf,x,type="prob");
OOB.pred <- OOB.votes[,2];

pred.obj <- prediction (OOB.pred,y);

RP.perf <- performance(pred.obj, "rec","prec");
plot (RP.perf);

ROC.perf <- performance(pred.obj, "fpr","tpr");
plot (ROC.perf);

plot  (RP.perf@alpha.values[[1]],RP.perf@x.values[[1]]);
lines (RP.perf@alpha.values[[1]],RP.perf@y.values[[1]]);
lines (ROC.perf@alpha.values[[1]],ROC.perf@x.values[[1]]);
Itamar
quelle
Ich interessiere mich für Ihre Antwort. Ich habe den Code eingetragen, den Sie geteilt haben. Geben Sie mir bitte einige Ressourcen, um ein paar Details zu dem von Ihnen vorgeschlagenen Grundstück zu finden. oder schreibe ein paar Sätze darüber, wie man es interpretiert. Vielen Dank im Voraus.
MKS
Ich schlage vor, dass Sie mit dem Eintrag für die ROC-Kurve beginnen , der mit den oben genannten und anderen dort genannten Einträgen verknüpft ist.
Itamar
Die Antwort geht nicht direkt auf die Einschränkung des Entscheidungsbaums in einem stark verzerrten Datensatz ein.
SmallChess
19

Ihr Gerät ist stark aus dem Gleichgewicht geraten - HF schlägt in diesem Szenario normalerweise fehl (dh es wird nur für die größere Klasse eine gute Vorhersage getroffen).

Sie sollten versuchen, Ihr Set auszugleichen, indem Sie entweder die Klasse "0" abtasten, um nur ungefähr die gleiche Größe wie die Klasse "1" zu haben, oder indem Sie mit classwtParametern spielen.


quelle
1
Obwohl es einen classwtParameter gibt, glaube ich, dass er in der randomForest()Funktion des randomForestPakets in R. Per Link noch nicht implementiert ist . Hast du es schon mal benutzt? Ich habe es mit verschiedenen Werten versucht, habe aber die gleichen Ergebnisse wie die Standardwerte erzielt classwt=NULL.
Zhubarb
9

Basierend auf Ihrer Verwirrungsmatrix haben Sie 5.908 Datenpunkte, von denen die überwiegende Mehrheit vom Typ 0 ist („Mitarbeiter verblieben“). Der Klassifikator kann sich daher damit abfinden, "faul" zu sein und die Mehrheitsklasse auszuwählen, es sei denn, es ist absolut sicher, dass ein Beispiel zur anderen Klasse gehört. Beachten Sie, dass Ihre Gesamtfehlerrate ~ 7% beträgt, was ziemlich nahe an dem Prozentsatz von Class1-Beispielen liegt!

Sie haben ein paar Möglichkeiten:

  • Verwerfen Sie Class0-Beispiele, bis Sie ungefähr ausgeglichene Klassen haben. Ich weiß nicht, ob es Literatur darüber gibt, wie man eine optimal repräsentative Untergruppe auswählt (vielleicht kann sich jemand anders wiegen?), Aber Sie könnten damit beginnen, Beispiele nach dem Zufallsprinzip fallen zu lassen. Sie können subsetrandomForest ein Argument übergeben, wodurch das Testen trivial werden sollte.

  • Passen Sie Ihre Verlustfunktion / Klassengewichte an, um die unverhältnismäßige Anzahl von Class0 zu kompensieren. Sie möchten, dass der Klassifizierer ein Class1-Beispiel wesentlich teurer als Class0-Beispiel falsch klassifiziert. Es kann sinnvoll sein, Class0 = 1 / 0.07 ~ = 14x Class1 zu versuchen, um zu starten, aber Sie können dies an Ihre geschäftlichen Anforderungen anpassen (wie viel schlimmer ist eine Art von Fehler). Ich denke, der classwtParameter ist das, wonach Sie hier suchen.

  • Verwenden Sie geschichtete Stichproben, um sicherzustellen, dass die Trainingsdaten der Bäume Beispiele aus beiden Klassen enthalten. Es ist möglich, dass einige Ihrer Bäume nur mit Class0-Daten trainiert wurden, was offensichtlich schlecht für ihre Generalisierungsleistung ist. Schauen Sie sich das strataArgument an.

Matt Krause
quelle
Die zufällige Auswahl aus der dominanten Klasse klingt vernünftig. Sie müssen nicht gleich sein: Selbst ein Verhältnis von 1: 5 sollte eine Verbesserung sein.
Itamar
@Itmar, das würde ich auf jeden Fall zuerst probieren. Es scheint jedoch eine Möglichkeit zu geben, sicherzustellen, dass die von Ihnen aufbewahrten Beispiele für den größeren Datensatz repräsentativ sind.
Matt Krause
1
Eine Option könnte darin bestehen, PCA (Hauptkomponentenanalyse) auf der größeren Menge auszuführen, die Punkte gemäß der ersten Hauptkomponente zu gruppieren und eine Stichprobe aus jedem Cluster auszuwählen.
Itamar