Phân loại tốt hơn mặc định trong hồi quy logistic


12

Tiết lộ đầy đủ: Đây là bài tập về nhà. Tôi đã bao gồm một liên kết đến tập dữ liệu ( http://www.bertelsen.ca/R/logistic-regression.sav )

Mục tiêu của tôi là tối đa hóa dự đoán của những người vỡ nợ cho vay trong bộ dữ liệu này.

Mọi mô hình mà tôi đã đưa ra cho đến nay, dự đoán> 90% người không mặc định, nhưng <40% người mặc định làm cho hiệu quả phân loại nói chung ~ 80%. Vì vậy, tôi tự hỏi nếu có các hiệu ứng tương tác giữa các biến? Trong một hồi quy logistic, ngoài việc kiểm tra từng sự kết hợp có thể có cách nào để xác định các hiệu ứng tương tác tiềm năng? Hoặc cách khác là một cách để tăng hiệu quả của việc phân loại người mặc định.

Tôi bị mắc kẹt, mọi khuyến nghị sẽ hữu ích trong việc bạn chọn từ, mã R hoặc cú pháp SPSS.

Các biến chính của tôi được phác thảo trong biểu đồ và biểu đồ phân tán sau (ngoại trừ biến nhị phân)

Mô tả về các biến chính:

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)

Các biến bổ sung chỉ là biến đổi của ở trên. Tôi cũng đã thử chuyển đổi một vài biến liên tục thành biến phân loại và thực hiện chúng trong mô hình, không có may mắn ở đó.

Nếu bạn muốn đưa nó vào R, nhanh chóng, đây là:

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

văn bản thay thế văn bản thay thế



Tỷ lệ thô của các mặc định rõ ràng là 1 trường hợp trong số 4, nhưng có vẻ như bạn cũng có rất nhiều biến. Bạn đã thử tất cả chưa, bạn có tập hợp các biến quan tâm chính nào không?
chl

Các biến ban đầu nằm ở phía trước của tập tin. Phần còn lại là các phép biến đổi giống nhau được xác định bởi x_ (trong đó x = log, ln, inv, sqrt). Tôi đã thử một hỗn hợp của những thứ này. Nhưng tôi hơi lầm bầm về cách diễn giải hoặc tạo ra các ô dư trong đó công cụ dự đoán là 0,1
Brandon Bertelsen

Về các biến quan tâm, tôi đã thử tất cả các biến gốc và một số kết hợp khác nhau của các biến được chuyển đổi cũng như các mô hình hỗn hợp bao gồm các hiệu ứng tương tác. Tuy nhiên, không có gì cao hơn 81,7% hiệu quả tổng thể.
Brandon Bertelsen

Câu trả lời:


8

Trong các bộ dữ liệu không cân bằng như thế này, bạn thường có thể cải thiện hiệu suất phân loại bằng cách chuyển sang sử dụng xác suất phù hợp là 0,5 làm điểm cắt của bạn để phân loại các trường hợp thành mặc định và không mặc định. Ví dụ: tôi nhận được tỷ lệ phân loại chính xác là 0,88 và 0,58 với điểm cắt là 4 cho một glm với tất cả các tương tác bậc 2. (Điều này có thể dẫn đến quá mức và dường như có một số vấn đề về thứ hạng, nhưng đó là một câu chuyện khác.)

Mã số:

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)

đầu ra một phần:

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 

Cảm ơn vì đã cố gắng, tôi cũng đã chơi với ngưỡng và nó cung cấp rất ít sự phân loại.
Brandon Bertelsen

1
Mặc dù, nó đã làm một công việc tốt hơn để dự đoán người mặc định.
Brandon Bertelsen

4

Tôi không phải là một chuyên gia hồi quy logistic, nhưng nó không chỉ là vấn đề của dữ liệu không cân bằng? Có lẽ bạn có nhiều người không mặc định hơn nhiều so với người mặc định, điều có thể thay đổi dự đoán để đối phó tốt hơn với lớp lớn hơn. Hãy thử loại bỏ một số người không mặc định và xem điều gì sẽ xảy ra.


Tôi đã dùng thử, cho thấy không có sự tăng hay giảm đáng kể nào về hiệu quả tổng thể (hiệu quả là nó dự đoán những người mặc định / người không mặc định tốt như thế nào trong trường hợp không có dương tính giả, phủ định sai)
Brandon Bertelsen

1
@Brandon Tôi đã thử một vài ý tưởng khác và nó dường như không có ích. Điều này cho thấy rằng bộ này chỉ đủ khó để thực hiện điều này (có thể mặc định chỉ được điều khiển bởi một số yếu tố ngẫu nhiên không thể đoán trước).

@mbq, cảm ơn vì đã dành thời gian! Nhiều đánh giá cao.
Brandon Bertelsen

1
Cá nhân, tôi nghĩ rằng đây là dữ liệu trực tiếp mà prof của tôi được trả tiền để làm người mẫu trong một trong những công việc tư vấn của anh ấy ... nhưng đó hoàn toàn là một vấn đề khác
Brandon Bertelsen

