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
quelle
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
classwt
Parametern spielen.quelle
classwt
Parameter gibt, glaube ich, dass er in derrandomForest()
Funktion desrandomForest
Pakets 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 erzieltclasswt=NULL
.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
subset
randomForest 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
classwt
Parameter 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
strata
Argument an.quelle