Bessere Klassifizierung des Ausfalls bei der logistischen Regression

12

Vollständige Offenlegung: Dies sind Hausaufgaben. Ich habe einen Link zum Datensatz hinzugefügt ( http://www.bertelsen.ca/R/logistic-regression.sav )

Mein Ziel ist es, die Vorhersage der Kreditausfälle in diesem Datensatz zu maximieren.

Jedes Modell, das ich mir bisher ausgedacht habe, sagt> 90% der Nichtausfälle voraus, aber <40% der Ausfälle, wodurch die Klassifizierungseffizienz insgesamt ~ 80% beträgt. Ich frage mich also, ob es Interaktionseffekte zwischen den Variablen gibt. Gibt es innerhalb einer logistischen Regression außer dem Testen jeder möglichen Kombination eine Möglichkeit, mögliche Interaktionseffekte zu identifizieren? Oder alternativ ein Weg, um die Effizienz der Klassifizierung von Säumigen zu steigern.

Ich stecke fest, alle Empfehlungen wären hilfreich für Ihre Wortwahl, R-Code oder SPSS-Syntax.

Meine primären Variablen sind im folgenden Histogramm und Streudiagramm dargestellt (mit Ausnahme der dichotomen Variablen).

Eine Beschreibung der primären Variablen:

age: Age in years
employ: Years with current employer
address: Years at current address
income: Household income in thousands
debtinc: Debt to income ratio (x100)
creddebt: Credit card debt in thousands
othdebt: Other debt in thousands
default: Previously defaulted (dichotomous, yes/no, 0/1)
ed: Level of education (No HS, HS, Some College, College, Post-grad)

Zusätzliche Variablen sind nur Transformationen der oben genannten. Ich habe auch versucht, einige der stetigen Variablen in kategoriale Variablen umzuwandeln und in das Modell zu implementieren.

Wenn Sie es schnell in R einfügen möchten, finden Sie es hier:

## R Code
df <- read.spss(file="http://www.bertelsen.ca/R/logistic-regression.sav", use.value.labels=T, to.data.frame=T)

Alt-Text Alt-Text

Brandon Bertelsen
quelle
Der rohe Anteil der Säumigen ist anscheinend 1 von 4 Fällen, aber es scheint, dass Sie auch viele Variablen haben. Haben Sie alle ausprobiert? Haben Sie eine Reihe von wichtigen Variablen?
CHL
Die ursprünglichen Variablen befinden sich am Anfang der Datei. Der Rest sind Transformationen derselben, die durch x_ gekennzeichnet sind (wobei x = log, ln, inv, sqrt). Ich habe eine Mischung aus diesen versucht. Aber ich bin ein bisschen verärgert, wie man Restdiagramme interpretiert oder erstellt, bei denen der Prädiktor 0,1 ist
Brandon Bertelsen
In Bezug auf interessierende Variablen habe ich alle Primärvariablen und eine Reihe verschiedener Kombinationen der transformierten Variablen sowie gemischte Modelle mit Interaktionseffekten ausprobiert. Dennoch nichts höher als 81,7% Gesamtwirkungsgrad.
Brandon Bertelsen

Antworten:

8

In solchen unausgeglichenen Datensätzen können Sie normalerweise die Klassifizierungsleistung verbessern, indem Sie nicht mehr eine angepasste Wahrscheinlichkeit von 0,5 als Grenzwert für die Klassifizierung von Fällen in säumige und nicht säumige Fälle verwenden. Zum Beispiel erhalte ich korrekte Klassifizierungsraten von .88 und .58 mit einem Cutpoint von .4 für einen glm mit allen Interaktionen 2. Ordnung. (Was wahrscheinlich zu Überanpassung führt und einige Rangprobleme zu haben scheint, aber das ist eine andere Geschichte.)

Code:

m <- glm(default ~ (age + employ + address + income + debtinc + 
                    creddebt + othdebt + ed)^2,
   family=binomial(), data=df)
p <- predict(m, newdata=df, type="response")

getMisclass <- function(cutoff, p, labels){
   pred <- factor(1*(p > cutoff), labels=c("No Default", "Default")) 
   t <- table(pred, labels)
   cat("cutoff ", cutoff, ":\n")
   print(t)
   cat("correct    :", round(sum(t[c(1,4)])/sum(t), 2),"\n")
   cat("correct No :", round(t[1]/sum(t[,1]), 2),"\n")
   cat("correct Yes:", round(t[4]/sum(t[,2]), 2),"\n\n")
   invisible(t)
}
cutoffs <- seq(.1,.9,by=.1)
sapply(cutoffs, getMisclass, p=p, labels=df$default)

Teilleistung:

cutoff  0.3 :
            labels
pred           No  Yes
  No Default 3004  352
  Default     740  903
correct    : 0.78 
correct No : 0.8 
correct Yes: 0.72 

cutoff  0.4 :
            labels
pred           No  Yes
  No Default 3278  532
  Default     466  723
correct    : 0.8 
correct No : 0.88 
correct Yes: 0.58 

cutoff  0.5 :
        labels
pred           No  Yes
  No Default 3493  685
  Default     251  570
correct    : 0.81 
correct No : 0.93 
correct Yes: 0.45 

cutoff  0.6 :
            labels
pred           No  Yes
  No Default 3606  824
  Default     138  431
correct    : 0.81 
correct No : 0.96 
correct Yes: 0.34 
Fabians
quelle
Vielen Dank, dass Sie es versucht haben, ich habe auch mit der Schwelle gespielt, was der Klassifizierung nur wenig Auftrieb verlieh.
Brandon Bertelsen
1
Es hat jedoch die Ausfallraten besser vorhergesagt.
Brandon Bertelsen
4

Ich bin kein Experte für logistische Regressionen, aber liegt es nicht nur an unausgeglichenen Daten? Wahrscheinlich haben Sie viel mehr Nicht-Säumige als Säumige, was die Vorhersage möglicherweise dahingehend verschiebt, dass Sie mit größeren Klassen besser umgehen können. Versuchen Sie einige Nicht-Säumige rauszuschmeißen und sehen Sie, was passiert.


quelle
Ich habe es ausprobiert und keine wesentlichen Erhöhungen oder Verminderungen der Gesamteffizienz präsentiert (Effizienz ist, wie gut es Säumige / Nicht-Säumige in Abwesenheit von falsch-positiven und falsch-negativen Ergebnissen vorhergesagt hat)
Brandon Bertelsen
1
@Brandon Ich habe ein paar andere Ideen ausprobiert und es scheint nicht zu helfen. Dies deutet darauf hin, dass diese Menge nur schwer genug ist, um dies zu erreichen (möglicherweise wird die Standardeinstellung nur von einigen unvorhersehbaren Zufallsfaktoren bestimmt).
@mbq, danke, dass du dir die Zeit genommen hast! Sehr geschätzt.
Brandon Bertelsen
1
Persönlich denke ich, dass es sich um Live-Daten handelt, für deren Modellierung mein Professor in einem seiner Beratungsjobs bezahlt wird ... aber das ist ein ganz anderes Problem
Brandon Bertelsen,
1
Die Lösung für ein Problem in der Datenanalyse sollte niemals "gültige Datenpunkte wegwerfen" sein - Sie könnten versuchen, ausgewogene Trainingsdatensätze zu verwenden, um diese Effekte zu vermeiden, aber Sie sollten trotzdem die Vorhersagen für alle Daten (dh für alle) auswerten des Validierungssatzes).
Fabians
4

