Die logistische Regression sagt alle 1 und keine 0 voraus


10

Ich führe eine Analyse der Wahrscheinlichkeit eines Kreditausfalls unter Verwendung logistischer Regression und zufälliger Wälder durch.

Wenn ich logistische Regression verwende, ist die Vorhersage immer '1' (was ein gutes Darlehen bedeutet). Ich habe das noch nie gesehen und weiß nicht, wo ich anfangen soll, um das Problem zu lösen. Es gibt 22 Spalten mit 600 KB Zeilen. Wenn ich die Anzahl der Spalten verringere, erhalte ich das gleiche Ergebnis mit logistischer Regression.

Warum könnte die logistische Regression so falsch sein?

**Actual from the data**

0 :   41932

1 :   573426

**Logistic regression output** 

prediction for 1 when actually 0: 41932
prediction for 1 when actually 1:573426

A**s you can see, it always predicts a 1**


**Random forests does better:**

actual 0, pred 0 : 38800 
actual 1, pred 0 : 27 
actual 0, pred 1 : 3132
actual 1, pred 1 : 573399

4
Das macht keinen Sinn. Logit sagt nicht genau 0 voraus. Es kann einen niedrigen Wert vorhersagen, den Sie als 0 interpretiert haben. Das Problem könnte also auf den Schwellenwert zurückzuführen sein, nicht nur auf das Modell selbst
Aksakal

@ Aksakal, ich benutze die Scikit Learn .predict Methode. Vorhersage von Klassenbezeichnungen für Proben in X
ivan7707

Kennen Sie ROC-Kurven? Sie können die vorhergesagten Wahrscheinlichkeiten extrahieren und dann mit dem Schwellenwert spielen, um die Daten selbst zu klassifizieren. Der Schwellenwert ist Ihr Kompromisshebel zwischen der Identifizierung von Standardwerten oder Nicht-Standardwerten.
Aksakal

1
Siehe meine Antwort unten, aber Sie können auch ROC verwenden, um den Sweet Spot in Ihrer Klassifikatoreinstellung für die Protokollierung zwischen Sensitivität und Spezifität zu finden
Aksakal

4
Verwendung Dont predictin sklearn auf einem Wahrscheinlichkeitsmodell, es ist nutzlos. IMMER verwenden predict_proba.
Matthew Drury

Antworten:


5

Nun, es ist sinnvoll, dass Ihr Modell immer voraussagt. 1. Sehen Sie sich Ihren Datensatz an: Er ist zugunsten Ihrer positiven Klasse stark unausgewogen. Die negative Klasse macht nur ~ 7% Ihrer Daten aus. Versuchen Sie, Ihr Trainingsset neu auszugleichen, oder verwenden Sie einen kostensensitiven Algorithmus.


danke für die eingabe. Gibt es eine Faustregel für das, was für unausgeglichene Daten akzeptabel ist, oder gute Quellen für die Neuausrichtung, die Sie vorschlagen könnten?
ivan7707

Leider gibt es keine Regel für die Auswahl eines Algorithmus, sondern den Satz "Kein kostenloses Mittagessen". In Ihrem speziellen Fall würde ich zuerst das C5.0-Paket von Ross Quinlan verwenden. Dann können Sie mit verschiedenen Kosten und Stichprobenverfahren wie Up- und Downsampling, SMOTE usw. experimentieren. Darüber hinaus bietet die Website von Max Kuhn eine schöne Zusammenfassung der etablierten Algorithmen.
JimBoy

7
(+1) In Ermangelung einer Kostenfunktion scheint es keinen Grund zu geben, die logistische Regression als Klassifikator zu verwenden : Sie haben die vorhergesagten Wahrscheinlichkeiten und können die Leistung Ihres Modells anhand einer geeigneten Bewertungsregel bewerten. Siehe z. B. Was ist das Maß zur Bewertung der Genauigkeit der binären Klassifizierung für unausgeglichene Daten? . Ungleichgewicht ist an sich kein Problem: siehe Ändert das Downsampling die logistischen Regressionskoeffizienten? .
Scortchi - Monica wieder einsetzen

@ Scortchi, danke für die Links und die Idee, Modelle mit Kosten zu verwenden. Ich konnte diesen Papierlink finden , der mich in die richtige Richtung bringt.
ivan7707

1
Nein, es macht keinen Sinn, dass sein Modell immer 1s vorhersagt, da 7% eine ziemlich hohe Ausfallrate darstellt und Logit bei Kreditausfällen häufig verwendet wird. Betrachten Sie Darlehen mit AAA-Rating, die jährlich einen Ausfall von 0,1% aufweisen. Es handelt sich im Grunde genommen um Junk-Kredite.
Aksakal

13

Die kurze Antwort lautet: Die logistische Regression dient der Schätzung von Wahrscheinlichkeiten , nicht mehr oder weniger. Sie können Wahrscheinlichkeiten schätzen, egal wie unausgeglichen ist. ROC-Kurven und einige der anderen in der Diskussion angegebenen Maßnahmen helfen nicht weiter. Wenn Sie eine Entscheidung treffen oder eine Aktion ausführen müssen, wenden Sie die Verlust- / Nutzen- / Kostenfunktion auf das vorhergesagte Risiko an und wählen die Aktion aus, die den erwarteten Nutzen optimiert. Es scheint, dass viele Benutzer des maschinellen Lernens Risiken und optimale Entscheidungen nicht wirklich verstehen.Y


