本节摘要:SOURCE 6.1 详解 Accuracy、混淆矩阵、Precision、Recall、F1 与 AUC-ROC。本节强调类别不均衡下 Accuracy 的误导性,并给出业务映射。
| 预测正 | 预测负 | |
|---|---|---|
| 真实正 | TP | FN |
| 真实负 | FP | TN |
from sklearn.metrics import classification_report print(classification_report(y_true, y_pred, digits=4))
| 场景 | 优先指标 | 原因 |
|---|---|---|
| 垃圾邮件 | Precision | 误杀重要邮件 |
| 欺诈/疾病 | Recall | 不能漏报 |
| 不均衡多类 | Macro-F1 | 每类同等权重 |

⚠️ 常见坑:只报 Accuracy——负类 99% 时全猜负也 99%。
💡 关键直觉:指标是产品语言,不是论文装饰。
混淆矩阵是一切指标的源头。用一个具体数字走一遍:假设测试集 1000 条,正类 100 条、负类 900 条,模型预测出 80 条正类、其中 70 条是真的。那么真阳性 70、假阳性 10、假阴性 30、真阴性 890。精确率等于 70 除以 80,约 87.5%,召回率等于 70 除以 100,即 70%,F1 约 77.8%。若只看准确率等于 960 除以 1000,即 96%,看起来不错,但正类样本只召回 70%,对「找差评」这类任务就是灾难。这就是「不均衡时勿用准确率」的数字证明。
Macro-F1、Micro-F1、Weighted-F1 的差异要理解到「谁说话算数」的层面。Macro-F1 对每个类算 F1 再取平均,少数类与多数类权重相同,适合类别均衡性很重要、每个类都不能被牺牲的任务;Micro-F1 先汇总所有类的真阳性、假阳性、假阴性再算,被样本量大的类主导;Weighted-F1 按每类样本占比加权平均,是两者之间的折中,也是 sklearn 默认的平均参数之一。报告时最好同时给出 Macro 与 Weighted 两种,并注明少数类的单独指标。
AUC-ROC 衡量排序能力:把样本按预测概率排序,随机取一对正负样本,正样本排在负样本前的概率。它对阈值不敏感,适合二分类调阈值,但不能反映某个具体阈值下的精确率与召回率,所以别只用 AUC 汇报生产效果。
业务映射是评估的灵魂。垃圾邮件:误杀一封重要邮件代价极高,所以看精确率,产品侧宁可漏杀;风控与疾病筛查:漏掉一个真风险代价更高,所以看召回率;不均衡的多类任务(如舆情情绪五分类):看 Macro-F1 保证每类都被公平对待。指标选错了,模型再好也无从谈起——因为「好」的定义本身错了。上线后还要建立线上指标:人工复审率、误拦截率、客诉率,与离线指标对照,发现离线高分、线上翻车时,优先怀疑分布漂移与预处理不一致。
实操建议:评估脚本固定下来,每次实验输出同一格式的报告(每类精确率召回率 F1、Macro/Weighted、混淆矩阵),并自动归档;这样第 5.2 节的错误分析可以直接基于归档结果做分桶,而不是临时重跑。评估不是一次性的动作,而是整个迭代周期的记录。
还有一个常见混淆点:精确率与召回率的权衡要明确落在产品策略上。不要只报「F1 最高的一组」,而是把不同阈值下的精确率召回率曲线形态画出来,与业务方一起选工作点。这比一句「F1 0.85」有用得多。
from sklearn.metrics import classification_report # 假设 y_true / y_pred 是等长列表 report = classification_report(y_true, y_pred, target_names=["neg", "pos"], digits=4) print(report) # 输出里同时给出 per-class 与 macro/weighted avg
| 指标 | 回答的问题 | 不均衡时的注意 |
|---|---|---|
| Accuracy | 整体正确比例 | 会被多数类掩盖 |
| Precision | 预测为正的有多准 | 误杀代价高时看它 |
| Recall | 真正的正类抓到多少 | 漏报代价高时看它 |
| F1 | P/R 的调和平均 | 用 Macro 版本 |
| AUC | 排序能力 | 不反映阈值效果 |
把评估输出固化成统一模板,每次迭代都产出一份,便于横向对比。
| 区块 | 内容 |
|---|---|
| 数据集 | 版本、切分比例、类别分布 |
| 每类指标 | 精确率、召回率、F1 |
| 汇总指标 | Macro / Weighted F1 |
| 混淆矩阵 | 热图或表格 |
| 阈值 | 当前工作点与决策说明 |
模板化之后,「这次比上次好还是坏」可以直接看台账;结合第 5.2 节错误分析,还能从指标波动定位是哪个类别在退步。指标的记录口径一旦统一,团队评审与线上监控都能共享同一语言。
混淆矩阵不应只存在于笔记本里,建议把它作为每次实验的固定输出之一,以表格或热图形式归档。观察方向有三个:主对角线越亮越好;关注假阴性集中在哪些真类——它们是被漏掉的信号;关注假阳性集中在哪些预测类——它们是误报的来源。结合第 5.2 节的错误分析,混淆矩阵是定位问题最直接的入口,也是指标报告里最容易被人读懂的一页。