机器学习与统计分类中的性能评估
-
分类问题是机器学习和统计学中最核心的监督学习任务之一,其目标是通过学习已有数据的特征,构建预测模型,将新数据分配到预定义的类别或标签中。
-
分类模型通常会基于样本特征给出类别、概率或风险分数。从统计分类的角度看,模型是在用数据估计样本属于某个类别的可能性,再根据阈值或决策规则给出最终判断。
-
衡量分类模型的效果不是简单地问“预测对了多少”,而是要判断模型在真实任务中是否可靠、稳定、可用,这就引申出了很多不同的评价指标,本文将对这些指标进行总结。
为什么要评估分类模型
分类模型的目标是把样本划分到离散类别中,训练完成以后,模型会在训练集上给出一个看似不错的结果,但这并不意味着它在新数据上也可靠。模型评估要回答的是:
- 模型是否真的学到了可泛化的规律;
- 模型容易犯哪类错误;
- 错误的代价是否可以接受;
- 在不同阈值或使用场景下,模型表现是否稳定;
- 多个模型之间应该如何比较。
因此,评估指标不是装饰性的数字,而是模型能否投入使用的依据。
评估分类模型的两种层次
在分类任务中,模型可能输出两种东西。
第一种是类别标签:
例如直接输出“正类”或“负类”。
第二种是分数或概率:
这个分数通常表示样本属于正类的倾向。要把分数变成类别,还需要一个阈值 :
这带来两个不同的评估层次:
- 固定阈值后,评估模型的分类结果;
- 不固定阈值时,评估模型对样本的排序能力。
Accuracy、Precision、Recall、F1 等指标属于前者;ROC、AUC 更偏向后者。
数据集划分与泛化能力
评估模型时不能只看训练集表现。训练集上的高分可能只是模型记住了训练样本而不是学到了规律。
常见划分方式包括:
- 训练集:用于拟合模型参数;
- 验证集:用于选择超参数、调阈值和比较模型;
- 测试集:用于最后报告模型泛化性能。
如果数据量较小,也可以使用交叉验证。无论采用哪种方式,核心原则都是:用于最终评估的数据,不应该参与模型训练和调参。
对于时间序列、用户行为、推荐系统等场景,还要避免数据泄漏。例如不能把未来信息混入训练集,也不能让同一用户高度相关的样本同时出现在训练和测试中。
混淆矩阵及延伸的指标
二分类模型的评估可以从混淆矩阵开始,这是二分类模型与实际数据相互作用的最基础的结果:
| 预测为正类 | 预测为负类 | |
|---|---|---|
| 实际为正类 | TP | FN |
| 实际为负类 | FP | TN |
四个量分别表示:
- TP:True Positive,正样本被正确预测为正类。
- FN:False Negative,正样本被错误预测为负类。
- FP:False Positive,负样本被错误预测为正类。
- TN:True Negative,负样本被正确预测为负类。
混淆矩阵可以帮助我们计算出许多模型评估指标,包括准确率、精确率、召回率和 F值分数等。这些指标可以帮助我们全面评估模型在不同方面的表现。
Accuracy / ACC
准确率 (Accuracy, ACC) 表示所有样本中预测正确的比例:
它回答的问题是:模型总体预测对了多少?
假设一个疾病筛查任务中,患病率只有 。如果模型永远预测“未患病”,Accuracy 也可以达到 ,但它没有发现任何真正需要关注的患者。
它直观,但容易被类别比例误导,所以适合类别比例相对均衡、错误代价接近的场景。只要类别分布明显不均衡,就不能只看 Accuracy。
Precision / PPV
精确率 (Precision) 也叫阳性预测值 (Positive Predictive Value, PPV) 表示预测为正类的样本中,有多少真的为正类:
它回答的问题是:模型报出的正例有多可靠?
如果 FP 很多,Precision 就会下降,对于误报代价高的任务 Precision 往往很重要。
NPV
阴性预测值 (Negative Predictive Value, NPV) 表示预测为负类的样本中,有多少真的为负类:
它回答的问题是:模型报出的负例有多可靠?
如果 FN 很多,NPV 就会下降,对于漏报代价高的任务 NPV 往往很重要。
Recall / TPR
召回率 (Recall), 也叫真阳性率(True Positive Rate,TPR)表示真实正样本中被模型预测为正样本的占比:
它回答的问题是:真实正例有多少被找回?
一般而言,它的值越大意味着模型性能越好,因为它表示模型能够正确识别更多的正样本。对于漏报代价高的任务,Recall 往往很重要。
TNR
真阴性率 (True Negative Rate,TNR) 表示真实负样本中被模型预测为负样本的占比:
它回答的问题是:真实负例有多少被正确识别?
一般而言,它的值越大意味着模型性能越好,因为它表示模型能够正确识别更多的负样本。对于误报代价高的任务,TNR 往往很重要。
FPR
假阳性率 (False Positive Rate, FPR) 表示真实负样本中,被错误预测为正类的比例:
它回答的问题是:真实负例中有多少被误报?
一般而言,它的值越小意味着模型性能越好,因为它表示模型能够减少误报的数量。对于误报代价高的任务,FPR 往往很重要。
FNR
假阴性率 (False Negative Rate, FNR) 表示真实正样本中,被错误预测为负类的比例:
它回答的问题是:真实正例中有多少被漏报?
一般而言,它的值越小意味着模型性能越好,因为它表示模型能够减少漏报的数量。对于漏报代价高的任务,FNR 往往很重要。
F1 Score
Precision 和 Recall 通常互相牵制。提高阈值时,预测为正类的样本变少,Precision 可能上升,但 Recall 可能下降;降低阈值时,Recall 可能上升,但 Precision 可能下降。
F1 Score 是 Precision 和 Recall 的调和平均:
调和平均会惩罚偏科。如果 Precision 很高但 Recall 很低,或者 Recall 很高但 Precision 很低,F1 都不会太高。
更一般地,可以用 调整 Precision 和 Recall 的权重:
其中:
- 时,更重视 Recall;
- 时,更重视 Precision;
- 时,就是 F1。
Youden's J Statistic
Youden's J Statistic 是一个综合指标,定义为:
它回答的问题是:模型在区分正负样本方面的整体能力如何?
一般而言,它的值越大意味着模型性能越好,因为它表示模型在区分正负样本方面的能力更强。Youden's J Statistic 的取值范围是 ,其中:
- :模型完美区分正负样本;
- :模型没有区分能力,相当于随机猜测;
- :模型的预测结果与实际情况相反。
曲线与排序指标
前面的混淆矩阵指标都有一个共同前提:必须先选定一个阈值。
比如模型输出一个分数: 0.91, 0.72, 0.63, 0.41, 0.18。
对应的真实标签是: 1, 1, 1, 0, 0。
如果规定: 分数 >= 0.6 判为正类。
就能得到 TP、FP、TN、FN,然后计算 Precision、Recall 等指标。
阈值本身会改变模型表现,如果我们不固定阈值,而是观察模型在不同阈值下的表现,就引入了曲线指标,核心是不只看模型在某个阈值下分类得怎么样,还要看模型给正负样本排序的能力怎么样。
ROC Curve
ROC 曲线 (Receiver Operating Characteristic Curve) 用于观察不同阈值下 FPR 和 TPR 的变化。
它的横轴是 FPR,纵轴是 TPR:
改变阈值,会得到一系列 点。把这些点连起来,就是 ROC 曲线。
它回答的问题是:模型能否在较低误报率下保持较高召回率?
理想模型的曲线会靠近左上角,因为左侧表示 FPR 低,误报少;上方表示 TPR 高,召回多。如果模型完全没有区分能力,ROC 曲线会接近对角线,对角线意味着模型排序接近随机。
AUC
AUC (Area Under Curve) 通常指 ROC-AUC,也就是 ROC 曲线下的面积,取值通常位于 :
- AUC = 1:排序完全正确;
- AUC = 0.5:接近随机;
- AUC < 0.5:排序方向可能反了。
它回答的问题是:随机抽取一个正样本和一个负样本,模型把正样本排在负样本前面的概率有多大?
这个解释说明 AUC 衡量的是排序能力,而不是某个固定阈值下的分类效果。如果任务更关心“高风险样本是否排在前面”,AUC 很有参考价值。
需要注意的是,AUC 不直接反映某个业务阈值下的误报和漏报。当类别极度不均衡时,ROC-AUC 有时会显得偏乐观,此时还需要结合 PR 曲线观察正类识别质量。
可视化参考:Google ROC/AUC 交互说明,其中包含不同 AUC 形态的曲线示例。
常用指标总结
| 缩写 | 全拼 | 别名 | 公式 | 简要定义 |
|---|---|---|---|---|
| TP | True Positive | 真阳性 | - | 正样本判正 |
| FN | False Negative | 假阴性 | - | 正样本判负 |
| FP | False Positive | 假阳性 | - | 负样本判正 |
| TN | True Negative | 真阴性 | - | 负样本判负 |
| ACC | Accuracy | 准确率 | 整体正确率 | |
| PPV | Positive Predictive Value | Precision / 精确率 | 判正可信度 | |
| NPV | Negative Predictive Value | 阴性预测值 | 判负可信度 | |
| TPR | True Positive Rate | Recall / Sensitivity | 正类找回率 | |
| TNR | True Negative Rate | Specificity | 负类识别率 | |
| FPR | False Positive Rate | 假阳性率 | 负类误报率 | |
| FNR | False Negative Rate | 假阴性率 | 正类漏报率 | |
| F1 | F1 Score | F1 分数 | 平衡 P 与 R | |
| F-beta Score | F-beta 分数 | 加权 P 与 R | ||
| J | Youden's J Statistic | Youden 指数 | 正负区分能力 |
其中,,。