1
giải pháp cho một vấn đề trong phân tích dữ liệu không bao giờ là "vứt bỏ các điểm dữ liệu hợp lệ" - bạn có thể thử sử dụng các tập dữ liệu huấn luyện cân bằng để tránh các hiệu ứng này, nhưng bạn vẫn nên đánh giá dự đoán trên tất cả dữ liệu (ví dụ: tất cả của bộ xác nhận).
fabian

4

Trong hồi quy logistic, phân phối sai lệch của các biến kết quả (trong đó có nhiều sự kiện không xảy ra với các sự kiện hoặc ngược lại), điểm cắt hoặc trình kích hoạt xác suất cần phải được điều chỉnh, nhưng nó sẽ không ảnh hưởng nhiều đến phân loại tổng thể hiệu quả. Điều này sẽ luôn giữ nguyên, nhưng bạn hiện đang phân loại các sự kiện vì xác suất "cơ hội" trong tập dữ liệu đó sẽ luôn khiến bạn có nhiều khả năng phân loại thành các sự kiện không. Điều này cần phải được điều chỉnh cho. Trong thực tế, trong một tình huống như vậy, không có gì lạ khi thấy hiệu quả tổng thể của việc phân loại đi xuống, vì trước đây nó đã bị thổi phồng do sai sót do tình cờ.

Hãy nghĩ về nó theo cách này, nếu bạn có một sự kiện mà 90% không làm điều đó và 10% làm điều đó, thì nếu bạn đưa mọi người vào nhóm "không làm điều đó", bạn sẽ tự động nhận được 90% đúng, và điều đó thậm chí không cần cố gắng, chỉ là cơ hội thuần túy, bị thổi phồng bởi sự sai lệch trong phân phối của nó.

Vấn đề tương tác không liên quan đến sai lệch này, và nên được dẫn dắt bởi lý thuyết. Rất có thể bạn sẽ luôn cải thiện việc phân loại bằng cách thêm các thuật ngữ bổ sung, bao gồm chỉ đơn giản là thêm các tương tác, nhưng bạn làm như vậy bằng cách thường xuyên làm quá mức mô hình. Sau đó bạn phải quay lại và có thể giải thích điều này.

Nhà phân tích dữ liệu Matt P, Đại học Illinois Urbana Champaign


2

Bạn có thể thử bao gồm tất cả các hiệu ứng tương tác. Sau đó, bạn có thể sử dụng hồi quy logistic thường xuyên L1 / L2 để giảm thiểu sự phù hợp quá mức và tận dụng bất kỳ tính năng hữu ích nào. Tôi thực sự thích gói glmnet của Hastie / Tibshirani (http://cran.r-project.org/web/packages/glmnet/index.html).


Vấn đề duy nhất là, tôi phải có khả năng tái tạo điều này với đầu ra SPSS. :( Tôi vẫn sẽ thử nó!
Brandon Bertelsen

Đã thử nó, dường như không thể để dự đoán.glmnet () hoạt động. Có phép thuật nào cần phải xảy ra khi bạn đặt newx không?
Brandon Bertelsen

2

Tôi biết câu hỏi của bạn là về hồi quy logistic và vì đây là bài tập về nhà nên cách tiếp cận của bạn có thể bị hạn chế. Tuy nhiên, nếu mối quan tâm của bạn là sự tương tác và độ chính xác của phân loại, có thể sẽ rất thú vị khi sử dụng một cái gì đó như GIỎ HÀNG để mô hình hóa điều này.

Đây là một số mã R để tạo cây cơ bản. Tôi đã đặt rpart lỏng trên khung dữ liệu enire ở đây. Có lẽ không phải là cách tiếp cận tốt nhất mà không có kiến ​​thức trước và phương pháp xác nhận chéo:

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)

Tôi không chắc chắn làm thế nào để sản xuất bảng phân loại. Không nên quá khó từ các giá trị dự đoán từ đối tượng mô hình và các giá trị ban đầu. Bất cứ ai có bất cứ lời khuyên ở đây?


Phân loại và hồi quy cây? Đó thực sự là một phần thứ hai của bài tập. Sau khi tôi tối đa hóa việc phân loại, tôi phải phân loại dựa trên các phân số xác suất.
Brandon Bertelsen

Trên thực tế, ai đó đã giúp tôi tạo bảng phân loại trong câu hỏi liên quan này: stats.stackexchange.com/questions/4832/. Cảm ơn ví dụ với R, đánh giá cao, tôi đã tìm thấy hướng dẫn tương tự trên trang web quick-r. Mặc dù, đối với học sinh này, tôi buộc phải áp dụng CHAID trong SPSS.
Brandon Bertelsen

predictphương pháp dự đoán, table(originalClasses,predictedClasses)để xây dựng bảng. Tôi đã thử RF (thông thường nó có độ chính xác như trong GIỎ HÀNG quá mức, nhưng không quá phù hợp) và kết quả không tốt hơn nhiều glm.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.