Day 4分类评估深入ROC曲线、PR曲线、阈值选择在机器学习的分类任务中仅仅关注准确率Accuracy往往是危险的尤其是在数据不平衡的场景下。一个预测所有样本都为负类的模型在正样本占比仅为1%的数据集上也能获得99%的准确率但这显然毫无价值。为了深入、全面地评估模型性能我们需要引入更高级的评估工具和策略。本节将深入理解ROC曲线、PR曲线以及科学的阈值选择方法从“知其然”进阶到“知其所以然”。 目录分类评估基础回顾ROC曲线深入理解PR曲线精确率-召回率曲线阈值选择策略多分类评估扩展模型比较与选择第一部分分类评估基础回顾1.5小时理论1.1 为什么需要深入评估简单准确率的局限性类别不平衡时失效无法评估概率质量不能反映模型在不同阈值下的表现深入评估的价值全面理解模型性能根据业务需求选择最优阈值比较不同模型的优劣1.2 核心概念回顾一切评估的起点都是混淆矩阵。它将预测结果与真实标签进行交叉对比形成四个关键区域预测为负 (Negative)预测为正 (Positive)实际为负TN (真负例)FP (假正例)实际为正FN (假负例)TP (真正例)TP (True Positive)预测对了确实是正类。TN (True Negative)预测对了确实是负类。FP (False Positive)预测错了把负类当成了正类误报。FN (False Negative)预测错了把正类当成了负类漏报。1.3 混淆矩阵衍生指标基于混淆矩阵我们可以计算出多个核心指标准确率 (Accuracy)TPTNTPTNFPFN\cfrac {\text{TP} \text{TN}} {\text{TP} \text{TN} \text{FP} \text{FN}}TPTNFPFNTPTN​。所有预测中正确的比例。精确率 (Precision)TPTPFP\cfrac {\text{TP}} {\text{TP} \text{FP}}TPFPTP​。在所有预测为正的样本中真正为正的比例。它回答的问题是“我预测为正的样本有多大的把握是准确的”召回率 (Recall) / 真正率 (TPR)TPTPFN\cfrac {\text{TP}} {\text{TP} \text{FN}}TPFNTP​。在所有实际为正的样本中被正确预测出来的比例。它回答的问题是“所有的正样本我找出了多少”假正率 (FPR)FPFPTN\cfrac {\text{FP}} {\text{FP} \text{TN}}FPTNFP​。在所有实际为负的样本中被错误预测为正的比例。特异度 (TNR)TNFPTN\cfrac {\text{TN}} {\text{FP} \text{TN}}FPTNTN​。在所有预测为负的样本中真正为负的比例。第二部分ROC曲线深入理解ROC曲线是评估二分类模型性能最经典的工具之一它能全面展示模型在不同决策阈值下的表现。2.1 ROC曲线定义ROCReceiver Operating Characteristic受试者工作特征曲线以**假正率FPR**为横轴**真正率TPR即召回率**为纵轴。它是如何通过调整阈值得到的呢逻辑回归等模型输出的是一个概率值例如股票上涨概率是0.7。我们需要设定一个阈值Threshold来决定分类。默认是0.5概率≥0.5判为正否则为负。如果我们把阈值从0调到1每一次变动都会产生一组新的(FPR, TPR)坐标点。将所有这些点连接起来就形成了ROC曲线。2.2 ROC曲线的解读左上角是“黄金点”坐标(0, 1)代表FPR0没有误报且TPR1没有漏报这是完美的分类器。曲线越靠近左上角模型性能越好。对角线虚线代表随机猜测的模型例如抛硬币。如果你的模型曲线在这条线附近说明它没有区分能力。曲线下的面积AUC量化了模型的整体性能。2.3 AUC的含义AUC (Area Under Curve)ROC曲线下的面积取值范围在0.5到1之间。AUC 0.5随机猜测AUC 0.7-0.8可接受AUC 0.8-0.9优秀AUC 0.9可能过拟合AUC的概率解释随机抽取一个正样本和一个负样本模型给正样本打出的分数高于负样本的概率。例如AUC0.8意味着有80%的概率模型能正确地将正样本排在负样本前面。2.4 ROC曲线的优缺点优点缺点不受类别不平衡影响对正负样本比例不敏感评估排序能力不直接反映精确率便于模型比较在极端不平衡时过于乐观第三部分PR曲线精确率-召回率曲线当面对极度不平衡的数据集时PR曲线往往比ROC曲线更能反映模型的真实能力。3.1 为什么需要PR曲线ROC在类别极度不平衡时的问题负样本很多时FPR变化不明显模型可能看起来很优秀但实际上很差PR曲线更适合正样本稀少如欺诈检测、罕见事件预测关注精确率和召回率3.2 PR曲线定义PR曲线X轴召回率 (RecallTPTPFN\text{Recall} \cfrac {\text{TP}} {\text{TP} \text{FN}}RecallTPFNTP​)Y轴精确率 (PrecisionTPTPFP\text{Precision} \cfrac {\text{TP}} {\text{TP} \text{FP}}PrecisionTPFPTP​)3.3 PR曲线的解读右上角是“黄金点”代表高精确率和高召回率。曲线越靠近右上角模型性能越好。曲线下面积AP平均精确率Average Precision是PR曲线下的面积用于量化性能。AP越高越好。3.4 ROC vs PR曲线对比特性ROCPR对不平衡敏感度不敏感非常敏感适用场景类别相对平衡类别极度不平衡易解释性中等直观常用指标AUCAverage Precision (AP)第四部分阈值选择策略4.1 默认阈值0.5的问题问题假设两类错误代价相同不考虑业务场景可能不是最优的4.2 最大化F1分数F12×(Precision×Recall)PrecisionRecall \text{F1} \cfrac{2\times (\text{Precision} \times \text{Recall})}{\text{Precision} \text{Recall}}F1PrecisionRecall2×(Precision×Recall)​策略选择使F1最大的阈值# 伪代码best_thresholdargmax(F1(threshold))4.3 最大化精确率给定召回率下限场景要求抓住至少80%的机会策略在Recall ≥ 0.8的条件下选择Precision最大的阈值4.4 最大化召回率给定精确率下限场景要求信号准确率至少70%策略在Precision ≥ 0.7的条件下选择Recall最大的阈值4.5 业务成本最小化成本矩阵预测正预测负实际正CTPC_\text{TP}CTP​CFNC_\text{FN}CFN​实际负CFPC_\text{FP}CFP​CTNC_\text{TN}CTN​总成本CostCTP×TPCFN×FNCFP×FPCTN×TN \text{Cost} C_\text{TP} \times \text{TP} C_\text{FN} \times \text{FN} C_\text{FP} \times \text{FP} C_\text{TN} \times \text{TN}CostCTP​×TPCFN​×FNCFP​×FPCTN​×TN量化交易示例CFNC_\text{FN}CFN​漏报错过一次上涨损失潜在收益CFPC_\text{FP}CFP​误报错误买入造成亏损 交易成本第五部分多分类评估扩展5.1 多分类ROC和PR方法One-vs-Rest (OvR)为每个类别计算One-vs-One (OvO)每对类别计算5.2 宏平均 vs 微平均方法计算方式适用场景宏平均先算每类指标再平均各类别同等重要微平均先汇总混淆矩阵再计算样本量决定重要性5.3 多分类评估指标fromsklearn.metricsimportclassification_report# 输出每个类别的精确率、召回率、F1print(classification_report(y_true,y_pred))第六部分模型比较与选择6.1 比较方法AUC比较数值越大越好ROC曲线曲线越靠近左上角越好PR曲线曲线越靠近右上角越好部分AUC关注特定FPR区间6.2 统计显著性检验DeLong检验比较两个模型的AUC是否有显著差异fromscipy.statsimportnorm# 计算AUC的置信区间# 检验AUC差异是否显著6.3 交叉验证评估fromsklearn.model_selectionimportcross_val_score# 计算CV AUCauc_scorescross_val_score(model,X,y,cv5,scoringroc_auc)print(fAUC:{auc_scores.mean():.4f}±{auc_scores.std():.4f})