混淆矩阵与分类指标,从 TP、FP、FN、TN 到 Precision、Recall、AUC
评价二分类模型时,可以先将某个判定阈值下的预测和真实标签填进混淆矩阵(confusion matrix),再计算精确率、召回率和 F1 等指标。ROC-AUC 和平均精度(AP)还需要各样本的排序分数,或多个阈值下的统计,不能仅由一张固定阈值的四格表算出。
混淆矩阵的四个格子
二分类问题中,每个样本有一个真实标签和一个预测标签,两两组合得到四种结果。
| 术语 | 英文 | 含义 |
|---|---|---|
| TP | True Positive | 真阳性,实际为正,预测也为正 |
| FP | False Positive | 假阳性,实际为负,预测为正,也叫误报 |
| FN | False Negative | 假阴性,实际为正,预测为负,也叫漏报 |
| TN | True Negative | 真阴性,实际为负,预测也为负 |
记牢两条不容易混。
- 召回率(Recall)关心的是 FN,实际正例里找出来了多少,怕的是漏报。
- 假阳性是 FP,负例被误判成正例,怕的是误报,它出现在精确率、假阳性率等指标里,和召回率不是一回事。
常用指标
| 指标 | 英文/别名 | 关心什么 | 公式 |
|---|---|---|---|
| 精确率 | Precision / 查准率 / PPV | 你说是正的有多少真是正 | TP / (TP + FP) |
| 召回率 | Recall / 查全率 / 灵敏度 / TPR | 实际正例里你找出来多少 | TP / (TP + FN) |
| 准确率 | Accuracy | 总体对多少,类别不平衡时容易骗人 | (TP + TN) / 全部 |
| 特异度 | Specificity / TNR | 实际负例里你排除了多少 | TN / (TN + FP) |
| 假阳性率 | FPR / 误报率 | 负例被误判为正的比例 | FP / (FP + TN) |
| 假阴性率 | FNR / 漏报率 | 正例被漏掉的比例 | FN / (TP + FN) |
| F1 | F1-score | 精确率和召回率的调和平均 | 2PR / (P + R) |
| ROC-AUC | AUC | 模型把正例排在负例前面的整体能力,不依赖单一阈值 | ROC 曲线下面积 |
| PR-AUC | 精确率-召回率曲线下面积 | 观察不同阈值下的精确率与召回率 | 按所用插值方式计算曲线面积 |
| 平均精度 | Average Precision / AP | 汇总排序结果中精确率与召回率的变化 | 常按召回率增量对精确率加权 |
Accuracy 的警告值得单独记住。当正负样本数量差很多时,一个把所有样本都预测成多数类的模型也能拿到很高的准确率。这时 Accuracy 展示的是一种假象,应改用 PR-AUC、F1、Recall 等对少数类敏感的指标。
ROC-AUC 和 PR 曲线汇总多个阈值下的表现。降低正类阈值会使更多样本被判为正,召回率和误报数不会减少;精确率则取决于新增样本中正负例的比例,不保证单调变化。正例稀少时,PR 曲线有助于观察预测为正的结果中有多少是真正例。AP 与按梯形插值得到的 PR 曲线面积在部分实现中计算方式不同,报告时应说明采用的定义。
同一个东西,不同领域不同叫法
信息检索 / 搜索
- Precision@K,前 K 个结果里有多少相关。
- Recall@K,前 K 个结果覆盖了多少所有相关结果。
- MAP(Mean Average Precision),对每个查询算平均精度再取均值。
- MRR(Mean Reciprocal Rank),第一个相关结果排名的倒数,越靠前越好。
- NDCG,考虑排序位置和相关度等级,排得越靠前、相关度越高的结果权重越大。
其中 Precision@K = 前 K 个结果中的相关数 / K,Recall@K = 前 K 个结果中的相关数 / 所有相关数。注意这里数的是排序列表,不是四格表,但思想完全一致,相关结果就是正例。
推荐系统
- Recall@K,前 K 个推荐覆盖了用户相关项目的比例;HitRate@K,前 K 个推荐是否至少命中一个相关项目。
- NDCG@K,排序质量。
- 召回阶段重 Recall,先把用户可能喜欢的捞出来;排序阶段重 Precision 和 NDCG,排出来的顺序要准。
目标检测
- IoU(Intersection over Union),预测框和真实框的交并比,衡量框定位得准不准。
- 设定 IoU 阈值(比如 0.5)判断一个预测算不算 TP,然后就能套用混淆矩阵的整套指标。
- AP,按所采用的检测评测协议汇总某一类别的精确率与召回率。
- mAP,对类别及协议规定的 IoU 阈值等维度求平均;具体平均范围须随评测标准说明。
异常检测 / 风控
- 误报率 FPR、漏报率 FNR、召回率 Recall、AUC、KS。
- 风控的典型约束是控制漏报(放过风险)的同时不能让误报太多,误伤正常用户太多,业务受不了。
医学 / 生物
- 敏感度 Sensitivity,等于召回率。
- 特异度 Specificity,等于 TNR。
- 阳性预测值 PPV,等于精确率。
医学文献里的这三个词和机器学习指标一一对应,读文献时可以直接换算。
一个完整的计算例子
假设有 100 个正例和 100 个负例,模型预测结果如下。
- TP = 80,实际正例中找出来 80 个。
- FN = 20,漏掉 20 个正例。
- FP = 10,10 个负例被误报为正。
- TN = 90,正确排除 90 个负例。
代入公式。
- 精确率 = 80 / (80 + 10) ≈ 88.9%
- 召回率 = 80 / (80 + 20) = 80%
- 特异度 = 90 / (90 + 10) = 90%
- 假阳性率 FPR = 10 / (10 + 90) = 10%
- 假阴性率 FNR = 20 / (80 + 20) = 20%
- 准确率 = (80 + 90) / 200 = 85%
- F1 = 2 × 0.889 × 0.8 / (0.889 + 0.8) ≈ 84.2%
可以看到同一组预测,不同指标给出的”成绩”不同,选哪个指标取决于业务怕误报还是怕漏报。
按业务场景取舍
一句话,这些指标是为了评估模型、调阈值、比较模型,并在”误报”和”漏报”之间按业务代价做取舍。
- 医疗筛查、安检、欺诈检测,怕漏掉,优先高召回率,宁可多误报一些,漏掉的代价远高于误报的麻烦。
- 垃圾邮件过滤、推荐、广告推送,怕打扰用户,优先高精确率,推错的东西越多用户越烦。
- 类别不平衡,看 PR-AUC、F1、Recall,别只看 Accuracy。
- 排序系统,看 NDCG、MAP、MRR。
- 目标检测,看 AP、mAP。
和降维可视化的分工
本文处理的是模型评价支路,把预测结果和真实标签对照,产出定量指标。降维可视化笔记处理的是表示分析支路,把高维表示投影到二维,观察样本怎样聚集、哪些点可疑,产出待验证的定性假设。两支路的证据不能互相替代。降维图再漂亮也不能代替测试集上的指标,指标再高也不说明表示结构没有问题。实践中通常先用降维图发现疑点,再用分类指标定量验证;两者一致时结论更稳,不一致时往往值得追查。
总结
最核心的链条如下。
固定阈值的 TP、FP、FN、TN → Precision、Recall、F1、FPR;排序分数和多阈值结果 → ROC-AUC、AP 等。
- 召回率,正例里找出来多少,怕漏报。
- 假阳性 FP,负例被误判为正,怕误报。
- 精确率,预测为正的里有多少是真的。
- F1,精确率和召回率的平衡。
- AUC / AP,不依赖单一阈值的整体排序与检测能力。
指标的定义和数据要求随任务与评测协议变化,报告时应同时说明正类、阈值或排序口径。