在做机器学习、推荐系统、搜索排序、风控或异常检测时,你一定遇到过 Recall(召回率)、Precision(精确率) 和 F1 Score。
很多人能背公式,但在实际业务中却不一定知道 什么时候该优先 Recall,什么时候该优先 Precision,以及 F1 什么时候才有意义。
一、为什么 Accuracy(准确率)经常不够用?
很多初学者第一反应是看 Accuracy(准确率):
Accuracy = 预测正确数量 / 总样本数
看起来很合理,但在 类别不平衡(Imbalanced Dataset) 时,Accuracy 会严重误导。
一个真实业务场景
假设你在做 欺诈检测系统:
- 总交易:1,000,000
- 欺诈交易:1,000(0.1%)
- 正常交易:999,000
现在有一个模型:永远预测:不是欺诈
结果:
Accuracy = 999,000 / 1,000,000 = 99.9%
听起来很牛,但: 它一个欺诈都没抓到
这就是为什么: 在很多业务中,Recall 和 Precision 比 Accuracy 更重要。
二、核心基础:混淆矩阵(Confusion Matrix)
先理解一个核心结构:
实际 Positive 实际 Negative
预测 Positive TP FP
预测 Negative FN TN
四个关键值:
| 缩写 | 含义 | 说明 |
|---|---|---|
| TP | True Positive | 预测对的正样本 |
| FP | False Positive | 误报 |
| FN | False Negative | 漏报 |
| TN | True Negative | 预测对的负样本 |
后面所有指标都来自这里。
三、Recall(召回率):抓住了多少真的?
Recall 关注: 真实存在的正样本,被你找到了多少
公式:Recall = TP / (TP + FN)
直觉理解: 少漏掉
业务理解:Recall 高意味着什么?
典型适合场景:
1. 医疗检测(极度重要)
比如:
- 癌症筛查
- 疾病检测
如果 FN(漏诊)高:后果可能是致命的
所以:宁可误报,也不能漏掉
优先:Recall > Precision
2. 搜索系统(第一阶段召回)
例如:
- 搜索引擎
- 推荐系统
第一阶段: 尽可能多找候选
哪怕有很多不相关: 后面还能排序过滤
这就是:Recall First Strategy
四、Precision(精确率):你预测的有多少是真的?
Precision 关注:你预测为正的里面,有多少是真的
公式:
Precision = TP / (TP + FP)
直觉理解:少误报
业务理解:Precision 高意味着什么?
典型适合场景:
1. 邮件垃圾过滤
如果 FP 高:
正常邮件会被误判为垃圾:
用户体验灾难
所以:
Precision > Recall
2. 风控冻结账户
如果误封太多:
客户投诉直接爆炸
必须控制:
FP(误报)
五、Recall vs Precision:核心权衡(Trade-off)
这两个指标:天然是对立的
当你提高 Recall:通常 Precision 会下降。
当你提高 Precision:通常 Recall 会下降。
原因:阈值 Threshold 在控制它们
举例:模型概率阈值
假设模型输出概率:
0.95
0.80
0.60
0.40
0.20
如果:
threshold = 0.5
预测 Positive:
0.95 0.80 0.60
如果:
threshold = 0.2
预测 Positive:
全部预测 Positive
结果:
Recall ↑
Precision ↓
六、F1 Score:什么时候才该用?
F1 是:Precision 和 Recall 的调和平均(Harmonic Mean)
公式:
F1 = 2 × Precision × Recall / (Precision + Recall)
关键点:它更惩罚短板
不是简单平均。
为什么不用普通平均?
假设:
Precision = 1.0
Recall = 0
普通平均:
0.5
但: 这个模型其实是垃圾
F1:
= 0
更合理。

从几何角度看,F1 本质是 Precision 和 Recall 的调和平均。
三维曲面可以直观地看到:
- Precision 和 Recall 必须同时提高,F1 才能明显提升
- 如果其中一个指标很低,即使另一个很高,F1 仍然不会高
- F1 的最大值始终出现在 Precision = Recall = 1 的位置
这也是为什么在实际工程中,单独优化 Precision 或 Recall 往往是不够的。
七、什么时候用 F1?(工程经验)
F1 适合:Precision 和 Recall 同样重要
典型场景:
1. 文本分类
比如:
- 垃圾评论检测
- 内容审核
既不希望:误杀正常内容(FP)
也不希望:漏掉违规内容(FN)
所以:F1 很适合
2. 多类别分类(Macro-F1)
特别是:类别分布不均
例如:
- 商品分类
- 标签系统
通常看:Macro-F1
而不是 Accuracy。
八、总结
Recall = 少漏掉(抓全)
Precision = 少误报(抓准)
F1 = Precision 和 Recall 的平衡指标
但真正工程能力体现在: 你知道什么时候该牺牲 Precision,什么时候该牺牲 Recall。
这比会写公式更重要。
结尾
Recall、Precision、F1 看似只是三个公式,但本质上是: 业务代价函数的表达方式
真正成熟的工程师:
不会问:哪个指标最好?
而是问:这个业务,错在哪里最贵?
这才是指标选择的核心。

1836

被折叠的 条评论
为什么被折叠?



