准确率、精确率、召回率:公式推导与实战陷阱

评估分类模型,光看一个指标是不够的。
准确率、精确率、召回率——这三个词你肯定听过。
但真正用对的人,说实话不多。
尤其是碰到不平衡数据,一个不留神就被指标骗了。

这一节我们就掰开揉碎,把它们的公式、适用场景、以及坑都讲清楚。

1. 公式与直觉

先统一一下符号。
以二分类为例,样本分正类和负类。
预测结果和真实结果组合成四种情况:

TP(真正例):预测为正,实际为正
FP(假正例):预测为正,实际为负
TN(真负例):预测为负,实际为负
FN(假负例):预测为负,实际为正

基于这四个数,三个指标的定义就很清楚了:

指标公式直觉含义
准确率 (Accuracy)(TP + TN) / (TP + FP + FN + TN)所有样本中预测正确的比例
精确率 (Precision)TP / (TP + FP)预测为正的里面,有多少是真正正确的
召回率 (Recall)TP / (TP + FN)真实为正的里面,模型找出了多少

举个例子:
假如有100个病人,10个真有病(正类),90个没病(负类)。
模型预测了15个人有病,其中8个真的病了,另外7个是误判。
那么:

TP = 8,FP = 7,TN = 83,FN = 2
准确率 = (8+83)/100 = 91%
精确率 = 8/(8+7) = 53.3%
召回率 = 8/(8+2) = 80%

你看,准确率91%看起来挺高,但精确率只有53%,说明模型报出的阳性有一半是错的。
如果这是癌症筛查,那就麻烦了。

我的个人习惯: 拿到一个分类任务,先算一遍这三个指标,只看准确率很容易被表面数字欺骗。

2. 适用场景:什么时候该看什么?

没有万能指标,关键看你的业务目标是什么。

  • 准确率: 适用于正负样本均衡,且两类错误代价差不多的场景。比如垃圾邮件识别?不,垃圾邮件误判一封正常邮件可能很严重,所以准确率其实不太合适。
  • 精确率: 当你更在乎“不要误报”时。比如商品推荐系统,如果推荐错了用户会很烦,那你需要高精确率。
  • 召回率: 当你更在乎“不要漏掉”时。比如癌症筛查、欺诈检测,宁肯错杀一千,不能放过一个。

很多场景两者都需要权衡,这时候就要看 F1 分数(精确率和召回率的调和平均)。
但这个我们后面再说,先记住一个原则:

业务上“宁可错杀”还是“宁可不杀”?前者看召回,后者看精确。

3. 不平衡数据下的陷阱

这才是重点。
我记得有一次做风控模型,正样本(欺诈)只占1%,负样本99%。
模型学了一招:全部预测为负。准确率直接99%!
老板看了说“不错”,但我心里清楚——这个模型屁用没有,一个欺诈都抓不到。

为什么会这样?
因为准确率在极度不平衡时会被多数类主导。
你算一下:

全部预测为负:
TP=0, FP=0, TN=9900, FN=100
准确率 = 9900/10000 = 99%

这就是经典的“准确率悖论”。
模型什么都没做,但分数好看得要命。

那该用什么指标?
精确率和召回率对少数类更敏感。上面这个模型:

精确率 = 0/(0+0) = 未定义(0/0)
召回率 = 0/100 = 0%

召回率直接归零,撕下伪装。所以不平衡数据下,我通常建议:

  • 主要看召回率和精确率,尤其关注少数类的表现
  • 结合混淆矩阵,眼见为实
  • 考虑使用 PR 曲线(精确率-召回率曲线),比 ROC 更实用
我曾经踩过一个坑: 有个模型在测试集上精确率90%,召回率85%,看着挺好。上线后业务反馈一堆误报。后来发现训练集和线上分布的类别比例不一样,精确率瞬间掉到70%。所以跨环境时要小心指标的稳定性。

4. 我的实战建议

如果你现在正要评估一个分类模型,我的建议是:

  1. 先打印混淆矩阵。 真数最直接,不要只盯着指标。
  2. 根据业务代价,自己定一个阈值。 默认0.5不一定最优,可以画精确率-召回率曲线来调。
  3. 如果不平衡严重,用采样或加权损失。 但最终评估还是用原始分布的数据。
  4. 多指标互相审查。 精确率、召回率、准确率、F1,哪个异常就追查原因。

我习惯在每次实验报告中都放一张指标对比表,像这样:

模型    准确率    精确率    召回率    F1
----------------------------------------
LR      0.91      0.53      0.80      0.64
RF      0.95      0.78      0.85      0.81
XGB     0.97      0.88      0.92      0.90

一眼就能看出哪个模型更均衡。

下面这张图可以帮你快速理解三者之间的关系:

混淆矩阵 → 准确率·精确率·召回率 TP 预测正 · 真实正 FP 预测正 · 真实负 FN 预测负 · 真实正 TN 预测负 · 真实负 真实正 真实负 预测正 预测负 召回率 TP/(TP+FN) 精确率 TP/(TP+FP) 准确率 (TP+TN)/(TP+FP+FN+TN) 📌 准确率依赖全部四个格子 不平衡时容易被多数类主导 精确率/召回率专注少数类