You need to enable JavaScript to run this app. sklearn中roc_auc_score与plot_roc_curve的AUC计算差异问题
优惠活动
大模型
产品
解决方案
定价
更多

sklearn中roc_auc_score与plot_roc_curve的AUC计算差异问题

AUC结果偏差的核心原因

两个计算路径输入的预测值类型存在本质差异:

  • 你手动调用roc_auc_score()时,传入的yPred来自model.predict(X_test),输出是非0即1的硬分类标签,属于离散值。
  • plot_roc_curve()内部不会使用predict()的输出,而是自动调用模型的predict_proba()(或decision_function(),匹配模型自身实现逻辑),获取范围连续的预测置信度得分(比如正类的概率值),基于全量阈值扫描生成完整ROC曲线后计算AUC。

验证方式

修改你的代码,将连续预测概率传入roc_auc_score,即可得到和绘图组件完全一致的结果:

# 取样本属于正类的预测概率作为输入
y_pos_proba = model.predict_proba(X_test)[:, 1]
print(roc_auc_score(y_test, y_pos_proba))

为什么硬标签计算的AUC会偏低

用离散的0/1标签计算AUC,相当于只截取了全量ROC阈值中的1个点的分类结果,丢失了模型对不同样本的置信度差异信息,无法完整反映模型对样本的排序能力,因此计算出的AUC必然低于基于连续得分得到的标准AUC。你在真实数据集上观测到的0.1量级的偏差,就是两种计算逻辑的固有差值,和模型训练效果无关。

补充提示

  • 从sklearn 1.2版本开始,plot_roc_curve已被弃用,推荐使用RocCurveDisplay.from_estimator或RocCurveDisplay.from_predictions替代,核心计算逻辑没有变化。
  • 计算AUC时必须传入连续的预测分数(概率、决策得分等),不要直接传入predict()输出的硬分类标签。

内容的提问来源于stack exchange,提问作者hafnerl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.13 23:36:10