机器学习评估指标详解:准确率、精确率、召回率、F1分数、ROC-AUC
先从一个我踩过的坑说起吧。
几年前做一个客户流失预测模型,我折腾了很久,准确率硬是做到了95%。当时还挺得意,结果上线一跑,业务部门直接炸了——模型把绝大多数要流失的客户都漏掉了,召回率惨不忍睹。
从那以后我就明白一个道理:选错评估指标,你的模型可能一文不值。
这一章我们就把这些指标彻底掰开揉碎,看看每个指标到底在算什么,什么时候用,什么时候要避开。
1. 先搞清楚混淆矩阵(Confusion Matrix)
所有指标都建立在四个数字上。别嫌基础,这是地基。
假设二分类场景,Positive代表「正类」——通常是你要关注的那个类别(比如「欺诈」、「流失」、「患病」)。
| 预测为正类 | 预测为负类 | |
|---|---|---|
| 实际为正类 | TP (真正例) | FN (假负例) |
| 实际为负类 | FP (假正例) | TN (真负例) |
T开头的是「说对了」,F开头的是「说错了」。
第二个字母代表你的预测结果:P是正类,N是负类。
所以 TP 就是「你说对了,它确实是正类」。
2. 准确率(Accuracy)—— 最常用,也最容易骗人
说白了就是:你总共判断对了多少次?
Accuracy = (TP + TN) / (TP + TN + FP + FN)
这个指标最大的问题在哪儿?
我给你举个例子。一个数据集99%都是负类(正常用户),1%是正类(欺诈)。你写死一个模型,永远输出「负类」,准确率直接99%。
但你抓到了几个欺诈?0个。
这就是典型的「准确率陷阱」。
数据严重不平衡,我还盯着准确率调参,调了三天发现业务根本没变好。后来换成召回率,一周就见效了。
记住:类别极度不平衡时,别信准确率。
3. 精确率(Precision)—— 你的「言之有据」程度
精确率回答的是:你说它是正类的时候,到底有多靠谱?
Precision = TP / (TP + FP)
这个指标高,说明你很少犯「把好人当坏人」的错误。
比如垃圾邮件过滤:你宁可漏掉几封垃圾邮件,也不希望把正常邮件扔进垃圾箱。这时候就看精确率。
我的习惯:
- 精确率低 → FP太多 → 你的「正类门槛」设太低了
- 精确率极高 → 可能是误报率极低,但也可能是召回率太低(你几乎不敢说是正类)
4. 召回率(Recall)—— 别放过任何一个「真坏人」
召回率回答的是:所有真正的正类,你抓到了多少?
Recall = TP / (TP + FN)
召回率低意味着FN高——真正的正类被你误判为负类,放跑了。
我在做医疗影像诊断模型时,这个指标直接关系到人命。宁可多报几个假阳性(让医生复查),也不能漏掉一个真阳性。所以当时我们的目标就是把召回率推到99%以上,精确率可以适当妥协。
什么时候优先看精确率?
负类成本极高的时候。比如刑侦模型,你不能随便冤枉一个人是罪犯。
什么时候优先看召回率?
漏掉正类成本极高的时候。比如疾病筛查、欺诈检测、故障预警。
5. F1分数——精确率和召回率的「和事佬」
精确率和召回率往往是跷跷板:一个高了,另一个就低了。
F1分数是它们的调和平均值,用来找一个平衡点。
F1 = 2 * (Precision * Recall) / (Precision + Recall)
我个人觉得F1是「单数字汇报」时的首选。
你想想看,跟老板汇报总不能说「精确率0.7,召回率0.65,F1是0.67」,直接说「F1 0.67」就够了。
一点经验:
如果你看到精确率和召回率差距很大,比如0.9 vs 0.4,F1会被拉到很低(大概0.55)。这就是调和平均的惩罚机制——它不允许两个指标相差太多。
6. ROC曲线与AUC——阈值无关的「全局能力」
前四个指标都依赖一个东西:阈值。
你把阈值从0.5改到0.3,精确率和召回率会全变。那有没有一个指标能反映模型「无论阈值怎么调,整体表现如何」?
有,ROC曲线和AUC。
6.1 两个新概念
- TPR(真正率) = Recall = TP / (TP + FN)
- FPR(假正率) = FP / (FP + TN)
你看,TPR和FPR的分母里都有实际总正类和总负类,所以它们不受正负样本比例的影响。
6.2 怎么画ROC曲线?
把模型预测的得分从高到低排序,然后按每个得分做阈值:
- 把得分最高的样本作为阈值 → 计算一对 (FPR, TPR)
- 把得分第二高的样本作为阈值 → 再算一对 (FPR, TPR)
- … 把所有点连起来,就是ROC曲线
AUC就是曲线下的面积。
AUC=1 说明模型完美排序——所有正类的得分都排在了所有负类前面。
AUC=0.5 说明模型在瞎猜——跟抛硬币没区别。
我建议你记住:
- AUC不在乎你最终选哪个阈值,它看的是「排序能力」
- 如果你需要跟非技术人员沟通模型好坏,AUC是个很直观的指标
- 但注意:AUC高不代表召回率高。一个AUC 0.95的模型,如果你把阈值设得极高,召回率可能只有0.3
7. 一张图掌握指标关系
下面这张图展示了从原始数据到每个指标的推导链路。嗯,写代码调参时脑子里有这个图,就不容易乱。
8. 各指标适用场景速查表
| 场景 | 推荐指标 | 原因 |
|---|---|---|
| 类别均衡、没有明显偏向 | Accuracy | 简单直观,够用 |
| 正类稀有、漏检代价高 | Recall | 宁可误报,不可漏报 |
| 误报代价高(如内容审核) | Precision | 宁可漏审,不可错杀 |
| 需要平衡精准率与召回率 | F1 | 给老板看、给报告用 |
| 模型间公平比较、不依赖阈值 | ROC-AUC | 排序能力最稳定 |
| 极度不平衡(正类<1%) | Precision-Recall 曲线 | PR曲线对不平衡更敏感 |
不要只看一个指标。我见过太多人只盯着AUC调参,调完发现精确率只有0.3。
正确的做法是:先定业务目标(漏检还是误报更痛?),再选主指标,同时监控辅指标。