StatsModels的预测功能如何与scikit的roc_auc_score交互



我正在尝试理解Logit模型的Python统计模型中的predict函数。它的文档在这里。

当我构建Logit模型并使用predict时,它会返回从0到1的值,而不是0或1。现在我读到这篇文章说,这些都是概率,我们需要一个阈值。Python statsmodel.api逻辑回归(Logit(

现在,我想生成AUC数,并使用sklearn(docs(中的roc_auc_score

这是我开始感到困惑的时候。

  1. 当我将Logit模型的原始预测值(概率(作为第二个参数y_score放入roc_auc_score时,我得到了大约80%的合理AUC值。roc_auc_score函数如何知道我的概率中哪些等于1,哪些等于0?没有任何地方给我设置门槛的机会
  2. 当我使用0.5的阈值手动将概率转换为0或1时,我得到的AUC约为50%。为什么会发生这种情况

这里有一些代码:

m1_result = m1.fit(disp = False)
roc_auc_score(y, m1_result.predict(X1))
AUC: 0.80
roc_auc_score(y, [1 if X >=0.5 else 0 for X in m1_result.predict(X1)])
AUC: 0.50

为什么会出现这种情况?

您计算AUC的第二种方法是错误的;根据定义,AUC需要概率,而不是像这里所做的那样,在阈值化后生成0/1的硬类预测。所以,你的AUC是0.80。

在AUC计算中,您没有自己设置阈值;粗略地说,正如我在其他地方解释的那样,AUC测量在所有可能的决策阈值上平均的二进制分类器的性能。

在这里再次解释AUC计算的基本原理和细节是过分的;相反,这些其他SE线程(以及其中的链接(将帮助您获得以下想法:

  • 在分类中,测试准确性和AUC评分之间有什么区别
  • AUC相对于标准准确度的优势
  • ROC AUC得分低,但准确率高
  • 比较模型之间的AUC、对数损失和准确性得分

predict根据拟合模型得出事件的估计概率。也就是说,每个元素都对应于您的模型为每个观测计算的预测概率。

构建ROC曲线的过程包括选择每个预测概率作为阈值,测量其假阳性率和真阳性率,并将这些结果绘制为折线图。该曲线下方的面积为AUC。

为了将其可视化,假设您有以下数据:

观察 observed_result predicted_prob
1 0 0.1
2 0 0.5
3 1 0.9

最新更新