Lojistik regresyonda daha iyi temerrüt Sınıflandırması


12

Tam Açıklama: Bu ev ödevi. Veri kümesine bir bağlantı ekledim ( http://www.bertelsen.ca/R/logistic-regression.sav )

Amacım bu veri setinde kredi temerrütleri tahminini en üst düzeye çıkarmak.

Şimdiye kadar bulduğum her model, varsayılan olmayanların% 90'ından fazlasını öngörüyor, ancak varsayılanların <% 40'ı, sınıflandırma verimliliğini genel olarak ~% 80 yapıyor. Değişkenler arasında etkileşim etkisi olup olmadığını merak ediyorum. Lojistik bir regresyon içinde, olası her kombinasyonu test etmekten başka potansiyel etkileşim etkilerini tanımlamanın bir yolu var mı? Veya alternatif olarak, temerrüt yapanlar sınıflandırma verimliliğini artırmak için bir yol.

Sıkıştım, herhangi bir öneri kelime seçiminizde, R-kodunda veya SPSS sözdiziminde yardımcı olacaktır.

Birincil değişkenlerim aşağıdaki histogram ve dağılım grafiğinde özetlenmiştir (iki değişkenli değişken hariç)

Birincil değişkenlerin açıklaması:

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)

Ek değişkenler sadece yukarıdakilerin dönüşümleridir. Ayrıca sürekli değişkenlerden birkaçını kategorik değişkenlere dönüştürmeyi ve modelde uygulamayı denedim, şans yok.

Hızlı bir şekilde R'ye atmak istiyorsanız, işte burada:

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

alternatif metin alternatif metin



Varsayılanların ham oranı 4'te 1 vaka olduğu görülüyor, ancak görünüşe göre çok fazla değişkeniniz var. Hepsini denediniz mi, ilgilendiğiniz bir dizi birincil değişken var mı?
chl

Orijinal değişkenler dosyanın önündedir. Geri kalanlar x_ ile tanımlanan aynı dönüşümlerdir (burada x = log, ln, inv, sqrt). Bunların bir karışımını denedim. Ama tahmin
edicinin

İlgilenilen değişkenler açısından, bunların hepsinin primerlerini ve dönüştürülmüş değişkenlerin bir dizi farklı kombinasyonunu ve etkileşim efektlerini içeren karışık modelleri denedim. Yine de,% 81,7 genel verimlilikten daha yüksek bir şey yok.
Brandon Bertelsen

Yanıtlar:


8

Bunun gibi dengesiz veri kümelerinde, vakaları varsayılanlar ve varsayılan olmayanlar olarak sınıflandırmak için kesme noktanız olarak takılan .5 olasılığından uzaklaşarak sınıflandırma performansını genellikle artırabilirsiniz. Örneğin, tüm 2. dereceden etkileşimlerle bir glm için 0,4 kesme noktasıyla .88 ve .58 doğru sınıflandırma oranlarını alıyorum. (Bu muhtemelen aşırı sığmaya yol açar ve bazı sıralama sorunları var gibi görünüyor, ancak bu başka bir hikaye.)

Kod:

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)

kısmi çıktı:

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 

Denediğiniz için teşekkürler, eşik ile de oynadım ve sınıflandırmaya çok az destek sağladı.
Brandon Bertelsen

1
Bununla birlikte, varsayılanları tahmin etmek daha iyi bir iş çıkardı.
Brandon Bertelsen

4

Lojistik bir regresyon uzmanı değilim, ama bu sadece dengesiz veri sorunu değil mi? Muhtemelen, daha büyük bir sınıfla daha iyi başa çıkmak için öngörüyü değiştirebilecek varsayılanlardan çok daha fazla varsayılan olmayanlara sahipsiniz. Bazı varsayılan olmayanları atmaya çalışın ve ne olduğunu görün.


Denedim, genel verimlilikte önemli bir artış veya azalma göstermedi (verimlilik, yanlış pozitifler, yanlış negatifler yokluğunda varsayılanları / varsayılan olmayanları tahmin etmenin ne kadar iyi olduğunu)
Brandon Bertelsen

1
@Brandon Başka birkaç fikir denedim ve yardımcı görünmüyor. Bu, bu kümenin bunu gerçekleştirmek için yeterince zor olduğunu gösterir (muhtemelen varsayılan, bazı öngörülemeyen rastgele faktörler tarafından yönlendirilir).

@mbq, zaman ayırdığınız için teşekkürler! Çok takdir etmek.
Brandon Bertelsen

1
Şahsen, bence bu benim profesörüm danışmanlık işlerinden birinde modellemek için ödenen canlı veriler ... ama bu tamamen başka bir sorun
Brandon Bertelsen

