准确率、精确率、召回率、F1:四个核心指标
分类模型的评估,说白了就是回答一个问题:模型猜得对不对?
但「对不对」这件事,在不同场景下,衡量方式完全不一样。你想想看,癌症筛查和垃圾邮件过滤,关注的能是一回事吗?
我刚开始做模型评估时,就犯过一个低级错误。只看准确率,模型报告显示 99%,我高兴坏了。结果上线一跑,全是负样本,模型压根没学到东西。后来我明白了:有些场景下,你得拆开来看,到底哪些错了,哪些对了。
今天我们就来拆解这四个最基础的分类指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall) 和 F1分数(F1-Score)。
一点背景:混淆矩阵是基础
要说清楚这几个指标,得先提一下混淆矩阵。这个矩阵记录了两件事:模型预测的结果,和真实的结果。
说白了,就是画个 2x2 的格子,看模型错在哪、对在哪。
- TP(真阳性):模型说是正例,实际也是正例。猜对了。
- TN(真阴性):模型说是负例,实际也是负例。也猜对了。
- FP(假阳性):模型说是正例,实际是负例。误报。
- FN(假阴性):模型说是负例,实际是正例。漏报。
我习惯把 FP 叫「虚惊一场」,把 FN 叫「放虎归山」。这两种错误,代价完全不一样。
准确率(Accuracy):最直观,但最容易被骗
公式很简单:
Accuracy = (TP + TN) / (TP + TN + FP + FN)
准确率衡量的是「猜对了多少」。看起来无脑好用,对吧?
但它有一个致命的陷阱:类别不平衡。
一个欺诈检测数据集,正样本只占 0.1%。模型只要全部预测为「非欺诈」,准确率就高达 99.9%。但这样的模型,你敢用吗?
实际上一上线,一个欺诈都抓不住。所以,准确率只有在类别分布均衡时才有参考价值。
| 场景 | 适用性 | 举个例子 |
|---|---|---|
| 类别均衡 | ✅ 适用 | 手写数字识别,10 类样本数量差不多 |
| 类别严重不平衡 | ❌ 不适用 | 欺诈检测、罕见病诊断 |
精确率(Precision)与召回率(Recall):一个怕误报,一个怕漏报
这两个指标,常常放在一起说。
精确率公式:
Precision = TP / (TP + FP)
精确率回答的是:「模型说它是正例,有多大概率是真的?」
说白了,就是看你的模型是不是经常「瞎说」。FP 越少,精确率越高。
召回率公式:
Recall = TP / (TP + FN)
召回率回答的是:「所有真正的正例,模型找出来了多少?」
它关注的是有没有「漏网之鱼」。FN 越少,召回率越高。
我举个例子你就明白了。假设一个模型在垃圾邮件分类上:
- 精确率高:模型标记为「垃圾」的邮件,基本全是垃圾。但可能有些垃圾邮件被放过去了。(召回率低)
- 召回率高:模型几乎把所有的垃圾邮件都抓出来了。但是过程中把几封正常的邮件也误杀了。(精确率低)
你看,这两个指标就像跷跷板。你很难同时让两者都高。所以需要根据业务场景选。
什么时候优先看精确率?
- 误报的代价很高的时候。比如:医疗诊断中把「良性」判为「恶性」(后续检查痛苦且昂贵)。
- 推荐系统中,给用户推荐了错误的东西,用户可能直接卸载 App。
什么时候优先看召回率?
- 漏报的代价很高的时候。比如:癌症筛查,宁可多查几次,也不能漏掉一个。
- 金融风控,宁可误判几笔正常交易,也不能放跑一笔欺诈。
F1分数:给精确率和召回率一个和事佬
那如果我想同时兼顾精确率和召回率,怎么办?
这时候 F1 分数就出场了。它是两者的调和平均数。
F1 = 2 * (Precision * Recall) / (Precision + Recall)
为什么不用算术平均数?(比如 (P+R)/2)
因为调和平均数对小的数更敏感。举个例子:
- P = 1.0, R = 0.0 → 算术平均数 = 0.5,但 F1 = 0.0
- F1 会告诉你:有一个指标是 0,那么整体就是 0。这才是真实水平。
F1 分数适合的场景:
我个人习惯在以下场景用 F1:
- 不太确定该优先优化精确率还是召回率时。
- 需要对比不同模型时,用一个综合指标快速判断。
- 业务方既不想漏报,又不想误报,但预算有限。(这种情况经常发生)
F1 还有变体,比如 Fβ 分数。β 用来调整精确率和召回率的权重。β > 1 时更重视召回率,β < 1 时更重视精确率。
Fβ = (1 + β²) * (P * R) / (β² * P + R)
嗯,这个在实际工作中用得不多。大部分时候,F1 就够了。
四者对比总结
| 指标 | 公式核心 | 关注点 | 典型场景 |
|---|---|---|---|
| 准确率 | (TP+TN)/总数 | 整体猜对的概率 | 类别均衡、通用分类 |
| 精确率 | TP/(TP+FP) | 误报有多严重 | 垃圾邮件过滤、推荐系统 |
| 召回率 | TP/(TP+FN) | 漏报有多严重 | 疾病筛查、欺诈检测 |
| F1分数 | 2PR/(P+R) | 精确率和召回率的权衡 | 模型对比、不确定优先优化方向时 |
最后说一句:这些指标不是选一个就行。实际项目中,我通常会把准确率、精确率、召回率、F1 全都打印出来,放在一张表格里看。不同的业务阶段,侧重点会变。
就拿我做过的一个风控模型来说:
- 上线初期,业务方说「宁愿错杀一千,不能放过一个」,我就主推召回率。
- 稳定运行三个月后,误报太多,客服受不了了,我就开始优化精确率。
- 到了最终验收,我们还是用 F1 来定版。
评估指标从来不是死的,它是你跟业务方沟通的语言。懂了这几个,就能跟别人聊到一块去了。