In der logistischen Regression, bei stark verzerrten Verteilungen von Ergebnisvariablen (wo es viel mehr Nichtereignisse zu Ereignissen gibt oder umgekehrt), muss der Schnittpunkt oder der Wahrscheinlichkeitstrigger angepasst werden, aber dies hat keinen großen Einfluss auf die Gesamtklassifizierung Effizienz. Dies wird immer in etwa gleich bleiben, aber Sie klassifizieren Ereignisse derzeit zu wenig, da die Wahrscheinlichkeit "zufällig" in einem solchen Datensatz die Wahrscheinlichkeit erhöht, dass Sie in Nichtereignisse klassifiziert werden. Dies muss angepasst werden. Tatsächlich ist es in einer solchen Situation nicht ungewöhnlich, dass die Gesamteffizienz der Klassifizierung abnimmt, da sie zuvor durch eine zufällige Fehleinschätzung aufgeblasen wurde.

Stellen Sie sich das so vor: Wenn Sie ein Ereignis haben, bei dem 90% es nicht tun und 10% es tun, dann erhalten Sie automatisch 90% richtig war, ohne es zu versuchen, nur ein reiner Zufall, aufgeblasen von der Schiefe seiner Verteilung.

Die Frage der Wechselwirkungen hat nichts mit dieser Verzerrung zu tun und sollte von der Theorie bestimmt werden. Sie werden die Klassifizierung höchstwahrscheinlich immer verbessern, indem Sie zusätzliche Begriffe hinzufügen, einschließlich des Hinzufügens von Interaktionen. Sie tun dies jedoch, indem Sie das Modell häufig überpassen. Sie müssen dann zurückgehen und dies interpretieren können.