1
veri analizindeki bir sorunun çözümü asla "geçerli veri noktalarını atmak" olmamalıdır - bu etkileri önlemek için dengeli eğitim veri setlerini kullanmaya çalışabilirsiniz, ancak yine de tüm veriler üzerindeki tahminleri değerlendirmelisiniz (örn. doğrulama kümesinin).
fabians

4

Lojistik regresyonda, sonuç değişkenlerinin yüksek derecede çarpık dağılımları (olaylarda çok daha fazla olay olmadığı veya tam tersi olduğunda), kesme noktasının veya olasılık tetikleyicisinin ayarlanması gerekir, ancak genel sınıflandırma üzerinde çok fazla etkisi olmayacaktır. VERİMLİ. Bu her zaman kabaca aynı kalacaktır, ancak böyle bir veri kümesindeki "şans" olasılığı her zaman etkinlik dışı olarak sınıflandırılma olasılığınızı artıracağından, şu anda olayları az sınıflandırıyorsunuz. Bunun için ayarlanması gerekir. Aslında, böyle bir durumda, sınıflandırmanın genel verimliliğinin düştüğünü görmek nadir değildir, çünkü daha önce şans nedeniyle yanlış hesaplama ile şişirilmiştir.

Bu şekilde düşünün,% 90'ının yapmadığı ve% 10'unun yapmadığı bir etkinliğiniz varsa, o zaman herkesi "yapma" grubuna koyarsanız, otomatik olarak% 90'ı doğru alırsınız ve denemeden, sadece saf şans, dağıtımının çarpıklığıyla şişirilmişti.

Etkileşimler konusu bu eğriyle ilgisizdir ve teori tarafından yönlendirilmelidir. Büyük olasılıkla, etkileşimleri eklemek de dahil olmak üzere ek terimler ekleyerek sınıflandırmayı her zaman geliştireceksiniz, ancak bunu genellikle modelin üzerine sığdırarak yaparsınız. Daha sonra geri dönmeli ve bunu yorumlayabilmelisiniz.

Matt P Veri Analisti, Illinois Üniversitesi Urbana Şampiyonu


2

Tüm etkileşim efektlerini eklemeyi deneyebilirsiniz. Ardından L1 / L2 düzenli lojistik regresyonunu aşırı uyumu en aza indirmek ve yararlı özelliklerden yararlanmak için kullanabilirsiniz. Hastie / Tibshirani'nin glmnet paketini gerçekten seviyorum (http://cran.r-project.org/web/packages/glmnet/index.html).


Tek sorun, bunu SPSS çıktısı ile çoğaltmak zorundayım. :( Yine de deneyeceğim!
Brandon Bertelsen

Denedim, çalışmak için predict.glmnet () alınamıyor gibi görünüyor. Newx'i ayarlarken gerçekleşmesi gereken bir sihir var mı?
Brandon Bertelsen

2

Sorunuzun lojistik regresyon ile ilgili olduğunu biliyorum ve bu bir ev ödevi olduğu için yaklaşımınız kısıtlanabilir. Bununla birlikte, ilginiz etkileşimler ve sınıflandırma doğruluğuna ilgiliyse, bunu modellemek için CART gibi bir şey kullanmak ilginç olabilir.

Temel ağacı üretmek için bazı R kodları. Burada enire veri çerçevesi üzerinde rpart gevşek ayarladım. Önceden bilgi ve çapraz doğrulama yöntemi olmadan belki de en iyi yaklaşım:

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)

Sınıflandırma tablosunu nasıl üreteceğimi bilmiyorum. Model nesnesinden öngörülen değerlerden ve orijinal değerlerden çok zor olmamalıdır. Burada herhangi bir ipucu var mı?


Sınıflandırma ve Regresyon Ağaçları? Bu aslında görevin ikinci bir parçası. Sınıflandırmayı maksimize ettikten sonra, olasılık ondalıklarına göre sınıflandırmam gerekir.
Brandon Bertelsen

Aslında, birisi bu ilgili sorudaki sınıflandırma tablosunu üretmeme yardımcı oldu: stats.stackexchange.com/questions/4832/… R ile ilgili örnek için teşekkürler, çok takdir ediyorum, çabuk web sitesinde benzer talimatlar buldum. Her ne kadar bu çalışma için SPSS'de CHAID uygulamak zorundayım.
Brandon Bertelsen

predicttable(originalClasses,predictedClasses)tablo yapımı için tahmin yöntemi . RF'yi denedim (genellikle overfitted CART'ta olduğu gibi doğruluk var, ancak overfit yok) ve sonuç daha iyi değildi glm.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.