04 ROC曲线与AUC:从零开始手动计算
核心问题如何评估一个二分类模型的好坏尤其是当数据不平衡时准确率会“骗人”我们需要更可靠的指标——ROC和AUC。一、为什么要用ROC和AUC1.1 准确率的陷阱不平衡数据问题假设我们有一个欺诈检测模型正常交易9900笔负例欺诈交易100笔正例如果模型把所有交易都预测为“正常”那么准确率 9900/10000 99% —— 看起来很厉害但实际上一个欺诈都没抓到模型毫无用处。准确率在不平衡数据下失效。我们需要一个不受类别比例影响的评估指标。1.2 ROC与AUC的优势ROC曲线展示模型在所有可能的分类阈值下的性能横轴是假正率FPR纵轴是真正率TPR。AUC值ROC曲线下的面积衡量模型的排序能力——即随机选一个正样本和一个负样本模型给正样本打分高于负样本的概率。核心优势对类别不平衡非常鲁棒因为TPR只关注正样本FPR只关注负样本两者独立计算。二、核心概念TPR、FPR与阈值2.1 混淆矩阵回顾二分类预测为正Positive预测为负Negative真实为正TP真正例FN假负例漏报真实为负FP假正例误报TN真负例2.2 两个关键比率真正率TPR也叫召回率/Sensitivity含义所有真实正例中被正确预测出来的比例。假正率FPR含义所有真实负例中被错误预测为正例的比例。2.3 阈值Threshold的作用分类器通常输出一个“概率”或得分。我们需要设定一个阈值超过阈值为正否则为负。阈值变化预测倾向对负例的影响对正例的影响提高阈值更严格只把非常确信的判为正FP↓FPR↓TP↓TPR↓降低阈值更宽松更多样本判为正FP↑FPR↑TP↑TPR↑核心思想把阈值从1.0逐渐降到0.0每改变一次阈值就得到一个(TPR, FPR)点。将所有点连成曲线就是ROC曲线。三、手动计算ROC曲线的四个步骤步骤1准备数据每个测试样本有真实标签1正例0负例和预测概率模型输出的属于正例的概率。步骤2按预测概率降序排列将所有样本按预测概率从高到低排序。概率最高的排在最前面。步骤3逐步降低阈值累计TP/FP计算(TPR, FPR)初始状态阈值 最高概率 → 没有样本被预测为正 → TP0, FP0 → TPR0, FPR0 → 点(0,0)然后依次把当前样本的预测概率作为阈值即该样本及之前的所有样本判为正累计TP和FP计算TPR和FPR得到一个新的点。直到所有样本都被判为正 → TP 全部正例数FP 全部负例数 → TPR1, FPR1 → 点(1,1)步骤4用梯形法则计算AUCAUC ROC曲线下面积。用相邻两点之间的梯形面积累加得到。四、完整数值示例7个样本4.1 数据准备步骤1样本编号真实标签预测概率S11正0.95S20负0.82S31正0.78S40负0.61S51正0.55S60负0.40S70负0.22总正例数 P 3S1, S3, S5总负例数 N 4S2, S4, S6, S74.2 排序步骤2数据已经按概率降序排列从上到下递减无需调整。4.3 逐步降低阈值计算(TPR, FPR)步骤3步骤当前样本真实标签预测概率累计TP累计FPTPR TP/3FPR FP/4(FPR, TPR)起点---000.0000.000(0.000, 0.000)1S11正0.95100.3330.000(0.000, 0.333)2S20负0.82110.3330.250(0.250, 0.333)3S31正0.78210.6670.250(0.250, 0.667)4S40负0.61220.6670.500(0.500, 0.667)5S51正0.55321.0000.500(0.500, 1.000)6S60负0.40331.0000.750(0.750, 1.000)7S70负0.22341.0001.000(1.000, 1.000)理解每一步都把当前样本的预测概率作为新的阈值认为“概率≥该值”的为正例。由于已经排序实际就是累计到当前行。4.4 梯形法则计算AUC步骤4我们逐段计算从起点到第一个点再到第二个点……直到最后4.5 ROC曲线形状理解垂直段ΔFPR0TPR上升FPR不变 → 说明模型连续遇到了正例这是好现象。水平段ΔTPR0FPR上升TPR不变 → 说明遇到了负例发生了误报模型表现变差。本例中AUC0.75属于良好模型。五、第二个示例更好的模型5.1 数据与排序样本真实标签预测概率排序后S310.92第1正S610.87第2正S100.62第3负S210.45第4正S400.33第5负S500.21第6负P3, N3。5.2 逐步计算步骤累计TP累计FPTPRFPR点起点000.0000.000(0.000,0.000)S3(正)100.3330.000(0.000,0.333)S6(正)200.6670.000(0.000,0.667)S1(负)210.6670.333(0.333,0.667)S2(正)311.0000.333(0.333,1.000)S4(负)321.0000.667(0.667,1.000)S5(负)331.0001.000(1.000,1.000)5.3 梯形法求AUC重要垂直段前两步 FPR0TPR从0→0.333→0.667这两段ΔFPR0面积0。后续计算(0.000→0.333): ΔFPR0.333, 平均TPR(0.6670.667)/20.667 → 面积0.222(0.333→0.333): ΔFPR0 → 面积0(0.333→0.667): ΔFPR0.334, 平均TPR(1.0001.000)/21.000 → 面积≈0.334(0.667→1.000): ΔFPR0.333, 平均TPR(1.0001.000)/21.000 → 面积0.333AUC 0.222 0.334 0.333 0.889四舍五入示例二 AUC0.889 示例一 AUC0.750因为前两个样本都是正例模型对高置信样本判断准确排序能力更强。六、AUC值的解读一看就懂AUC值范围含义通俗解释AUC 1.0完美分类器存在一个阈值能把所有正负例完全分开理想情况现实中极少0.9 ≤ AUC 1.0优秀模型区分能力很强但需警惕过拟合0.7 ≤ AUC 0.9良好大多数实用模型的范围可以接受0.5 AUC 0.7较差比随机好一点但有明显改进空间AUC 0.5随机猜测模型没有区分能力等于抛硬币AUC 0.5比随机还差预测方向反了比如把正例预测为负的概率更高可以反转标签使用物理意义AUC 随机选一个正样本和一个负样本模型给正样本打分高于负样本的概率。例如 AUC0.75意味着有75%的概率正样本的得分高于负样本。七、常见误区与注意事项AUC只关心排序不关心校准即使预测概率整体偏高或偏低只要排序正确AUC仍然很高。AUC适合不平衡数据但不能完全替代PR曲线当正类非常稀少如1%且业务只关注正类时建议同时看精确率-召回率曲线PR曲线。AUC不能跨数据集比较不同数据集的正负分布不同AUC值不能直接比较。手动计算时务必先按概率降序排列乱序会导致ROC曲线错误。八、核心公式与步骤速记卡TPR TP/(TPFN)FPR FP/(FPTN)ROC曲线横轴FPR纵轴TPRAUC梯形公式手动计算四步准备数据 → 排序 → 逐步累计 → 梯形法求和