Klasifikasi default yang lebih baik dalam regresi logistik

12

Pengungkapan Penuh: Ini adalah pekerjaan rumah. Saya telah memasukkan tautan ke dataset ( http://www.bertelsen.ca/R/logistic-regress.sav )

Tujuan saya adalah untuk memaksimalkan prediksi peminjam yang gagal dalam kumpulan data ini.

Setiap model yang saya buat sejauh ini, memprediksi> 90% dari non-default, tetapi <40% dari default membuat efisiensi klasifikasi keseluruhan ~ 80%. Jadi, saya ingin tahu apakah ada efek interaksi antar variabel? Dalam regresi logistik, selain menguji setiap kombinasi yang mungkin, adakah cara untuk mengidentifikasi efek interaksi potensial? Atau sebagai alternatif cara untuk meningkatkan efisiensi klasifikasi mangkir.

Saya buntu, setiap rekomendasi akan membantu dalam pilihan kata, sintaks R-kode atau SPSS Anda.

Variabel utama saya diuraikan dalam histogram dan sebar berikut (dengan pengecualian dari variabel dikotomis)

Deskripsi variabel primer:

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)

Variabel tambahan hanyalah transformasi dari yang di atas. Saya juga mencoba mengubah beberapa variabel kontinu menjadi variabel kategori dan mengimplementasikannya dalam model, tidak berhasil di sana.

Jika Anda ingin memasukkannya ke R, cepat, ini dia:

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

teks alternatif teks alternatif

Brandon Bertelsen
sumber
Proporsi baku mangkir tampaknya 1 kasus dari 4, tetapi tampaknya Anda juga memiliki banyak variabel. Apakah Anda sudah mencoba semuanya, apakah Anda punya set variabel utama yang menarik?
chl
Variabel asli ada di depan file. Sisanya adalah transformasi yang sama diidentifikasi oleh x_ (di mana x = log, ln, inv, sqrt). Saya sudah mencoba campuran ini. Tapi saya agak jengkel tentang bagaimana menafsirkan atau membuat plot residual di mana prediktornya adalah 0,1
Brandon Bertelsen
Dalam hal variabel yang diminati, saya sudah mencoba semuanya primer dan sejumlah kombinasi berbeda dari variabel yang ditransformasikan serta model campuran yang menyertakan efek interaksi. Namun, tidak ada yang lebih tinggi dari efisiensi keseluruhan 81,7%.
Brandon Bertelsen

Jawaban:

8

Dalam kumpulan data yang tidak seimbang seperti ini, Anda biasanya dapat meningkatkan kinerja klasifikasi dengan beralih dari menggunakan probabilitas yang sesuai sebesar 0,5 sebagai titik potong Anda untuk mengklasifikasikan kasus menjadi default dan non-default. Sebagai contoh, saya mendapatkan tingkat klasifikasi yang benar yaitu 0,88 dan 0,58 dengan cutpoint 0,4 untuk glm dengan semua interaksi urutan ke-2. (Yang mungkin mengarah ke overfitting dan tampaknya memiliki beberapa masalah peringkat, tapi itu cerita lain.)

Kode:

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)

output parsial:

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 
orang fabian
sumber
Terima kasih telah mencoba, saya bermain dengan ambang juga dan itu memberikan sedikit dorongan untuk klasifikasi.
Brandon Bertelsen
1
Meskipun, itu melakukan pekerjaan yang lebih baik untuk memprediksi mangkir.
Brandon Bertelsen
4

Saya bukan ahli regresi logistik, tetapi bukankah itu hanya masalah data yang tidak seimbang? Mungkin Anda memiliki lebih banyak non-defaulter daripada defaulters yang dapat menggeser prediksi untuk berurusan dengan kelas yang lebih besar. Cobalah untuk menendang keluar beberapa yang tidak default dan lihat apa yang terjadi.


sumber
Saya mencobanya, tidak menunjukkan peningkatan substansial atau penurunan dalam efisiensi keseluruhan (efisiensi adalah seberapa baik ia memprediksi default / non-default dengan tidak adanya false-positive, false-negative)
Brandon Bertelsen
1
@Brandon Saya sudah mencoba beberapa ide lain dan sepertinya tidak membantu. Ini menunjukkan bahwa himpunan ini cukup sulit untuk mewujudkan hal ini (mungkin default hanya didorong oleh beberapa faktor acak yang tidak dapat diprediksi).
@ MBB, terima kasih telah meluangkan waktu! Sangat dihargai.
Brandon Bertelsen
1
Secara pribadi, saya pikir ini adalah data langsung yang dibayar profesor saya untuk menjadi model dalam salah satu pekerjaan konsultasinya ... tapi itu masalah lain sepenuhnya
Brandon Bertelsen
1
solusi untuk masalah dalam analisis data tidak boleh "membuang poin data yang valid" - Anda bisa mencoba menggunakan set data pelatihan yang seimbang untuk menghindari efek ini, tetapi Anda harus tetap mengevaluasi prediksi pada semua data (yaitu semua dari set validasi).
Fabian
4

