1

我在 Rstudio 中为客户流失预测构建了二元逻辑回归。由于该模型使用的数据不平衡,我还包括了权重。然后我尝试通过尝试和错误找到最佳截止值,但是为了完成我的研究,我必须结合 ROC 曲线来找到最佳截止值。下面我提供了用于构建模型的脚本 (fit2)。重量存储在“W”中。这表明错误识别流失者的成本是错误识别非流失者成本的 14 倍。

#CH1 logistic regression

library(caret)
W = 14
lvl = levels(trainingset$CH1)
print(lvl)
#if positive we give it the defined weight, otherwise set it to 1
fit_wts = ifelse(trainingset$CH1==lvl[2],W,1)
fit2 = glm(CH1 ~ RET + ORD + LVB + REVA + OPEN + REV2KF + CAL + PSIZEF + COM_P_C + PEN + SHOP, data = trainingset, weight=fit_wts, family=binomial(link='logit'))
# we test it on the test set
predlog1 = ifelse(predict(fit2,testset,type="response")>0.5,lvl[2],lvl[1])
predlog1 = factor(predlog1,levels=lvl)
predlog1
confusionMatrix(pred,testset$CH1,positive=lvl[2])

对于这项研究,我还使用 pROC 包为决策树构建了 ROC 曲线。但是,当然,相同的脚本对于逻辑回归的工作方式不同。我使用下面的脚本为逻辑回归创建了 ROC 曲线。

prob=predict(fit2, testset, type=c("response"))
testset$prob=prob
library(pROC)
g <- roc(CH1 ~ prob, data = testset, )
g
plot(g)

这导致了下面的 ROC 曲线。

在此处输入图像描述

如何从此 ROC 曲线中获得最佳截止?

4

1 回答 1

0

获得“最佳”截止完全独立于模型的类型,因此您可以像使用 pROC 的任何其他类型的模型一样获得它。具有以下coords功能:

 coords(g, "best", transpose = FALSE)

或直接在情节上:

plot(g, print.thres=TRUE)

现在以上只是最大化敏感性和特异性的总和。这通常过于简单化,您可能需要一个适合您的用例的“最佳”的明确定义。这主要超出了这个问题的范围,但作为一个起点,您应该查看coords 函数文档的 Best Thresholds 部分以获取一些基本选项。

于 2020-03-23T08:09:27.977 回答