2
(+1) Ja, die Frage lautet: "Lösen Sie ein Klassifizierungsproblem oder lösen Sie ein Entscheidungshilfeproblem?".
GeoMatt22

1
Da bin ich mir nicht sicher. Die Schätzung von Wahrscheinlichkeiten ist ein großartiges Endergebnis. Und beachten Sie, dass die meisten "Klassifizierungs" -Probleme besser mit optimalen Bayes-Entscheidungen angegangen werden können. Abgesehen von der visuellen und akustischen Mustererkennung würden die meisten Probleme, bei denen Klassifizierungsmethoden angewendet werden, besser mit einer direkten Wahrscheinlichkeitsschätzung angegangen.
Frank Harrell

@FrankHarrell Ist es richtig, dass für die Interpretation der Ausgabe als Wahrscheinlichkeiten ein Entwurf erforderlich ist, der eine solche Interpretation (Kohorte) ermöglicht? Und wenn wir kein solches Design haben, müssen wir eine Entscheidung treffen, die auf den "Risikobewertungen" basiert. Obwohl es Literatur gibt, die dies in der nicht kalibrierten Umgebung diskutiert, ist dies in der Praxis nicht so üblich. Ist das richtig?
12.

1
Bitte beschreiben Sie, wie sich die Stichprobe zum Zusammenstellen des für die Modellentwicklung verwendeten Datensatzes von den Kunden unterscheidet, auf die Sie die Vorhersagen anwenden werden.
Frank Harrell

Zum Beispiel Fall-Kontroll-Stichproben, für die die Zielprävalenz unbekannt ist. Oder mittelgroße Convenience-Beispiele.
Juli

1

Wenn Sie mit logit klassifizieren, geschieht Folgendes.

Das Protokoll sagt die Ausfallwahrscheinlichkeit (PD) eines Kredits voraus, die eine Zahl zwischen 0 und 1 ist. Als Nächstes legen Sie einen Schwellenwert D fest, sodass Sie einen Kredit als Standard markieren, wenn PD> D, und ihn als Nicht-Kredit markieren. Standard wenn PD

Natürlich in einer typischen Kreditpopulation PD << 1. In Ihrem Fall ist 7% also eine ziemlich hohe Wahrscheinlichkeit für Daten für ein Jahr (PDs werden normalerweise jährlich gemeldet). Wenn es sich um mehrjährige Daten handelt, handelt es sich um eine sogenannte kumulative PD. In diesem Fall ist cumPD = 7% beispielsweise für 10-jährige Daten keine hohe Zahl. Daher würde ich nach allen Maßstäben nicht sagen, dass Ihr Datensatz problematisch ist. Ich würde es zumindest typisch für Kreditausfalldaten beschreiben, wenn auch nicht großartig (in dem Sinne, dass Sie eine relativ große Anzahl von Ausfällen haben).

Angenommen, Ihr Modell sagt die folgenden drei PD-Ebenen voraus:

  • 0,1 (563,426)
  • 0,5 (20.000)
  • 0,9 (31.932)

Angenommen, die tatsächlichen Standardeinstellungen für diese Gruppen waren:

  • 0
  • 10.000
  • 31.932

Jetzt können Sie D auf verschiedene Werte setzen und sehen, wie sich die Matrix ändert. Verwenden wir zuerst D = 0,4:

  • Tatsächlicher Standardwert, Nicht-Standardwert vorhersagen: 0
  • Tatsächlicher Standardwert, vorhergesagter Standardwert: 41.932
  • Tatsächlicher Nichtausfall, Nichtausfall vorhersagen: 563.426
  • Tatsächlicher Nicht-Standard, Standard vorhersagen: 10.000

Wenn Sie D = 0,6 einstellen:

  • Tatsächlicher Standard, Nicht-Standard vorhersagen: 31.932
  • Tatsächlicher Standard, Standard vorhersagen: 10.000
  • Tatsächlicher Nichtausfall, Nichtausfall vorhersagen: 573.426
  • Tatsächlicher Nicht-Standard, Standard vorhersagen: 0

Wenn Sie D = 0,99 einstellen:

  • Tatsächlicher Standard, Nicht-Standard vorhersagen: 41.932
  • Tatsächlicher Standard, Standard vorhersagen: 0
  • Tatsächlicher Nichtausfall, Nichtausfall vorhersagen: 573.426
  • Tatsächlicher Nicht-Standard, Standard vorhersagen: 0

Der letzte Fall ist das, was Sie in Ihren Modellergebnissen sehen. In diesem Fall betone ich den Schwellenwert D für einen Klassifikator. Eine einfache Änderung von D kann bestimmte Eigenschaften Ihrer Prognose verbessern. Es ist zu beachten, dass in allen drei Fällen die vorhergesagte PD gleich blieb, nur der Schwellenwert D hat sich geändert.

