逻辑回归中更好的违约分类

机器算法验证 r 物流 spss 自习
2022-03-27 03:41:09

完全披露:这是家庭作业。我已经包含了数据集的链接(http://www.bertelsen.ca/R/logistic-regression.sav

我的目标是最大限度地预测该数据集中的贷款违约者。

到目前为止,我提出的每个模型都预测 >90% 的非违约者,但 <40% 的违约者使总体分类效率约为 80%。那么,我想知道变量之间是否存在交互作用?在逻辑回归中,除了测试每个可能的组合之外,还有没有办法识别潜在的交互作用?或者,一种提高违约者分类效率的方法。

我被困住了,任何建议都会对您选择单词、R 代码或 SPSS 语法有所帮助。

下面的直方图和散点图概述了我的主要变量(二分变量除外)

主要变量的描述:

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 中,这里是:

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

替代文字 替代文字

4个回答

在诸如此类的不平衡数据集中,您通常可以通过不再使用 0.5 的拟合概率作为将案例分类为违约者和非违约者的切点来提高分类性能。例如,对于具有所有二阶交互的 glm,我得到了 0.88 和 0.58 的正确分类率,其截点为 0.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 

在逻辑回归中,结果变量的高度偏态分布(其中有更多的非事件到事件,反之亦然),切点或概率触发确实需要调整,但它不会对整体分类产生太大影响效率。这将始终保持大致相同,但您目前正在对事件进行分类不足,因为此类数据集中的“机会”概率总是会让您更有可能分类为非事件。这是需要调整的。事实上,在这种情况下,分类的整体效率下降的情况并不少见,因为它之前是由于偶然的错误计算而被夸大的。

这样想,如果你有一个 90% 不做而 10% 做的事件,那么如果你把每个人都放在“不做”组中,你会自动得到 90% 的正确,并且甚至没有尝试,只是纯粹的机会,被它的分布偏度夸大了。

相互作用的问题与这种偏斜无关,应该由理论​​驱动。您很可能总是通过添加额外的术语来改进分类,包括简单地添加交互,但是您经常通过过度拟合模型来做到这一点。然后,您必须返回并能够解释这一点。

Matt P 数据分析师,伊利诺伊大学厄巴纳香槟分校

我不是逻辑回归专家,但这不只是数据不平衡的问题吗?可能您的非违约者比违约者多得多,这可能会改变预测以更好地处理更大的班级。尝试踢出一些非违约者,看看会发生什么。

您可以尝试包括所有交互效果。然后,您可以使用 L1/L2 正则化逻辑回归来最大限度地减少过度拟合并利用任何有用的功能。我真的很喜欢 Hastie/Tibshirani 的 glmnet 包 (http://cran.r-project.org/web/packages/glmnet/index.html)。