लॉजिस्टिक रिग्रेशन में डिफॉल्ट का बेहतर वर्गीकरण


12

पूर्ण प्रकटीकरण: यह होमवर्क है। मैंने डाटासेट ( http://www.bertelsen.ca/R/logistic-regression.sav ) के लिए एक लिंक शामिल किया है

मेरा लक्ष्य इस डेटा सेट में ऋण डिफॉल्टरों की भविष्यवाणी को अधिकतम करना है।

हर मॉडल जो मैं अब तक के साथ आया हूं, गैर-डिफॉल्टर्स का 90% भविष्यवाणी करता है, लेकिन <40% डिफॉल्टर्स वर्गीकरण दक्षता को कुल मिलाकर ~ 80% बनाते हैं। तो, मुझे आश्चर्य है कि क्या चर के बीच बातचीत प्रभाव हैं? एक लॉजिस्टिक रिग्रेशन के भीतर, प्रत्येक संभावित संयोजन का परीक्षण करने के अलावा संभावित बातचीत प्रभावों की पहचान करने का एक तरीका है? या वैकल्पिक रूप से डिफॉल्टरों के वर्गीकरण की दक्षता को बढ़ावा देने का एक तरीका है।

मैं फंस गया हूं, कोई भी सिफारिशें आपकी पसंद के शब्दों, आर-कोड या एसपीएसएस सिंटैक्स में मददगार होंगी।

मेरे प्राथमिक चरों को निम्नलिखित हिस्टोग्राम और स्कैप्लेटॉट में उल्लिखित किया गया है (डायकोटोमस चर के अपवाद के साथ)

प्राथमिक चर का विवरण:

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)

अतिरिक्त चर सिर्फ ऊपर के परिवर्तन हैं। मैंने कुछ निरंतर चर को श्रेणीबद्ध चर में बदलने और उन्हें मॉडल में लागू करने की कोशिश की, वहां कोई किस्मत नहीं।

यदि आप इसे आर में, जल्दी से, यहाँ यह पॉप करना चाहते हैं:

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

वैकल्पिक शब्द वैकल्पिक शब्द



डिफॉल्टरों का कच्चा अनुपात जाहिरा तौर पर 4 में से 1 मामला है, लेकिन ऐसा लगता है कि आपके पास बहुत सारे चर भी हैं। क्या आपने उन सभी को आज़माया है, क्या आपके पास ब्याज के प्राथमिक चर का कोई सेट है?
chl

मूल चर फ़ाइल के सामने हैं। बाकी समान x_ (जहाँ x = log, ln, inv, sqrt) द्वारा पहचाने जाते हैं। मैंने इनमें से एक मिश्रण की कोशिश की है। लेकिन मैं थोड़ा सा समझा हूं कि कैसे अवशिष्ट भूखंडों की व्याख्या या निर्माण करना है जहां भविष्यवक्ता 0,1 है
ब्रैंडन बर्टेल्सन

ब्याज के चर के संदर्भ में, मैंने उन सभी प्राइमरी और तब्दील चर के विभिन्न संयोजनों के साथ-साथ मिश्रित मॉडल के कई संयोजन की कोशिश की है जिसमें बातचीत प्रभाव शामिल हैं। फिर भी, समग्र दक्षता 81.7% से अधिक कुछ भी नहीं है।
ब्रैंडन बर्टेल्सन

जवाबों:


8

इस तरह असंतुलित डेटासेट में, आप आम तौर पर डिफ़ॉल्ट और गैर-डिफॉल्टरों में मामलों को वर्गीकृत करने के लिए अपने कटपॉइंट के रूप में .5 की एक फिट संभावना का उपयोग करके वर्गीकरण प्रदर्शन में सुधार कर सकते हैं। उदाहरण के लिए, मुझे .88 और .58 की सही वर्गीकरण दरें मिलती हैं। सभी 2-ऑर्डर इंटरैक्शन के साथ एक gl4 के लिए .4 की कटपॉइंट के साथ। (जो संभवतः ओवरफिटिंग की ओर ले जाता है और लगता है कि कुछ रैंक के मुद्दे हैं, लेकिन यह एक और कहानी है।)

कोड:

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)

आंशिक उत्पादन:

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 

