【问题标题】:Predictor in logistic regression for a large sample size (1.8 million obs.) predicts only 0's大样本量(180 万观察)的逻辑回归预测器仅预测 0
【发布时间】:2021-05-12 20:50:32
【问题描述】:

我正在尝试运行逻辑回归模型来预测个别贷款的违约概率。我有 185 万个观测值的大样本量,其中大约 81% 已完全还清,其余的则违约。我已经使用 20 多个其他具有统计意义的预测变量运行逻辑回归,并收到警告“发生拟合概率 0 或 1”,通过逐步添加预测变量,我发现只有 1 个预测变量导致了这个问题,即“年收入” (年度公司)。我只用这个预测器运行了一个逻辑回归,发现它只预测 0(完全还清的贷款),尽管有很大比例的违约贷款。我尝试了不同比例的训练和测试数据。如果我以将原始样本的 80% 分配给测试集并将 20% 分配给训练集的方式拆分模型,则 R 不会显示拟合概率警告,但模型仍然仅在测试集上预测 0 .下面我附上有关的小代码以防万一。在这种情况下,我怀疑添加我的数据的一小部分样本是否有任何用处,但如果我弄错了,请告诉我,我会添加它。

>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,我看到的模拟案例样本量很小。到目前为止,我对实施惩罚逻辑回归犹豫不决,因为我认为我的问题不是完美分离。另外,值得指出的是,由于研究的具体情况,我想专门使用逻辑回归。我该如何克服手头的问题?

【问题讨论】:

  • 您可能应该熟悉机器学习的不平衡分类问题,例如这是我的第一个 Google 链接(还有数以千计的其他站点):dataaspirant.com/handle-imbalanced-data-machine-learning 关键是如果你有很强的类不平衡,那么模型能做的最好的就是预测多数类。如果您更改训练数据,使其恰好包含 50% 的 1 类和 50% 的 2 类,您的问题可能已经解决(假设您的数据/代码没有其他问题)。
  • 是不是因为你要求二项分布,年收入是连续变量?除非你有“是”和“否”的类别,也就是 1 和 0
  • @deschen 我尝试了过采样、欠采样和 ROSE,但是在每个样本上训练并预测测试数据的所有 4 个模型的 AUC 显示相同的 0.538。我应该问一个特定于这个的新问题吗?
  • @Andy Annual_inc 是一个连续变量,是不是错了?如您所见,我并不精通统计和R:D

标签: r logistic-regression


【解决方案1】:

正如@deschen 所建议的那样,我使用 ROSE 包中的重采样 ROSE 技术,它解决了我的问题,尽管过采样、欠采样方法以及两者的组合也有效。

【讨论】:

    猜你喜欢
    • 2020-09-22
    • 2019-10-01
    • 2021-04-30
    • 2020-06-26
    • 2019-03-05
    • 2019-06-07
    • 1970-01-01
    • 2021-02-27
    • 2022-11-27
    相关资源
    最近更新 更多