Es ist natürlich auch möglich, dass Ihre Logit-Regression selbst beschissen ist. In diesem Fall haben Sie also mindestens zwei Variablen: die Protokollspezifikation und den Schwellenwert. Beides wirkt sich auf Ihre Prognoseleistung aus.


Sie erkennen, dass Sie eine Technik vorschlagen, um mit unausgeglichenen Daten umzugehen, oder? Daher geben Sie die Auswirkung der kleineren Klasse auf die Vorhersagegenauigkeit zu. Außerdem schlagen Sie eine Technik vor, die das ursprüngliche Modell überhaupt nicht verwendet. Sie können die Umstände nicht einfach nach Ihren Wünschen ändern und dann im Laufe der Zeit eine Erklärung abgeben.
JimBoy

Bei der Kreditausfallanalyse / -prognose sind die Daten in diesem Sinne immer "unausgewogen". Es ist der normale Zustand.
Aksakal

Das kann so sein wie es ist. Sie sollten sich jedoch ansehen, was Max Kuhn als "Rate ohne Informationen" bezeichnet, was nichts anderes als die größte Klasse im Datensatz ist. Schauen Sie sich also noch einmal den Tisch an, den Ivan zur Verfügung gestellt hat. Die Ergebnisse sind für das von ihm verwendete Modell durchaus sinnvoll. Dass Sie diese Ergebnisse tatsächlich mit verschiedenen Techniken optimieren können, ist eine andere Frage und durchaus möglich.
JimBoy

@ JimBoy, ich habe seinen Tisch gesehen und noch viel mehr davon gesehen. Seine ist ziemlich einfach, wir beschäftigen uns normalerweise mit Kreditausfalldaten, bei denen die Staaten von aktuell bis 30 Tage überfällig sind, 60, 90 ... bis Standard und geschlossen. In einem guten Portfolio können Sie 95% Kredite im aktuellen (sauberen) Zustand und nur 1% im Standard haben. Die Leute verwenden in der Branche ständig Mulltinomial Logit für solche Dinge.
Aksakal

@Aksakal, ich muss mehr über das Ändern des Schwellenwerts lesen, da ich viel darüber gelesen habe, wie mathematisch falsch es ist, ihn für die logistische Regression zu ändern. Was meinten Sie mit "es ist möglich, dass Ihre Logit-Regression selbst beschissen ist"?
ivan7707

1

Wenn das Problem tatsächlich das Ungleichgewicht zwischen den Klassen ist, würde ich einfach damit beginnen, die Klassengewichte auszugleichen:

log_reg = LogisticRegression(class_weight = 'balanced')

Diese Parametereinstellung bedeutet, dass die Strafen für falsche Vorhersagen in der Verlustfunktion mit umgekehrten Proportionen zu den Häufigkeiten der Klassen gewichtet werden. Dies kann das von Ihnen beschriebene Problem lösen.


Mir ist nicht klar, dass Sie das Problem festgestellt haben. Ich denke, Matthew Drury ist auf das Problem gestoßen, das mit dem Einsatz von sklearn zu tun hat.
Michael R. Chernick

0

Nun, ohne weitere Informationen ist es schwer zu sagen, aber durch die Definition der logistischen Regression sättigen Sie basierend auf den angepassten Daten. In der Gleichung geht der e ^ -t-Term also auf 0. Der erste Ort, an dem man nachsehen muss, ist, zu sehen, wie die tatsächlichen Koeffizienten sind.

Dies könnte auch auf schlecht skalierte Variablen zurückzuführen sein. Möglicherweise liegt ein Problem vor, bei dem eine der Spalten im Vergleich zu anderen Spalten einen enormen numerischen Wert aufweist, was zu einem Durcheinander führt.


@ Tim Felty, Danke für die Antwort. Können Sie bitte erläutern, wonach ich in Bezug auf die Koeffizienten suchen würde und wie sich dies auf die Sättigung auswirkt (oder mich auf eine Ressource zum Lesen verweisen)? Ich hatte auch den Eindruck, dass sich schlecht skalierte Variablen nicht negativ auf die logistische Regression auswirken würden. [link (] stats.stackexchange.com/questions/18916/… )
ivan7707

0

Sie können SMOTE verwenden, um den unausgeglichenen Datensatz auszugleichen. Ein gutes Referenzpapier ist:

Lifeng Zhou, Hong Wang, Kreditausfallvorhersage für große unausgeglichene Daten unter Verwendung zufälliger Wälder, TELKOMNIKA Indonesian Journal of Electrical Engineering, Band 10, Nr. 6, Oktober 2012, S. 1519–1525, Link .


Könnten Sie ein vollständiges Zitat / eine vollständige Referenz (einschließlich Autor, Datum, Herausgeber usw.) hinzufügen, wie Sie es in einer wissenschaftlichen Arbeit tun würden? Dies würde es zukünftigen Lesern leichter machen, es aufzuspüren, wenn der Link nicht mehr funktioniert
Silverfish
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.