कोशिश करने के लिए धन्यवाद, मैं थ्रेशोल्ड के साथ भी खेला और इसने वर्गीकरण को थोड़ा बढ़ावा दिया।
ब्रैंडन बर्टेल्सन

1
हालांकि, इसने बकाएदारों की भविष्यवाणी करने का बेहतर काम किया।
ब्रैंडन बर्टेल्सन 16

4

मैं लॉजिस्टिक रिग्रेशन विशेषज्ञ नहीं हूं, लेकिन क्या यह असंतुलित डेटा की समस्या नहीं है? संभवतः आपके पास बकाएदारों की तुलना में बहुत अधिक गैर-डिफॉल्टर्स हैं जो बड़े वर्ग के साथ बेहतर व्यवहार करने की भविष्यवाणी को स्थानांतरित कर सकते हैं। कुछ गैर-बकाएदारों को बाहर निकालने की कोशिश करें और देखें कि क्या होता है।


मैंने इसे आज़माया, समग्र दक्षता में कोई बहुत अधिक वृद्धि या कमी नहीं प्रस्तुत की (दक्षता यह बताई जा रही है कि झूठे-सकारात्मक, झूठे-नकारात्मक के अभाव में यह डिफॉल्टरों / गैर-डिफॉल्टरों की कितनी अच्छी भविष्यवाणी करता है)
ब्रैंडन बर्टेल्सन

1
@ ब्रेंडन मैंने कुछ अन्य विचारों की कोशिश की है और यह मदद करने के लिए प्रतीत नहीं होता है। इससे पता चलता है कि ऐसा करने के लिए यह सेट काफी कठिन है (संभवतः डिफ़ॉल्ट बस कुछ अप्रत्याशित यादृच्छिक कारकों द्वारा संचालित है)।

@mbq, समय निकालने के लिए धन्यवाद! बहुत सराहना की।
ब्रैंडन बर्टेल्सन

1
व्यक्तिगत रूप से, मुझे लगता है कि यह लाइव डेटा है कि मेरे प्रोफेसर को उनके परामर्श कार्यों में से एक में मॉडलिंग करने के लिए भुगतान किया जा रहा है ... लेकिन यह पूरी तरह से एक और मुद्दा है
ब्रेंडन बर्टेल्सन

1
डेटा विश्लेषण में एक समस्या का समाधान "मान्य डेटा बिंदुओं को दूर फेंकना" कभी नहीं होना चाहिए - आप इन प्रभावों से बचने के लिए संतुलित प्रशिक्षण डेटा सेट का उपयोग करने की कोशिश कर सकते हैं, लेकिन आपको अभी भी डेटा के सभी (यानी सभी पर भविष्यवाणियों का मूल्यांकन करना चाहिए) सत्यापन सेट)।
फ़ेबियों

4

लॉजिस्टिक रिग्रेशन में, परिणाम चर के अत्यधिक तिरछे वितरण (जहां घटनाओं या विज़ वर्सा के लिए कहीं अधिक गैर-ईवेंट हैं), कट प्वाइंट या प्रायिकता ट्रिगर को समायोजित करने की आवश्यकता है, लेकिन इसका समग्र वर्गीकरण पर अधिक प्रभाव नहीं पड़ेगा। दक्षता। यह हमेशा लगभग एक जैसा रहेगा, लेकिन आप वर्तमान में घटनाओं को कम करके वर्गीकृत कर रहे हैं क्योंकि इस तरह के डेटा सेट में "संभावना" की संभावना हमेशा आपको गैर-घटनाओं में वर्गीकृत करने की अधिक संभावना होगी। इसके लिए समायोजित किया जाना चाहिए। वास्तव में, ऐसी स्थिति में वर्गीकरण की समग्र दक्षता को कम होते देखना असामान्य नहीं है, क्योंकि यह पहले भी मौका के कारण मिसकॉल द्वारा फुलाया गया था।

इसे इस तरह से सोचें, यदि आपके पास एक ऐसी घटना है जहाँ 90% ऐसा नहीं करते हैं और 10% इसे करते हैं, तो यदि आप सभी को "ऐसा नहीं करते" समूह में डालते हैं, तो आप स्वचालित रूप से 90% सही हो जाते हैं, और वह बिना कोशिश के भी, बस शुद्ध मौका था, इसके वितरण की विषमता से फुलाया।