Matt P Datenanalyst, University of Illinois Urbana Champaign


quelle
2

Sie können auch versuchen, alle Interaktionseffekte einzuschließen. Sie können dann die L1 / L2-regulierte logistische Regression verwenden, um Überanpassungen zu minimieren und alle hilfreichen Funktionen zu nutzen. Ich mag Hastie / Tibshiranis glmnet-Paket (http://cran.r-project.org/web/packages/glmnet/index.html) sehr.

IanS
quelle
Das einzige Problem ist, dass ich dies mit der SPSS-Ausgabe reproduzieren kann. :( Ich werde es trotzdem versuchen!
Brandon Bertelsen
Versuchte es heraus, kann nicht scheinen, predict.glmnet () zum Funktionieren zu bringen. Gibt es irgendeine Magie, die passieren muss, wenn Sie newx setzen?
Brandon Bertelsen
2

Ich weiß, dass es bei Ihrer Frage um logistische Regression geht. Da es sich um eine Hausaufgabe handelt, kann Ihr Ansatz eingeschränkt sein. Wenn Sie jedoch an Interaktionen und der Genauigkeit der Klassifizierung interessiert sind, ist es möglicherweise interessant, CART zu verwenden, um dies zu modellieren.

Hier ist ein R-Code, um den Grundbaum zu erzeugen. Ich habe hier rpart auf den gesamten Datenrahmen gesetzt. Vielleicht nicht der beste Ansatz ohne Vorkenntnisse und eine Kreuzvalidierungsmethode:

library(foreign)
df <- read.spss(file="http://www.bertelsen.ca/R/logistic-regression.sav", use.value.labels=T, to.data.frame=T) 
library(rpart) 
fit<-rpart(default~.,method="anova",data=df)
 pfit<- prune(fit, cp=   fit$cptable[which.min(fit$cptable[,"xerror"]),"CP"])

# plot the pruned tree 
 plot(pfit, uniform=TRUE, 
   main="Pruned Classification Tree for Loan Default")
text(pfit, use.n=TRUE, all=TRUE, cex=.8)

Ich bin mir nicht sicher, wie ich die Klassifikationstabelle erstellen soll. Ausgehend von den vorhergesagten Werten des Modellobjekts und den ursprünglichen Werten sollte es nicht zu schwierig sein. Hat jemand hier irgendwelche Tipps?

Brett
quelle
Klassifikations- und Regressionsbäume? Das ist eigentlich ein zweiter Teil der Aufgabe. Nachdem ich die Klassifizierung maximiert habe, muss ich sie anhand von Wahrscheinlichkeitsdezilen klassifizieren.
Brandon Bertelsen
Tatsächlich hat mir jemand bei der Erstellung der Klassifizierungstabelle in dieser verwandten Frage geholfen : stats.stackexchange.com/questions/4832/… Vielen Dank für das Beispiel mit R, das ich sehr geschätzt habe. Ich habe eine ähnliche Anleitung auf der quick-r-Website gefunden. Obwohl ich zu diesem Zweck gezwungen bin, CHAID in SPSS anzuwenden.
Brandon Bertelsen
predictMethode zur Vorhersage, table(originalClasses,predictedClasses)für die Tischkonstruktion. Ich habe RF ausprobiert (normalerweise hat es Genauigkeit wie in einem überladenen CART, aber keine Überanpassung) und das Ergebnis war nicht viel besser als glm.