XGBoost-Ausgänge tendieren zu den Extremen


15

Ich verwende derzeit XGBoost zur Risikoprognose. Es scheint in der Abteilung für binäre Klassifizierung gute Arbeit zu leisten, aber die Wahrscheinlichkeitsausgaben sind weit davon entfernt, dh eine Änderung des Werts eines Merkmals in einer Beobachtung um einen sehr kleinen Betrag kann die Wahrscheinlichkeit erhöhen Ausgangssprung von 0,5 auf 0,99.

Ich sehe kaum Ausgänge im Bereich von 0,6 bis 0,8. In allen Fällen beträgt die Wahrscheinlichkeit weniger als 0,99 oder 1.

Ich kenne Kalibrierungsmethoden nach dem Training wie Platt Scaling und Logistic Correction, habe mich aber gefragt, ob ich im XGBoost-Trainingsprozess etwas optimieren kann.

Ich rufe XGBoost aus verschiedenen Sprachen mit FFI auf. Es wäre also schön, wenn ich dieses Problem beheben könnte, ohne andere Kalibrierungsbibliotheken einzuführen, z. B. die Eval-Metrik von AUC auf Protokollverlust zu ändern.


Haben Sie überprüft, ob die Skalierung, die Sie auf den Trainingssatz angewendet haben, auch korrekt auf den Testsatz angewendet wurde?
Brads

Ich habe das gleiche Problem. Könnten Sie etwas Nützliches finden? Als vorübergehende Lösung habe ich nach Probs sortiert und basierend auf Vorkommen unter 0 zu 1 normalisiert, aber ich denke nicht, dass es eine gute Lösung ist.
Ilker Kurtulus

Wie viele kategoriale Variablen haben Sie in Ihrem Modell?
Ngopal

Eigentlich XGBoostist es ziemlich robust gegen Ausreißer, wenn man es mit anderen Vanillemethoden wie vergleicht SVM.
Piotr Rarus - Stellen Sie Monica

Antworten:


1

XGBoost ist natürlich nicht in Wahrscheinlichkeiten kalibriert. Sie müssen etwas verwenden wie:

objective = "binary:logistic"

um sicherzustellen, dass die Ausgabe des Modells als Wahrscheinlichkeit interpretiert werden kann. Andernfalls erhalten Sie möglicherweise nur Punktzahlen, die nur zum Einordnen von Instanzen verwendet werden können. Da die meisten Leistungsmetriken anhand von Punktzahlen berechnet werden können, ist es ein häufiger Fehler, anstelle von "echten" Wahrscheinlichkeiten Wahrscheinlichkeiten (die mit guten Leistungsmetriken verbunden sind) zu verwenden.

Was die Modellinstabilität betrifft (hier in dem Sinne, dass eine geringfügige Änderung der erklärenden Variablen die Vorhersage stark verändert), müssen Sie Ihren gesamten Kalibrierungsprozess erneut überprüfen: Variablenauswahl, Zug- / Testpartitionierung, Hyperparameter-Tuning / Kreuzvalidierung, Leistung Verwendete Metriken, um sicherzustellen, dass Ihr Modell nicht überpasst.


0

Ja, überprüfen Sie die Verteilung der Protokollverluste, wenn die Anzahl der Iterationen zunimmt. Wenn es vor Ihrer letzten Boosting-Iteration in die Höhe schießt, ist es überanpassend.


0

Das erste, was ich fragen würde, wäre "Was ist ein positives / negatives Verhältnis?". Nur weil ich mehrmals ein ähnliches Problem hatte, als der Unterricht sehr unausgewogen war. Wenn es Ihr Fall ist, können Sie versuchen, den Datensatz auszugleichen oder damit zu spielenscale_pos_weight Parametern von XGboost . Im Fall von 50/50-Klassenverhältnissen können die Wahrscheinlichkeiten mehr oder weniger normalisiert sein.

Es ist auch sehr wahrscheinlich, dass Sie gleichzeitig eine Überanpassung haben. Versuchen Sie, die Lernrate, die Abtastparameter und die Regularisierungsparameter (reg_alpha, reg_lambda) einzustellen.


-1

Erstens sollten Sie sicher sein, dass Ihre Daten groß genug sind, wenn Sie mit baumbasierten Algorithmen wie XGBoost und LightGBM arbeiten. Solche plötzlichen Änderungen können auf eine Überanpassung hinweisen. (Mindestens 10.000 Proben, Faustregel)

Zweitens, wie ist Ihre Kardinalität? Wenn Sie 3-4 Funktionen haben, ist zu erwarten, dass eine Änderung der Funktion einen solchen Effekt verursacht.

Drittens, was sind Ihre Auswahl an Hyperparametern? Baumbasierte Modelle reagieren sehr empfindlich auf Änderungen der Parameter. Stellen Sie sicher, dass Sie Ihre Hyperparameter-Optimierung sorgfältig implementieren.

Schließlich, wenn es um binäre Klassifikation geht; Fehlermetriken werden wirklich wichtig. Sie können eine Kombination aus binärem Protokollverlust und binärem Fehler ausführen (mit XGBoost können Sie mehrere auswählen). Stellen Sie außerdem sicher, dass Sie ein frühes Stoppen implementieren, indem Sie in der Zugmethode von XGBoost Early_stopping_rounds = N wählen, wobei N die Auswahl der Iterationen ist. Auf diese Weise stoppt Ihr Algorithmus frühzeitig an einem vernünftigen Punkt, an dem Ihr Verlust nicht mehr abnimmt, um eine Überanpassung zu vermeiden.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.