用ROC曲线为我的加权二元逻辑回归(glm)在R

用ROC曲线为我的加权二元逻辑回归(glm)在R,r,logistic-regression,glm,roc,proc-r-package,R,Logistic Regression,Glm,Roc,Proc R Package,我已经在Rstudio中建立了一个用于客户流失预测的二元逻辑回归。由于该模型使用的数据不平衡,我还包括了权重。然后我试着通过尝试和错误来找到最佳截止点,但是为了完成我的研究,我必须结合ROC曲线来找到最佳截止点。下面我提供了用于构建模型的脚本(fit2)。重量存储在“W”中。这表明错误识别一个搅动器的成本是错误识别非搅动器的成本的14倍 #CH1 logistic regression library(caret) W = 14 lvl = levels(trainingset$CH1) pr

我已经在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)
prob=predict(fit2,testset,type=c(“响应”))
测试集$prob=prob
图书馆(pROC)
g获得“最佳”截止值完全独立于模型类型,因此您可以像使用pROC获得任何其他类型的模型一样获得它。使用
coords
功能:

 coords(g, "best", transpose = FALSE)
或者直接在绘图上:

plot(g, print.thres=TRUE)
现在,以上只是将敏感性和特异性之和最大化。这通常过于简单化,您可能需要一个适合您的用例的“最优”的清晰定义。这基本上超出了这个问题的范围,但是作为一个起点,你应该看看一些基本的选择

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

 coords(g, "best", transpose = FALSE)
或者直接在绘图上:

plot(g, print.thres=TRUE)

现在,以上只是将敏感性和特异性之和最大化。这通常过于简单化,您可能需要一个适合您的用例的“最优”的清晰定义。这基本上超出了这个问题的范围,但是作为一个起点,你应该看看一些基本的选择

你说它不工作是什么意思?你看到了什么错误消息?@Calimo我对文本做了一点修改,希望现在更清楚。你对所谓的“最佳”有什么定义吗?你说它不起作用是什么意思?你看到了什么错误消息?@Calimo我对文本做了一点修改,希望现在更清楚。你对所谓的“最佳”有什么定义吗?