评价二分类模型#
学习目标与记号#
准确解释混淆矩阵以及 Accuracy、Precision、Recall、FPR、Specificity 和 F1 分数;
比较不同评价指标的优点、局限和适用场景,并说明分类阈值、正类与负类的样本数量比例以及误判代价如何影响指标;
解释并实现 ROC、AUC 与 Precision-Recall 曲线,区分固定阈值下的分类表现、跨阈值的排序能力和概率预测质量。
以下约定类别 1 为正类、类别 0 为负类。由于本节讨论的内容是分类模型的衡量指标,我们假设已经基于训练集得到了一个二分类预测模型,可以是逻辑回归模型或者神经网络模型等。现在,我们用一个测试集评价模型的性能,在这个集合中,对于每一个特征向量,我们都有一个真实标签,还有一个基于已经训练好的二分类模型所得到的预测标签。具体地讲,对于测试集中的第 \(i\) 个样本,记真实标签为 \(y_i\in\{0,1\}\),模型给出的正类得分为 \(s_i\)。这个得分可以是 逻辑回归 或神经网络输出的正类条件概率估计,也可以是数值越大越倾向于正类的其他连续量。给定一个分类阈值 \(\tau\),预测标签定义为 \(\hat y_i=\mathbb I\{s_i\geq\tau\}\)。本节练习的参考答案见 二分类评价、ROC 与 AUC 答案。
同一组得分在不同阈值下会产生不同的预测标签,因此二分类评价至少包含三个层面:Accuracy、Precision、Recall、FPR 和 F1 分数等指标评价某个固定阈值下的分类结果;ROC、AUC 和 Precision-Recall 曲线评价得分在多个阈值下区分正负样本的能力;对数损失、Brier 分数 和 校准曲线 则评价所输出概率是否可靠。这三个层面回答的问题不同,不能用其中一个指标代替全部评价。
评价之前需要明确的条件
确定正类。 所有指标都依赖哪个类别被定义为正类。交换正类和负类后,Precision、Recall、FPR 和 ROC 的含义都会改变。
确定数据用途。 模型、超参数和阈值只能根据训练集与验证集确定;测试集只用于方案确定后的最终评价,不能在测试集上反复选择表现最好的阈值或指标。
确定实际目标。 应事先说明假正例与假负例分别会造成什么后果、两类错误的代价是否相同,以及模型实际使用时真实正类在全部样本中所占的比例大致是多少。
同时报告必要背景。 单个指标值通常不足以说明模型表现,还应报告样本量、正负类别数量、阈值、混淆矩阵及指标的不确定性。评价数据的使用边界见 训练集、验证集与测试集,概率输出层的含义见 输出层激活选择。
混淆矩阵#
混淆矩阵(confusion matrix)把真实标签和固定阈值下的预测标签进行交叉汇总,是 Accuracy、Precision、Recall、FPR 和 F1 分数等指标的共同基础。改变阈值会改变预测标签,因此通常也会改变混淆矩阵及其衍生指标。基于测试集的标签,假设我们已经根据训练好的二分类模型,对每个样本得到了一个预测标签。接下来,我们讨论混淆矩阵及其衍生指标。
混淆矩阵
混淆矩阵展示真实类别与预测类别之间的对应关系。在二分类问题中,它是一个 \(2\times2\) 表格,包含以下四项:
真正例(true positive,\(\cotp\)):实际为正类且预测为正类的样本数。
假正例(false positive,\(\cofp\)):实际为负类但预测为正类的样本数。
真负例(true negative,\(\cotn\)):实际为负类且预测为负类的样本数。
假负例(false negative,\(\cofn\)):实际为正类但预测为负类的样本数。
假正例表示把真实负类误判为正类,假负例表示把真实正类误判为负类。两类错误的实际后果可能相差很大,不能只根据错误数量判断哪一种模型更合适。四项排列如下:
真实正类总数、真实负类总数、预测正类总数和预测负类总数分别为
“真实正类总数”不是 \(\cotp\),因为未被模型识别的假负例也是真实正类;同理,“真实负类总数”不是 \(\cotn\)。先区分这些总数,可以避免混淆不同指标的分母。
主要优点
完整保留四类分类结果。 混淆矩阵不会像单个指标那样把不同错误合并,因此可以直接看出模型主要产生假正例还是假负例。
是多个指标的共同基础。 Accuracy、Precision、Recall、FPR、Specificity 和 F1 分数都可以从同一张混淆矩阵计算,便于相互核对。
主要局限
依赖正类定义和分类阈值。 交换正类与负类或改变阈值都会改变矩阵含义,报告时必须同时说明这两项设置。
原始数量受测试集规模影响。 较大的测试集通常会产生更多错误个数,因此跨数据集比较时还需结合相应比例与置信区间。
不能评价排序与概率质量。 一张固定阈值下的混淆矩阵无法说明其他阈值的表现,也不能判断输出概率是否可靠。
由混淆矩阵可以计算准确率(accuracy)、精确率(precision)、召回率(recall,也称真正率 TPR)、假正率(false positive rate,FPR)、特异性(specificity)与 F1 分数。不同指标使用不同的条件样本集合,必须结合正类与负类的样本数量比例、分类阈值和误判代价解释。先考虑一个贯穿本节的数值例子。
例3.1
某独立测试集有 100 个样本,其中包含 60 个正类和 40 个负类。给定一个固定阈值后,模型得到:
50 个真正例(\(\cotp\))
30 个真负例(\(\cotn\))
10 个假正例(\(\cofp\))
10 个假负例(\(\cofn\))
基于此,我们得到如下混淆矩阵:
固定阈值下的常见评价指标#
准确率
准确率是预测正确的样本数占全部样本数的比例,即
在 例3.1 中,准确率为
主要优点
含义直观。 它直接给出总体预测正确的比例,便于向非技术读者解释,也便于在同一数据集和同一阈值下比较模型。
同时使用两类正确结果。 真正例和真负例都计入分子,因此当正负类别大致平衡、两类错误代价相近时,准确率能够简洁地概括整体分类表现。
适合固定决策规则的总体检查。 若测试集中正类与负类的样本数量比例接近模型实际使用时的数据,并且阈值已经事先确定,准确率可以回答“实际使用这一决策规则时,总体有多少样本会被正确分类”。
主要局限
类别不平衡时可能产生误导。 若正类只占 1%,始终预测负类也能得到 99% 的准确率,却完全无法识别正类。
默认两类错误具有相同权重。 式 (37) 对假正例和假负例一视同仁,不能反映疾病漏诊与误报、欺诈漏检与人工复核等不同后果。
掩盖错误的组成。 两个模型可以具有相同准确率,但一个模型主要出现假正例,另一个模型主要出现假负例,实际用途可能完全不同。
依赖分类阈值。 准确率不能描述得分在所有阈值下的排序能力,也不能说明输出概率是否经过良好校准。
精确率
精确率,也称阳性预测值,回答“预测为正类的样本中有多少确实属于正类”。其定义为
例3.1 中共有 60 个预测正类,其中 50 个是真实正类,因此
主要优点
直接衡量正类预测的可靠程度。 当模型给出一个正类判断时,精确率说明这个判断有多大比例是正确的。
适合假正例代价较高的任务。 当每个正类预测都会触发人工复核、医学干预或资源投入时,提高精确率可以减少无效警报和不必要操作。
不会被大量真负例直接抬高。 与准确率不同,精确率的分母只包含预测正类,因此在正类稀少且重点关注正类预测质量时通常更有解释力。
主要局限
不反映漏掉了多少正类。 精确率不使用假负例;模型只预测少量最有把握的正类,可能得到很高精确率,却漏掉大部分真实正类。
不使用真负例。 它不能说明模型识别负类的能力,也不能代替准确率、FPR 或特异性。
受阈值和真实正类所占比例影响。 改变阈值会改变预测正类集合;即使正类内部和负类内部的得分分布不变,模型实际使用时真实正类在全部样本中所占的比例发生变化,也可能明显改变 Precision。因此,比较不同测试集上的 Precision 时,还必须说明各测试集中正类与负类的样本数量比例。
可能没有定义。 当模型没有预测任何正类时,式 (38) 的分母为 0。程序必须明确返回未定义、按约定返回 0 或报错,不能在分母中私自加入很小的正数。
召回率或真正率
召回率,也称真正率(true positive rate,TPR)或敏感性(sensitivity),回答“全部真实正类中有多少被模型识别出来”。其定义为
例3.1 中共有 60 个真实正类,其中 50 个被模型识别,因此
主要优点
直接衡量发现正类的能力。 召回率以全部真实正类为分母,能够清楚说明模型漏掉了多少目标样本。
适合假负例代价较高的任务。 在疾病初筛、安全预警和欺诈检测等场景中,漏掉真实正类可能造成严重后果,此时召回率通常是核心指标之一。
不会被真负例数量直接改变。 在真实正类集合和预测结果不变时,增加真负例不会提高召回率,因此它比准确率更能突出少数正类的识别情况。
主要局限
不反映误报数量。 召回率不使用假正例;把所有样本都预测为正类即可得到召回率 1,但这可能造成大量无效警报。
提高召回率可能增加实际成本。 降低阈值通常不会降低召回率,却可能增加假正例、人工复核量和不必要干预;这属于决策成本增加,不应笼统表述为计算效率下降。
必须与其他指标联合解释。 高召回率并不保证正类预测可靠,通常还应同时报告 Precision、FPR 或两类错误的实际代价。
可能没有定义。 当测试集中没有真实正类时,式 (39) 的分母为 0,此时 TPR 和常规 ROC-AUC 也无法定义。
假正率与特异性
假正率回答“全部真实负类中有多少被误判为正类”。特异性,也称真负率,回答“全部真实负类中有多少被正确识别”。两者满足
例3.1 中共有 40 个真实负类,其中 10 个被误判为正类,因此
主要优点
直接衡量真实负类中的误报比例。 当误报会造成资源浪费、错误拦截或无效干预时,FPR 能够反映负类样本受到影响的比例。
便于设定误报约束。 实际系统可以先规定可接受的最大 FPR,再比较各模型在这一范围内能够达到的 Recall;ROC 曲线正是以 FPR 为横轴。
按真实负类数量进行归一化。 在正类内部和负类内部的得分分布保持不变时,只改变测试集中正类与负类的样本数量比例,例如从正负样本各 500 个改为正类 100 个、负类 900 个,通常不会直接改变 FPR。因此,FPR 通常比 Accuracy 更少受到测试集正负样本数量比例的影响。
主要局限
不反映正类识别情况。 FPR 不使用真正例和假负例;较低的 FPR 不能保证模型具有较高召回率。
较低比例仍可能对应大量误报。 当真实负类数量非常大时,即使 FPR 很低,假正例的绝对数量 \(\cofp=\operatorname{FPR}(\cofp+\cotn)\) 仍可能很大,因此还应报告假正例数量和实际成本。
不能直接表示正类预测的可信程度。 FPR 的分母是真实负类,而 Precision 的分母是预测正类;两者回答的问题不同。
可能没有定义。 当测试集中没有真实负类时,式 (40) 的分母为 0,此时 FPR、Specificity 和常规 ROC-AUC 均无法定义。
FPR 与 \(1-\operatorname{Precision}\) 的区别
其中,\(1-\operatorname{Precision}\) 称为假发现率(false discovery rate,FDR)。两个量的分子都是假正例数量 \(\cofp\),因此减少假正例通常会使二者都有所下降;但是,它们使用的分母不同,回答的问题也不同。
考察的样本集合不同。 FPR 从真实标签出发,在所有真实负类中考察有多少被误判为正类,回答“负类被误报的比例是多少”;假发现率从模型的预测结果出发,在所有预测正类中考察有多少实际上属于负类,回答“预测为正类的结果中有多少是错误的”。
真正例与真负例对二者的影响不同。 在假正例数量不变时,增加真正例会降低假发现率,却不会改变 FPR;增加真负例会降低 FPR,却不会改变假发现率。因此,即使两个模型具有相同的假正例数量,它们的 FPR 和假发现率也可能不同。
二者通过真实正类所占比例联系起来。 记测试集中真实正类样本数占总样本数的比例为 \(\pi=(\cotp+\cofn)/n\)。利用 Recall 和 FPR 的定义,可以得到
\[1-\operatorname{Precision} =\frac{(1-\pi)\operatorname{FPR}} {\pi\operatorname{Recall}+(1-\pi)\operatorname{FPR}}.\]这个关系说明,在 Recall 和 FPR 保持相同的情况下,假发现率仍会随测试集中正类与负类的样本数量比例而变化。正类越少,预测正类中的假正例通常越容易占较大比例。
低 FPR 不一定意味着预测正类很可靠。 例如,若 \(\operatorname{Recall}=0.8\)、\(\operatorname{FPR}=0.01\),当测试集中真实正类占全部样本的 50% 时,假发现率约为 1.2%;当真实正类只占 1% 时,假发现率约为 55.3%。此时 FPR 仍为 1%,但超过一半的预测正类可能是假正例。
指标没有定义的条件也不同。 测试集中没有真实负类时,FPR 没有定义;模型没有预测任何正类时,Precision 及其对应的假发现率没有定义。实际评价中应根据问题同时报告 FPR、Precision 或假发现率,不能用其中一个代替另一个。
F1 分数
F1 分数是 Precision 与 Recall 的调和平均数,也可以直接由混淆矩阵计算:
当 Precision、Recall 及其调和平均数都有定义时,上述两个表达式代数等价。若 \(\cotp=0\) 且 \(\cofp+\cofn>0\),右侧表达式给出 0,软件通常把它作为 F1 分数的延拓约定;若 \(\cotp=\cofp=\cofn=0\),则仍需明确说明采用未定义、返回 0 或其他约定。
例3.1 中 Precision 与 Recall 均为 \(5/6\),所以
主要优点
同时要求 Precision 与 Recall 较高。 调和平均数会更受两者中较小者影响,因此一个指标很高而另一个很低时,F1 分数不会给出过高评价。
适合重点考察正类预测的任务。 当真负例不是主要关注对象,而假正例与假负例都需要控制时,F1 分数可以提供一个简洁的综合数值。
便于在同一数据和同一阈值选择规则下比较模型。 单个数值便于排序候选方案,但仍应同时报告 Precision 和 Recall,说明高低差异来自哪里。
主要局限
完全忽略真负例。 两个模型即使识别负类的能力差异很大,也可能得到相同 F1 分数,因此 F1 分数不适合单独评价十分重视真负例或特异性的任务。
默认同等看待 Precision 与 Recall。 当假正例与假负例的代价不同,应直接使用业务代价,或使用根据任务设置权重的 \(F_\beta\),而不能机械地最大化 F1 分数。
依赖阈值和测试集的正负样本构成。 不同阈值可能产生相同 F1 分数却对应不同的 Precision 与 Recall;测试集中真实正类在全部样本中所占的比例发生变化,也可能改变 F1 分数。
单个数值会隐藏具体行为。 F1 分数不能说明错误的绝对数量、概率校准或不同 FPR 区域的表现。当 \(2\cotp+\cofp+\cofn=0\) 时,式 (41) 没有定义,软件采用的返回约定必须明确说明。
指标 |
主要考察对象 |
较适合的情况 |
不能单独回答的问题 |
|---|---|---|---|
Accuracy |
全部样本中的正确比例 |
类别较平衡且两类错误代价相近 |
错误类型、排序能力与概率校准 |
Precision |
预测正类的可靠程度 |
假正例代价高或复核资源有限 |
漏掉多少正类以及负类识别能力 |
Recall |
真实正类被发现的比例 |
假负例代价高 |
误报数量与正类预测可靠程度 |
FPR / Specificity |
真实负类中的误报或正确识别比例 |
需要控制误报、误伤或资源浪费 |
正类识别能力与预测正类可信程度 |
F1 分数 |
Precision 与 Recall 的平衡 |
真负例不是重点且两类正类错误都重要 |
真负例、错误成本、排序能力与概率校准 |
分类阈值没有脱离任务的统一最优值
降低阈值通常会把更多样本判为正类,因此 Recall 不会降低,但 FPR 通常不会降低;Precision 则可能升高或降低。若假正例和假负例的单位代价分别为 \(c_{\mathrm{FP}}\) 和 \(c_{\mathrm{FN}}\),可以在验证集上比较
其中,\(\cofp(\tau)\) 和 \(\cofn(\tau)\) 是阈值 \(\tau\) 对应的两类错误数量。直接比较这个代价时,应保证验证集中正类与负类的样本数量比例以及抽取样本的方法,能够代表模型实际使用时的数据。如果构造验证集时有意增加或减少某一类样本,验证集中的正负样本数量比例就不再代表实际情况。此时,可以按照模型实际使用时真实正类所占的比例 \(\pi\),比较每个实际样本的期望误判代价
其中,\(\operatorname{FNR}(\tau)=1-\operatorname{Recall}(\tau)\) 表示假负例率。若预计模型将处理 \(n\) 个部署样本,则期望总误判代价为 \(n\widetilde{\mathcal C}(\tau)\);乘以固定的 \(n\) 不会改变最优阈值。上述校正只改变正负类别的权重,并要求验证集在每个类别内部仍能代表实际数据;它不能修复类内抽样偏差或其他数据分布变化。
构造验证集时有意增加或减少某一类样本,也会影响 Precision 和 F1 分数。若模型实际使用时真实正类所占的比例为 \(\pi\),并且下式分母不为 0,则可以根据验证集的 TPR 和 FPR 估计
其中,下标 \(\pi\) 表示按照模型实际使用时真实正类所占的比例进行校正。再由二者计算 \(\operatorname{F1}_{\pi}\),或者直接使用能够反映实际正负样本数量比例的样本权重计算混淆矩阵及其衍生指标。除此以外,还可以在验证集上选择满足 FPR 上限或 Recall 下限等要求的阈值。无论采用哪一种规则,都应在查看测试集结果之前确定;测试集只用于评价已确定的阈值。
即时练习:混淆矩阵与固定阈值指标
下面四题检查混淆矩阵、常用指标和阈值变化。每次选择后都会显示具体解释,也可以重新选择。
ROC 曲线#
ROC 曲线(receiver operating characteristic curve)描述同一组连续得分在不同分类阈值下的表现。对阈值 \(\tau\),ROC 平面中的工作点定义为
横轴 FPR 衡量真实负类中的误报比例,纵轴 TPR 即 Recall,衡量真实正类中的识别比例。由于 \(1-\operatorname{FPR}\) 是 Specificity,ROC 也可以理解为敏感性与特异性随阈值变化的关系。调参阶段应在验证集上比较模型、确定得分方向并选择评价方案;这些内容确定后,才在测试集上绘制并报告最终 ROC 与 AUC。若还要报告某个固定阈值对应的工作点,也应事先在验证集上确定该阈值。1关于 ROC 曲线的详细介绍,可参见 Fawcett(2006),An introduction to ROC analysis,Pattern Recognition Letters,27,861--874。
ROC 曲线位于单位正方形内。若模型只输出硬标签而没有连续得分,则只能根据这一组标签得到一个工作点,无法观察阈值变化带来的权衡。若模型输出连续得分,则每个不同阈值对应一个工作点,将这些点按阈值顺序连接即可得到 ROC 曲线。图 11 展示了六个示意点。
图 11 ROC 曲线示意图#
下面根据 图 11 中的示意点解释 ROC 平面。
ROC 平面中的典型工作点
ROC 平面的 45° 对角线满足 \(\operatorname{TPR}=\operatorname{FPR}\),通常作为随机猜测的参照线。若一个随机猜测模型不查看样本特征和真实标签,而是对每个样本独立地以概率 \(q\) 预测为正类,那么其期望工作点为
其中,改变 \(q\) 就会沿对角线移动。例如,\(q=0.3\) 表示不考虑样本差异、对每个样本都以 0.3 的概率猜为正类,其期望工作点为 \((0.3,0.3)\)。对角线及其两侧可以从以下三个方面理解。
对角线上的点表示随机猜测的基准。 对角线上的不同位置对应不同的正类猜测概率 \(q\)。例如,点 \((0.2,0.2)\) 和 \((0.8,0.8)\) 分别对应以概率 0.2 和 0.8 猜测为正类的模型。有限样本中的随机结果可能在对角线附近波动,不一定恰好落在对角线上;某个确定模型的单个工作点落在对角线上,也只能说明该阈值下 TPR 与 FPR 相等,不能仅凭这一个点断定模型采用了随机猜测。
对角线上方的点通常更好。 这类点满足 \(\operatorname{TPR}>\operatorname{FPR}\)。与具有相同 FPR 的随机猜测模型相比,它能够识别出更多正类,说明模型给出的得分在当前阈值下具有一定的区分能力。不过,最终是否适用还要考虑能够接受的误报数量和实际代价。
对角线下方不一定表示模型本身很差。 如果整条 ROC 曲线持续位于对角线下方,模型的得分往往仍然包含区分信息,只是正类与负类的标签含义可能设置反了,或者“得分越大越倾向于正类”的方向被写反了。检查并纠正标签定义或得分方向后,曲线可能转到对角线上方。只有一个工作点位于对角线下方时,还可能是阈值选择或有限样本波动造成的,不能立即断定标签设置错误。
图中的六个示意点
点 \(O(0,0)\):模型把所有样本都判为负类,因此 TPR 与 FPR 均为 0。它没有发现任何正类;即使类别极不平衡时 Accuracy 可能很高,也不能据此认为模型有效。该点也可以看成随机猜测概率 \(q=0\) 时的端点。
点 \(A(1,1)\):该分类模型将所有样本都预测为正类,因此 TPR 与 FPR 均为 1。它是点 \(O\) 的另一个极端,也可以看成 \(q=1\) 时的端点。是否可接受取决于漏报和误报的实际代价,不能只依据 Accuracy 判断。
点 \(B(0.7,0.7)\):该点位于 45° 对角线上,与以概率 0.7 预测为正类的随机猜测模型具有相同的期望坐标。单个点位于对角线上只说明该阈值下 TPR 等于 FPR;如果一条 ROC 曲线整体接近对角线,才通常表示模型给出的得分缺少区分正负类的能力。
点 \(C(0.7,0.4)\):它与点 \(B\) 的 FPR 相同,但 TPR 更低,位于对角线下方。这不一定表示模型完全没有用。如果整条 ROC 曲线都稳定地位于对角线下方,常见原因是把得分方向设反了,例如本应是“得分越大越倾向于正类”,程序却按照“得分越小越倾向于正类”处理;也可能是正类与负类的标签含义在程序中被交换了。此时应在训练集或验证集上检查正类定义和得分方向,纠正后可能得到位于对角线上方的曲线。仅有一个工作点位于对角线下方,也可能来自阈值选择或有限样本波动,不能据此断定标签一定设置错误。
点 \(D(0.1,0.7)\):该点位于对角线上方,说明该阈值下 TPR 高于 FPR。与具有相同 FPR 的随机猜测参照点 \((0.1,0.1)\) 相比,它在没有增加误报比例的情况下识别出了更多正类,因此通常是更有用的工作点。不过,一个点位于对角线上方只说明当前阈值下优于随机参照,不能代替对整条 ROC 曲线和实际误判代价的评价。
点 \(E(0,1)\):FPR 为 0 且 TPR 为 1,表示当前阈值下所有样本都分类正确,是理想工作点。
比较两个工作点时,如果一个点的 FPR 不高于另一个点,而且 TPR 不低于另一个点,那么前一个点至少不差。如果一个点的 TPR 较高但 FPR 也较高,就不能仅根据它到 \(E\) 的几何距离判断优劣,而应依据误判代价或实际使用要求进行选择。
实际模型通常输出连续得分,再根据阈值分类。例如,逻辑回归输出正类条件概率估计,分类树可输出叶节点中的正类比例。阈值不必固定为 0.5,应根据验证集和决策代价确定。
对测试集中每个样本得到分数后,从高到低移动阈值,会得到一系列 ROC 工作点,并形成从 \((0,0)\) 到 \((1,1)\) 的阶梯曲线。
假设已经获得独立测试集的真实标签,以及二分类模型对每个样本给出的连续得分。ROC 曲线可按以下步骤构造。
ROC 曲线的绘制
将测试集中的样本按照正类得分降序排列。
将阈值 \(\tau\) 从 \(\infty\) 逐渐变化为 \(-\infty\):
对给定阈值 \(\tau\),将得分大于或等于 \(\tau\) 的样本预测为正类,否则为负类。
根据所得预测计算 TPR 和 FPR,并在 ROC 平面上标记对应点。
多个样本得分相同时的处理与曲线步长
实际只需考察高于最大得分、各个不同得分以及低于最小得分的有限阈值。阈值高于所有得分时,曲线从 \((0,0)\) 开始;阈值低于所有得分时,曲线到达 \((1,1)\)。按得分降序跨过一个正样本时,曲线向上移动 \(1/n_+\);跨过一个负样本时,向右移动 \(1/n_-\)。
若多个样本得到相同分数,应把这些样本作为一组同时纳入预测正类。不能人为规定同分样本的先后顺序,否则会产生实际上无法通过分类阈值得到的中间点,并使 ROC 曲线受到排序程序偶然结果的影响。
样本编号 |
真实标签 |
估计得分 |
|---|---|---|
1 |
1 |
0.9 |
2 |
1 |
0.8 |
3 |
0 |
0.7 |
4 |
1 |
0.6 |
5 |
1 |
0.55 |
6 |
1 |
0.54 |
7 |
0 |
0.53 |
8 |
0 |
0.52 |
9 |
1 |
0.51 |
10 |
0 |
0.505 |
在上例中,正类共有 6 个,负类共有 4 个。因此,向上和向右的基本步长分别为 \(1/6\) 与 \(1/4\)。动画 ROC 曲线的绘制 展示了这一过程。
ROC 曲线的主要优点
展示多个阈值下的完整权衡。 ROC 不把评价限制在阈值 0.5,而是展示降低或提高阈值时 TPR 与 FPR 如何共同变化。
便于比较指定误报范围内的表现。 若实际系统要求 FPR 不超过某个上限,可以只比较这一局部范围内哪条曲线具有更高 TPR,而不是盲目追求整条曲线的总体面积。
两个坐标都按真实类别数量归一化。 在正类内部和负类内部的得分分布不变时,只改变测试集中正类与负类的样本数量比例通常不会改变 ROC 曲线,因此它比 Accuracy 和 Precision 更少受到正负样本数量比例的直接影响。
ROC 曲线的主要局限
不直接反映假正例的绝对数量。 当负类数量非常大时,图中看似很低的 FPR 仍可能对应大量假正例;正类稀少且重点关注正类预测质量时,还应查看 Precision-Recall 曲线。
不包含概率校准与业务代价。 ROC 只使用得分顺序和真实类别,不能说明输出 0.8 是否真的对应约 80% 的正类概率,也不能自动给出部署阈值。
曲线可能相交。 一个模型可能在低 FPR 区域更好,另一个模型可能在高 FPR 区域更好;此时不能声称某个模型在所有工作条件下都更优。
需要同时存在正类和负类。 若测试集只包含一个类别,TPR 或 FPR 至少有一个无法定义;样本较少时,曲线还可能具有较大的抽样波动。
ROC-AUC
ROC 曲线下的面积称为 ROC-AUC(area under the ROC curve)。它把整条 ROC 曲线概括为 \([0,1]\) 内的一个数值。无排序能力的随机得分,其期望 AUC 为 0.5。上例的阶梯曲线面积为
AUC 还具有直接的排序解释。若正样本数和负样本数分别为 \(n_+\) 与 \(n_-\),则经验 AUC 可以写为
因此,AUC 等于随机抽取一个正样本和一个负样本时,正样本得分更高的经验概率;如果正样本与负样本的得分相同,则这一对样本记 \(1/2\) 分。若所有正样本得分都高于所有负样本,AUC 为 1;若全部顺序相反,AUC 为 0。系统性反向的得分满足 \(\operatorname{AUC}(-s)=1-\operatorname{AUC}(s)\),但只能在训练集或验证集上检查并确定得分方向,不能看到测试集 AUC 后再反转得分并把新结果当作未经选择的最终结果。
AUC 的主要优点
提供不依赖单一阈值的排序指标。 AUC 综合多个阈值,适合比较模型区分正负样本的总体能力。
具有明确的正负样本对解释。 式 (44) 使 AUC 不只是几何面积,也便于用枚举样本对或秩和方法进行核验。
对严格单调递增变换保持不变。 只要得分顺序和并列关系没有变化,把得分从概率改成对数几率或其他严格单调变换不会改变 ROC-AUC。
在正负样本数量比例变化时相对稳定。 在正类内部和负类内部的得分分布不变时,只改变测试集中正类与负类的样本数量比例通常不会改变总体 AUC。
AUC 的主要局限
平均了所有 FPR 区域。 AUC 默认对 \(0\leq\operatorname{FPR}\leq1\) 的整个范围进行汇总,而实际系统可能只允许非常低的 FPR;此时应报告局部 ROC、部分 AUC 或指定 FPR 下的 TPR。
不能表示某个阈值下的实际效果。 AUC 较高不保证预先固定阈值下的 Accuracy、Precision、Recall 或业务代价较好,仍需使用验证集选择阈值并报告相应混淆矩阵。
不能评价概率是否可靠。 两个模型可以具有相同 AUC,却输出完全不同的概率。若应用需要解释风险概率,还应检查 校准曲线、Brier 分数 或 对数损失。
相同 AUC 可能对应不同曲线。 当 ROC 曲线相交时,更高的总体 AUC 不表示模型在每一个 FPR 区域都更好;应根据实际可接受的工作区间比较。
有限样本结果具有不确定性。 正类或负类很少时,AUC 可能对少数样本十分敏感。正式报告应给出重复划分结果、交叉验证结果或置信区间,而不应只比较小数点后的微小差异。
Precision-Recall 曲线#
Precision-Recall 曲线简称 PR 曲线。对每个分类阈值 \(\tau\),以 Recall 为横轴、Precision 为纵轴,得到
降低阈值时,Recall 不会降低,但 Precision 不保证单调变化。PR 曲线的无信息基准取决于测试集中真实正类样本数占总样本数的比例。若这一比例为 \(\pi=n_+/(n_++n_-)\),并且预测结果与真实标签相互独立,则期望 Precision 为 \(\pi\)。因此,解释 PR 曲线时,必须同时说明测试集中正类与负类的样本数量比例。
常见的单值汇总包括梯形积分得到的 PR-AUC,以及平均精确率(average precision,AP)。把得分相同的样本作为一组,并随着阈值从高到低移动,依次记所得点为 \((R_k,P_k)\),其中 \(R_k\) 和 \(P_k\) 分别表示 Recall 与 Precision,并规定 \(R_0=0\)。常用的 AP 写法为
当阈值高于所有得分时,模型没有预测任何正类,Precision 的分母为 0。绘图软件常在 PR 曲线开头补上 \((\operatorname{Recall},\operatorname{Precision})=(0,1)\);这是为了完整展示曲线而采用的绘图约定,不是由 \(0/0\) 计算得到的经验 Precision。由于 PR 曲线可能不单调,梯形 PR-AUC 与 AP 一般不完全相同;比较结果时必须说明采用哪一种定义、插值方法、端点约定和软件实现。
PR 曲线的主要优点
直接围绕正类预测质量展开。 Precision 会对假正例作出反应,Recall 会对假负例作出反应,因此 PR 曲线能够同时展示“找到多少正类”和“正类预测有多可靠”。
适合正类稀少的任务。 大量真负例不会直接进入 Precision 与 Recall 的分子或分母;当 ROC 图上的 FPR 看起来很低但假正例仍很多时,PR 曲线通常更容易暴露这一问题。
便于比较正类检索系统。 在信息检索、异常检测和高风险筛查中,AP 常用于汇总不同 Recall 水平下的 Precision。
PR 曲线的主要局限
明显依赖测试集的正负样本构成。 即使正类内部和负类内部的得分分布相同,测试集中正类与负类的样本数量比例发生变化,也会改变 Precision、PR 曲线及 AP;不同数据集之间不能不加说明地直接比较。
不展示真负例和特异性。 若任务非常重视正确放行负类或限制 FPR,仅看 PR 曲线并不充分,还应报告 FPR、Specificity 或 ROC 的低 FPR 区域。
面积定义并不唯一。 梯形 PR-AUC、插值后的面积和 AP 可能不同,必须统一软件、插值方法以及多个样本得分相同时的处理方法。
仍不表示概率校准或业务成本。 PR 曲线描述排序和阈值变化,不能说明概率值是否可信,也不能自动决定最终阈值。
即时练习:ROC、AUC 与 PR 曲线
下面四题检查排序能力、模型没有区分能力时的基准值、AP 的计算以及 ROC 曲线上一个点的含义。
概率预测质量:Brier 分数与校准曲线#
ROC-AUC 和 AP 主要使用得分的相对顺序,而概率预测质量关心模型给出的数值能否解释为可靠的正类概率。为此,本部分进一步假设模型对第 \(i\) 个样本输出 \(p_i\in[0,1]\),并且 \(p_i\) 表示该样本属于正类的概率估计。若模型只输出任意尺度的连续得分 \(s_i\),就不能直接计算 Brier 分数或把得分画成校准曲线;必须先说明如何把得分转换为概率。
Brier 分数
Brier 分数(Brier score)使用概率预测与真实标签之间的均方误差评价二分类概率输出。对 \(n\) 个样本,其定义为
其中,\(y_i\in\{0,1\}\) 是真实标签,\(p_i\in[0,1]\) 是模型给出的正类概率。需要指出的是,这一节的目的是衡量一个已经训练好的二分类模型,因此这里的样本量 \(n\) 指的是测试集样本量,而不是训练集样本量。Brier 分数越小越好;所有概率都与真实标签完全一致时,Brier 分数为 0。在二分类问题中,Brier 分数位于 0 和 1 之间。
若测试集中真实正类样本数占总样本数的比例为 \(\bar y=n^{-1}\sum_{i=1}^{n}y_i\),始终输出 \(p_i=\bar y\) 的常数模型,其 Brier 分数为 \(\bar y(1-\bar y)\)。因此,除了报告模型的 Brier 分数,还可以将它与这一简单基准进行比较。
Brier 分数为什么鼓励模型报告真实概率,也可以直接由条件期望说明。若 \(q_i=\mathbb P(Y=1\mid\bx_i)\) 是样本 \(\bx_i\) 的真实正类条件概率,而模型报告概率 \(p_i\),则
其中,第二项与模型报告的 \(p_i\) 无关,而第一项在 \(p_i=q_i\) 时取得最小值 0。因此,从期望意义看,报告真实条件概率能够使 Brier 分数最小。
Brier 分数的主要优点
Brier 分数的主要局限
只能用于概率输出。 对任意尺度的分类得分直接套用式 (47) 没有明确的概率含义。
一个平均值会混合多种性质。 Brier 分数同时受到概率校准、正负样本区分能力和数据本身不确定性的影响。分数降低并不能单独说明是哪一方面得到改善,还应结合 校准曲线 和排序指标进行解释。
受到测试集正负样本构成的影响。 测试集中真实正类在全部样本中所占的比例发生变化,会改变常数基准和 Brier 分数的解释。因此,比较不同数据集上的结果时,必须同时说明正类与负类的样本数量比例。
对极度自信的错误惩罚弱于对数损失。 Brier 分数的单样本损失最大为 1,而 对数损失 会对接近 0 或 1 的错误概率给予越来越大的惩罚。应根据任务是否特别重视这类错误选择指标。
例3.2
设四个样本的真实标签为 \((1,0,1,0)\),模型输出的正类概率为 \((0.9,0.8,0.7,0.1)\)。根据式 (47),
该测试集中真实正类占全部样本的 50%,因此始终输出 0.5 的常数模型具有 Brier 分数 \(0.5(1-0.5)=0.25\)。本例模型的 Brier 分数更低,说明其概率预测优于这一常数基准;但仅凭 0.1875 仍不能判断哪些概率区间存在系统性高估或低估,还需要查看 校准曲线。
校准曲线
校准曲线(calibration curve,也称可靠性图,reliability diagram)比较“模型给出的平均概率”与“样本中实际出现的正类比例”。理想校准意味着:在模型给出约 0.7 概率的一组样本中,正类比例也应接近 0.7。若把随机样本的预测概率记为 \(P\),理想条件可写为
因为 \(Y\) 只能取 0 或 1,上式表示:对于能够定义相应条件概率的预测值 \(p\),应有 \(\mathbb P(Y=1\mid P=p)=p\)。实际数据中只能用分组后的经验正类比例近似检查这一条件。
有限样本中无法对每一个概率值单独估计条件概率,因此通常先把 \([0,1]\) 划分为若干区间。记第 \(k\) 个非空区间中的样本下标集合为 \(\mathcal B_k\),再计算
其中,\(\overline p_k\) 是该区间的平均预测概率,\(\overline y_k\) 是实际正类比例。以 \(\overline p_k\) 为横坐标、\(\overline y_k\) 为纵坐标连接各点,即得到经验校准曲线;对角线 \(y=x\) 表示理想校准。曲线位于对角线下方时,模型平均高估了正类概率;曲线位于对角线上方时,模型平均低估了正类概率。
校准曲线的主要优点
能够定位问题所在的概率区间。 与单一 Brier 分数相比,校准曲线可以显示模型是在低概率、中等概率还是高概率区域出现系统性偏差。
解释直观。 横轴和纵轴都具有概率含义,可以直接检查“预测为 30% 的样本是否约有 30% 实际为正类”。
有助于判断是否需要概率校准。 若多个相邻区间持续偏离对角线,可以进一步在验证集或单独的校准集上考虑 sigmoid 校准(也称 Platt scaling)、保序回归(isotonic regression)等方法。
校准曲线的主要局限
概率校准不能使用测试集拟合
如果需要用 sigmoid 校准、保序回归或其他方法调整概率,校准方法及其超参数必须在验证集或单独的校准集上确定。测试集只能用于评价已经确定的概率模型;不能先查看测试集校准曲线,再用同一测试集调整概率并把调整后的结果作为最终评价。相关数据边界见 训练集、验证集与测试集。
固定阈值、排序与概率质量不能相互替代
Accuracy、Precision、Recall、FPR 和 F1 分数回答固定阈值下如何分类。
ROC-AUC 与 AP 回答模型如何排列正负样本。
完整评价应根据任务同时选择这些层面的指标,并报告阈值、测试集中正类与负类的样本数量比例以及两类错误的实际代价;不能用一个较高的 AUC 代替全部结论。
即时练习:Brier 分数与校准曲线
下面四题检查预测概率的误差、校准图的读法,以及“局部看起来正确”为什么不等于整个模型都已经校准好。
Shiny 交互演示:二分类评价与超参数选择
交互页面可以改变正类比例、概率分布、分类阈值和校准分组数,同时观察混淆矩阵、ROC 曲线、Precision-Recall 曲线、Brier 分数与校准曲线。另一个标签页完整演示训练集用于估计参数、验证集用于选择模型和阈值、测试集只对已确定方案评价一次的流程。
核心推导与实现核验#
核心关系
推导路径。 先根据真实标签与固定阈值下的预测标签计算混淆矩阵,再按照式 (37)--(41) 选择与任务目标一致的指标。把阈值从 \(+\infty\) 降到 \(-\infty\),每跨过一个样本分数就把该样本纳入预测正类;正样本使 TPR 上升,负样本使 FPR 右移,由此得到式 (42) 描述的阶梯 ROC。最后可以用式 (44) 从正负样本对的排序核验 AUC。
关键条件
固定阈值指标、排序指标和概率质量指标不能相互替代。阈值必须在验证集上依据错误代价或预先确定的指标规则选择;测试集只评价已经确定的模型和阈值。比较 AUC 时,应统一使用式 (44) 所示的处理规则:正样本与负样本得分相同时,这一对样本记 \(1/2\) 分。比较 AP 时,还应统一式 (46) 所采用的插值和面积计算方法。
只有能够解释为正类概率且位于 \([0,1]\) 内的输出,才能代入式 (47) 或用于式 (50)。若需要调整概率,校准方法只能在验证集或单独的校准集上拟合,测试集仍只用于最终评价。
数据规模
若测试集共有 \(n\) 个样本,则真正例、真负例、假正例和假负例都是非负整数,且四者之和必须等于 \(n\)。计算 Recall 时分母是实际正类总数,计算 FPR 时分母是实际负类总数,计算 Precision 时分母是预测正类总数。若某个分母为 0,必须明确报告指标没有定义或所采用的软件约定。绘制校准曲线时还应记录每个区间的样本数;样本过少的区间不能据此作出稳定结论。
常见误区
不要把式 (40) 中的 FPR 与 \(1-\operatorname{Precision}\) 混淆;也不要根据测试集选择阈值、反转得分或决定报告哪个指标。AUC 高只说明总体排序较好,不保证概率校准良好、指定 FPR 区域占优或某个业务阈值下的代价较低。Brier 分数 较低也不能单独证明每个概率区间都校准良好,仍需查看 校准曲线。
动手检查
按照 手算结果与可信实现对照 的原则,用可以手工排序的小样本比较枚举阈值、正负样本对 AUC 与可信库结果;ROC 端点必须包含 \((0,0)\) 和 \((1,1)\),得分相同的样本应作为一组处理。再构造正类比例不同但类条件得分相同的数据,观察 ROC-AUC 与 AP 对类别比例变化的不同反应。对于概率输出,还应手算式 (47),并核对校准曲线每个区间的平均概率、实际正类比例和样本数。
数值稳定性与规模
当指标分母为 0 时,必须采用明确约定并报告该情形;不能通过向分母加入很小的正数改变指标定义。ROC 按分数排序时应一致处理并列得分,AUC 积分前应检查 FPR 是否单调不减;Brier 分数与校准曲线还应拒绝超出 \([0,1]\) 的概率,并跳过或明确处理没有样本的分组。评价程序还应拒绝空数组、非法标签、复数、无穷大和 NaN。
本节小结#
综合练习#
程序题应固定随机种子、写出维度断言并报告运行环境。全部参考答案见 二分类评价、ROC 与 AUC 答案。
混淆矩阵指标计算。 某测试集得到 \(\cotp=50\)、\(\cotn=30\)、\(\cofp=10\)、\(\cofn=10\)。计算 Accuracy、Precision、Recall、FPR、Specificity 和 F1 分数,并逐项说明分母所对应的样本集合。
ROC 与 AUC 手算。 四个样本的真实标签为 \((1,0,1,0)\),模型得分为 \((0.9,0.8,0.7,0.1)\)。从高到低移动阈值,列出包含端点的全部 ROC 点,用梯形法计算 AUC,并通过枚举全部正负样本对核对结果。
AUC 概率解释证明。 在正、负样本得分均无并列的条件下,证明 ROC-AUC 等于随机抽取一个正样本和一个负样本时,正样本得分更高的概率。再说明存在并列得分时为什么通常给每个并列正负样本对计 \(1/2\)。
F1 分数等价公式。 从 \(\operatorname{Precision}=\cotp/(\cotp+\cofp)\) 与 \(\operatorname{Recall}=\cotp/(\cotp+\cofn)\) 推导 \(\operatorname{F1 分数}=2\cotp/(2\cotp+\cofp+\cofn)\)。对 \(\cotp=30\)、\(\cofp=10\)、\(\cofn=20\) 计算 Precision、Recall 和 F1 分数,并讨论没有预测正类或没有真实正类时的定义问题。
稳定的固定阈值指标。 实现接收真实二元标签、连续得分和阈值的函数,返回四项混淆矩阵及 Accuracy、Precision、Recall、FPR、Specificity 和 F1 分数。程序应要求标签与得分具有相同维度,且两者非空、有限的一维实数数组,标签只能取 0 或 1,阈值必须是有限实数标量;通过
zero_division参数明确控制分母为 0 时返回NaN、0 或报错,并拒绝其他参数值,不能私自在分母加入 epsilon。ROC 与 AUC 实现。 实现一次稳定排序后从最高得分组向最低得分组扫描、并按相同得分分组更新的 ROC 算法,以命名清楚的结构返回阈值、TPR、FPR 和梯形 AUC。必须先验证原始标签,再进行任何数据类型转换;ROC 端点必须是 \((0,0)\) 与 \((1,1)\)。另实现并列计半分的正负样本对版本,用小样本逐项比较两种 AUC。
评价程序测试。 为第 5、6 题编写可以直接运行的断言测试:全预测负类、全预测正类、完美排序、完全反向排序、常数得分、含并列值、单一真实类别、非法标签、空数组、复数、无穷大和
NaN。按照 手算结果与可信实现对照 的原则,与可信库比较混淆矩阵、完整 ROC 点和 AUC;比较 ROC 点时关闭库中删除中间点的选项。验证严格单调递增变换不会改变 ROC-AUC,并验证产生新并列值的非严格变换不一定保持结果。阈值选择实验设计。 对同一个已经训练好的模型,设计实验比较固定阈值 0.5,即缓存得分为正类概率时、使验证集估计的部署环境 F1 分数最大的阈值,以及在给定假正例与假负例单位代价下使验证集估计的部署环境误判代价最小的阈值。模型只需分别生成并缓存一次验证集和测试集得分;候选集合应包括高于最大得分的全负类预测端点和各个不同得分,并事先说明单位代价、验证集类别比例能否代表实际使用环境以及多个阈值并列最优时的选择规则。若验证集经过类别重采样,F1 分数和误判代价都应按照实际类别比例校正。只在验证集上选择阈值,随后报告测试集混淆矩阵、Precision、Recall、F1 分数、两类错误总代价及阈值搜索时间;共同的训练和预测成本只报告一次。
模型质量与预测效率实验设计。 设计实验,在同一二分类数据上比较逻辑回归、隐藏层含 16 个神经元的单隐藏层神经网络,以及隐藏层含 128 个神经元的单隐藏层神经网络。后两个模型都只设置一个隐藏层,并使用相同的激活函数、损失函数和训练方法,主要区别是隐藏层神经元数量。三个模型使用相同的训练集、验证集和测试集划分、随机种子、输入预处理、最大训练更新次数和早停规则,并预先规定且对所有模型采用相同的阈值选择方法;报告 ROC-AUC、AP 或明确定义插值规则的 PR-AUC、固定阈值指标、对数损失 或 Brier 分数、训练时间、固定批量预测时间、峰值内存和参数量,必要时再绘制 校准曲线。根据结果说明隐藏层神经元数量对预测表现和计算成本可能带来的影响。
ROC 算法效率实验设计。 设计实验,按照 手算结果与可信实现对照 的原则比较“对每个不同阈值重新扫描全部样本”的朴素算法、排序后单次扫描算法和可信库实现。三种方法只处理同一份已经缓存的标签与得分,不把模型训练或预测时间计入 ROC 算法时间;统一使用“得分大于或等于阈值时预测为正类”的规则,把并列得分作为一组更新,保留相同端点,并将可信库的
drop_intermediate设为False。统一数据类型、预先运行次数和重复计时方法;改变样本量与并列比例,报告 ROC 点和 AUC 误差、理论复杂度、排序调用次数、评价时间与峰值内存。