我在 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 曲线中获得最佳截止?