Dalam regresi logistik, distribusi variabel hasil yang sangat miring (di mana ada lebih banyak peristiwa non-peristiwa atau sebaliknya), titik potong atau pemicu probabilitas perlu disesuaikan, tetapi tidak akan banyak berpengaruh pada klasifikasi keseluruhan efisiensi. Ini akan selalu kira-kira sama, tetapi saat ini Anda sedang mengklasifikasikan peristiwa karena probabilitas "peluang" dalam kumpulan data tersebut akan selalu membuat Anda lebih mungkin untuk diklasifikasi menjadi non-peristiwa. Ini perlu disesuaikan untuk. Bahkan, dalam situasi seperti itu tidak jarang melihat efisiensi keseluruhan klasifikasi turun, karena sebelumnya meningkat karena kesalahan perhitungan karena kebetulan.

Pikirkan seperti ini, jika Anda memiliki acara di mana 90% tidak melakukannya dan 10% melakukannya, maka jika Anda memasukkan semua orang ke dalam grup "jangan lakukan itu", Anda secara otomatis mendapatkan 90% benar, dan itu bahkan tanpa berusaha, hanya kebetulan murni, meningkat oleh kemiringan distribusi itu.

Masalah interaksi tidak terkait dengan kecenderungan ini, dan harus didorong oleh teori. Anda kemungkinan besar akan selalu meningkatkan klasifikasi dengan menambahkan istilah tambahan, termasuk hanya menambahkan interaksi, tetapi Anda melakukannya dengan sering melengkapi model. Anda kemudian harus kembali dan dapat menafsirkan ini.

Matt P Data Analyst, University of Illinois Urbana Champaign


sumber
2

Anda mungkin hanya mencoba memasukkan semua efek interaksi. Anda kemudian dapat menggunakan regresi logistik yang diatur L1 / L2 untuk meminimalkan pemasangan yang berlebihan dan memanfaatkan setiap fitur yang bermanfaat. Saya sangat suka paket glmnet Hastie / Tibshirani (http://cran.r-project.org/web/packages/glmnet/index.html).

Ian
sumber
Satu-satunya masalah adalah, saya harus dapat mereproduksi ini dengan output SPSS. :( Aku masih akan mencobanya!
Brandon Bertelsen
Sudah mencoba, sepertinya tidak dapat memprediksikan.glmnet () berfungsi. Apakah ada keajaiban yang perlu terjadi ketika Anda mengatur newx?
Brandon Bertelsen
2

Saya tahu pertanyaan Anda adalah tentang regresi logistik dan karena ini merupakan pekerjaan rumah sehingga pendekatan Anda dapat dibatasi. Namun, jika minat Anda pada interaksi dan keakuratan klasifikasi, mungkin menarik untuk menggunakan sesuatu seperti CART untuk memodelkan ini.

Berikut adalah beberapa kode R yang harus dilakukan menghasilkan pohon dasar. Saya telah melepaskan rpart pada frame data iri di sini. Mungkin bukan pendekatan terbaik tanpa pengetahuan sebelumnya dan metode validasi silang:

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)

Saya tidak yakin bagaimana cara menghasilkan tabel klasifikasi. Seharusnya tidak terlalu sulit dari nilai prediksi dari objek model dan nilai asli. Adakah yang punya tip di sini?

Brett
sumber
Pohon Klasifikasi dan Regresi? Itu sebenarnya bagian kedua dari penugasan. Setelah saya memaksimalkan klasifikasi saya harus mengklasifikasikan berdasarkan probabilitas desil.
Brandon Bertelsen
Sebenarnya, seseorang membantu saya membuat tabel klasifikasi dalam pertanyaan terkait ini: stats.stackexchange.com/questions/4832/... Terima kasih atas contohnya dengan R, yang sangat dihargai, saya menemukan instruksi serupa di situs web quick-r. Meskipun, untuk anak ini saya terpaksa menerapkan CHAID di SPSS.
Brandon Bertelsen
predictmetode untuk prediksi, table(originalClasses,predictedClasses)untuk konstruksi tabel. Saya mencoba RF (biasanya memiliki akurasi seperti pada CART overfitted, tetapi tidak overfit) dan hasilnya tidak jauh lebih baik daripada glm.