[英]Predictor in logistic regression for a large sample size (1.8 million obs.) predicts only 0's
我正在嘗試運行邏輯回歸 model 來預測個別貸款的違約概率。 我有 185 萬個觀測值的大樣本量,其中大約 81% 已完全還清,rest 違約。 我已經使用 20 多個其他具有統計意義的預測變量運行邏輯回歸,並收到警告“發生擬合概率 0 或 1”,通過逐步添加預測變量,我發現只有 1 個預測變量導致了這個問題,即“年收入” (年度公司)。 我只用這個預測器運行了一個邏輯回歸,發現它只預測 0(完全還清的貸款),盡管有很大比例的違約貸款。 我嘗試了不同比例的訓練和測試數據。 If I give split the model in the way that gives 80% of the original sample to the Testing set and 20% to the Training set, R doesn't show the fitted probabilities warning, but the model still predicts 0's only on the testing set . 下面我附上有關的小代碼以防萬一。 我懷疑在這種情況下添加我的數據的小樣本是否有任何用處,但如果我弄錯了,請告訴我,我會添加它。
>set.seed(42)
>indexes <- sample(1:nrow(df), 0.8*nrow(df))
>df_test = df[indexes,]
>df_train = df[-indexes,]
>mymodel_2 <- glm(loan_status ~ annual_inc, data = df_train, family = 'binomial')
>summary(mymodel_2)
Call:
glm(formula = loan_status ~ annual_inc, family = "binomial",
data = df_train)
Deviance Residuals:
Min 1Q Median 3Q Max
-0.6902 -0.6530 -0.6340 -0.5900 5.4533
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -1.308e+00 8.290e-03 -157.83 <2e-16 ***
annual_inc -2.426e-06 9.382e-08 -25.86 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 352917 on 370976 degrees of freedom
Residual deviance: 352151 on 370975 degrees of freedom
AIC: 352155
Number of Fisher Scoring iterations: 4
>res <- predict(mymodel_2, df_test, type = "response")
>confmatrix <- table(Actual_value = df_test$loan_status, Predicted_value = res >0.5)
>confmatrix
Predicted_value
Actual_value FALSE
0 1212481
1 271426
而且,我在網上搜索這個問題的解決方案時,發現經常被歸結為完美分離,但我的案例只預測0,而且我看到的模擬案例樣本量很小。 到目前為止,我對實施懲罰邏輯回歸猶豫不決,因為我認為我的問題不是完美分離。 另外,值得指出的是,由於研究的具體情況,我想專門使用邏輯回歸。 我怎樣才能克服手頭的問題?
正如@deschen 建議的那樣,我對 R 使用了來自 ROSE package 的重采樣 ROSE 技術,它解決了我的問題,盡管過采樣、欠采樣方法以及兩者的組合也有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.