इंटरैक्शन का मुद्दा इस तिरछा से असंबंधित है, और इसे सिद्धांत द्वारा संचालित किया जाना चाहिए। आप हमेशा अतिरिक्त शब्दों को जोड़कर वर्गीकरण को बेहतर बनाने की संभावना करेंगे, जिसमें केवल इंटरैक्शन को शामिल करना शामिल है, लेकिन आप अक्सर मॉडल को ओवरफिट करके ऐसा करते हैं। फिर आपको वापस जाना होगा और इसकी व्याख्या कर सकते हैं।

मैट पी डेटा विश्लेषक, इलिनोइस विश्वविद्यालय उबाना Champaign


2

आप बस सभी इंटरैक्शन प्रभाव सहित प्रयास कर सकते हैं। फिर आप ओवर-फिटिंग को कम करने और किसी भी उपयोगी सुविधाओं का लाभ उठाने के लिए L1 / L2- नियमित लॉजिस्टिक रिग्रेशन का उपयोग कर सकते हैं। मुझे वास्तव में हस्ती / तिब्शीरानी का ग्लमैनेट पैकेज (http://cran.r-project.org/web/packages/glmnet/index.html) पसंद है।


एकमात्र समस्या यह है, मुझे इसे SPSS आउटपुट के साथ पुन: पेश करने में सक्षम होना है। :( मैं अभी भी इसे करने की कोशिश कर रहा हूँ!
ब्रैंडन बर्टेल्सन

कोशिश की, यह काम करने के लिए predict.glmnet () पाने के लिए प्रतीत नहीं कर सकते। क्या कोई जादू है जो आपको newx सेट करते समय होना चाहिए?
ब्रैंडन बर्टेल्सन 5

2

मुझे पता है कि आपका सवाल लॉजिस्टिक रिग्रेशन के बारे में है और चूंकि यह एक होमवर्क असाइनमेंट है, इसलिए आपका दृष्टिकोण विवश हो सकता है। हालाँकि, यदि आपकी रुचि बातचीत और वर्गीकरण की सटीकता में है, तो इसे मॉडल करने के लिए CART जैसी किसी चीज़ का उपयोग करना दिलचस्प हो सकता है।

यहाँ मूल पेड़ का उत्पादन करने के लिए कुछ आर कोड है। मैं यहाँ डेटा फ्रेम पर ढीले rpart सेट है। शायद कुछ पूर्व ज्ञान और एक क्रॉस सत्यापन विधि के बिना सबसे अच्छा तरीका नहीं:

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)

मुझे यकीन नहीं है कि क्लासिफिकेशन टेबल कैसे बनाया जाए। यह मॉडल ऑब्जेक्ट और मूल मूल्यों से अनुमानित मूल्यों से बहुत कठिन नहीं होना चाहिए। किसी को भी यहाँ कोई सुझाव है?


वर्गीकरण और प्रतिगमन पेड़? यह वास्तव में असाइनमेंट का दूसरा भाग है। मैंने वर्गीकरण को अधिकतम करने के बाद मुझे संभाव्यता के आधार पर वर्गीकृत करना होगा।
ब्रैंडन बर्टेल्सन

वास्तव में, किसी ने मुझे इस संबंधित प्रश्न में वर्गीकरण तालिका के निर्माण में मदद की: आंकड़े.stackexchange.com/questions/4832/… आर के साथ उदाहरण के लिए धन्यवाद, बहुत सराहना की, मुझे त्वरित-आर वेबसाइट पर इसी तरह का निर्देश मिला। हालांकि, इस विध्वंस के लिए मुझे SPSS में CHAID लागू करने के लिए मजबूर किया जाता है।
ब्रैंडन बर्टेल्सन

predicttable(originalClasses,predictedClasses)तालिका निर्माण के लिए भविष्यवाणी के लिए विधि । मैंने RF की कोशिश की (आमतौर पर इसमें CART से अधिक सटीकता होती है, लेकिन कोई ओवरफिट नहीं होता है) और परिणाम बहुत बेहतर नहीं था glm
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.