我正在尝试理解Logit模型的Python统计模型中的predict
函数。它的文档在这里。
当我构建Logit模型并使用predict
时,它会返回从0到1的值,而不是0或1。现在我读到这篇文章说,这些都是概率,我们需要一个阈值。Python statsmodel.api逻辑回归(Logit(
现在,我想生成AUC数,并使用sklearn(docs(中的roc_auc_score
。
这是我开始感到困惑的时候。
- 当我将Logit模型的原始预测值(概率(作为第二个参数
y_score
放入roc_auc_score
时,我得到了大约80%的合理AUC值。roc_auc_score
函数如何知道我的概率中哪些等于1,哪些等于0?没有任何地方给我设置门槛的机会 - 当我使用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 |