准确率、精确率、召回率、F1:四个核心指标

分类模型的评估,说白了就是回答一个问题:模型猜得对不对?

但「对不对」这件事,在不同场景下,衡量方式完全不一样。你想想看,癌症筛查和垃圾邮件过滤,关注的能是一回事吗?

我刚开始做模型评估时,就犯过一个低级错误。只看准确率,模型报告显示 99%,我高兴坏了。结果上线一跑,全是负样本,模型压根没学到东西。后来我明白了:有些场景下,你得拆开来看,到底哪些错了,哪些对了。

今天我们就来拆解这四个最基础的分类指标:准确率(Accuracy)、精确率(Precision)、召回率(Recall) 和 F1分数(F1-Score)。

分类模型评估指标全景图 混淆矩阵(Confusion Matrix) 实际正例 实际负例 TP(真阳) FP(假阳) 预测正例 预测负例 FN(假阴) TN(真阴) 准确率 Accuracy = (TP+TN)/(TP+TN+FP+FN) 精确率 Precision = TP / (TP + FP) 召回率 Recall = TP / (TP + FN) F1分数 F1 = 2×P×R / (P + R) 核心关系:TP 越大,所有指标越好

一点背景:混淆矩阵是基础

要说清楚这几个指标,得先提一下混淆矩阵。这个矩阵记录了两件事:模型预测的结果,和真实的结果。

说白了,就是画个 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 来定版。

评估指标从来不是死的,它是你跟业务方沟通的语言。懂了这几个,就能跟别人聊到一块去了。