混淆矩阵(Confusion Matrix)是把“预测结果”和“真实结果”两两对照、摆成一张格子表的东西:行是真实类别,列是预测类别,主对角线上的格子是猜对的,剩下的格子全是错——而且错得各有各的理由。
二分类时它有四个格子,用火警来打比方最直观:
| 格子 | 含义 | 火警版 | 业务版叫法 |
|---|---|---|---|
| TP(True Positive) | 预测为正,实际为正 | 真起火,警报响了 | 抓对了 |
| FP(False Positive) | 预测为正,实际为负 | 有人烤串冒烟,警报也响了 | 误报、假警报 |
| FN(False Negative) | 预测为负,实际为正 | 真起火,警报没响 | 漏报、漏网 |
| TN(True Negative) | 预测为负,实际为负 | 没火,警报安静 | 安静是对的 |
这个比方最要紧的一点是:FP 和 FN 的代价完全不相等。误报吵人,漏报烧楼。可它们在表里只各占一格,一旦被合并成一个数字,就再也分不开了。
精确率(Precision)和召回率(Recall)正是从这张表里各拎走一个格子:
- 精确率 = TP / (TP + FP):警报响的这一批里,多少是真火。它盯的是 FP。
- 召回率 = TP / (TP + FN):所有真火里,警报抓住了多少。它盯的是 FN。
- F1 是这两者的调和平均。
所以 F1 并不等于“更全面”,它是一次折中:默认误报和漏报一样疼。现实里很少有这种好事。垃圾邮件过滤中,误杀一封工作邮件和放过一封广告,代价大致相当,折中还算合理;肿瘤筛查中,漏诊和误诊根本不在一个量级,这时只报一个 F1 就是偷懒。
| 指标 | 公式 | 盯着哪一格 | 回答的问题 |
|---|---|---|---|
| 准确率 Accuracy | (TP+TN) / 全部 | 所有格子 | 整体对了多少(类别极不平衡时会骗人) |
| 精确率 Precision | TP / (TP+FP) | FP | 说是“正”的里面有多少真“正” |
| 召回率 Recall | TP / (TP+FN) | FN | 真“正”的里面抓回来多少 |
| F1 | P 与 R 的调和平均 | 两者折中 | 用一个数同时兼顾,但代价被掩盖 |
和相邻概念的区别在于:混淆矩阵不是指标,是原料。准确率、AI 词典:精确率、召回率、F1">精确率、召回率、F1、以及各种曲线,全都是从这四个格子里算出来的(多分类就是 N×N 版本,每个类别都能拆出自己的一组四格)。当你只看到一个 F1,等于把四个格子压成了一个数——信息是主动丢掉的,不是本来就没有。
对从业者,动手调阈值其实就是在 FP 和 FN 之间滑动:阈值调高,误报少、漏报多;调低则相反。调之前先问清楚业务上哪边更贵,比调完再看 F1 涨没涨有用得多。对普通职场人,下次看到“准确率 99%”或者“F1 0.9”,可以多问一句:正例本身占多大比例?误报和漏报分别长什么样、谁来承担?这两个问题,比指标本身更能说明这套系统能不能用。
