AI 准确率很高就靠谱吗?精确率、召回率与 F1 讲清楚
一个把所有工单都判为普通的模型,也可能获得很高准确率。本文用工单分类的模拟案例讲清精确率、召回率、F1、分类阈值和误报成本,帮助你看懂 AI 评测结果及其适用范围。
一家公司每天收到一千条客服工单,其中九百五十条是普通咨询,五十条需要优先处理。假如 AI 不看内容,把所有工单都标成普通,它也能交出百分之九十五的准确率。数字很好看,紧急问题却一条也没找出来。
这是一个为解释指标而设计的演算案例,不代表任何产品的实测成绩。它提醒我们:看 AI 分类是否可靠,必须先知道它把什么判对、把什么漏掉,以及错一次会带来什么后果。本文把准确率、精确率、召回率和 F1 放进同一张表里,让这些术语变成能算清楚的账。
先约定:什么叫正例
二分类就是把对象分成两类。我们把“需要优先处理的工单”定义为正例,把普通工单定义为负例。正负只是标签,并不表示好坏;换成缺陷检测,正例也可以是有缺陷的零件。所有公式都依赖这个约定,汇报时必须写明。
还要有一份可核对的参考答案。工单是否紧急,应按业务规则由人工确认,例如服务是否中断、影响多少用户、是否存在明确截止时间。不能直接用 AI 的旧判断作为答案,再称新模型与旧模型一致就是正确。
先说“我们要找出什么”,再说“模型有多准”。没有清楚的类别定义,指标的小数点保留再多位也没有意义。
用四个格子,装下全部结果
现在换一个确实阅读内容的模型:在五十条真正紧急的工单中,它找出了四十条、漏掉十条;在九百五十条普通工单中,它误报了六十条,其余八百九十条判断正确。把实际类别和模型判断交叉,就得到混淆矩阵。
| 参考答案 | AI 判为紧急 | AI 判为普通 | 合计 |
|---|---|---|---|
| 实际紧急 | 40:真正例 TP | 10:假负例 FN,漏报 | 50 |
| 实际普通 | 60:假正例 FP,误报 | 890:真负例 TN | 950 |
| 合计 | 100 | 900 | 1000 |
阅读别人的矩阵时,先看横轴和纵轴。不同工具可能把实际类别放在行或列,直接背“左上角是什么”容易看反。真正稳定的是四个问题:找对多少、误报多少、漏掉多少、正确排除多少。

三个指标,分母各不相同
准确率 Accuracy关心全部判断中有多少正确。这里是四十条找对的紧急工单,加八百九十条正确排除的普通工单,再除以一千,总共百分之九十三。它比开头那个“全部判普通”的模型低,却具备了后者没有的识别能力。
精确率 Precision关心被 AI 选中的对象有多少真的属于目标类别。这里 AI 报出一百条紧急工单,只有四十条确实紧急,所以是百分之四十。值班人员看到的队列里,每十条大约有六条误报,这直接影响复核工作量。
召回率 Recall关心实际应该找到的对象,最终找回多少。五十条真正紧急的工单找回四十条,所以是百分之八十。剩下百分之二十漏在普通队列里,业务需要评估它们延迟处理的影响。
| 指标 | 计算方式 | 本例结果 | 主要回答 |
|---|---|---|---|
| 准确率 | (TP + TN) / 总数 | 93% | 全部判断对了多少 |
| 精确率 | TP / (TP + FP) | 40% | 报出来的有多少可信 |
| 召回率 | TP / (TP + FN) | 80% | 真正要找的漏了多少 |
中文交流中“准确”“精准”经常混用,正式评测最好同时写英文名称和公式。尤其别把“误报占全部报警的比例”与“普通工单被误报的比例”混为一谈:它们的分母分别是全部报警、全部实际负例。
这些指标的正式定义可查阅 Google 分类指标教程。本文的工单数据和工作流程为独立设计,用于展示同一组结果为什么能产生不同结论。
F1 能压成一个分数,也会丢掉信息
F1 是精确率和召回率的调和平均数,计算为 2 × 精确率 × 召回率 / (精确率 + 召回率)。本例为 2 × 0.4 × 0.8 / 1.2 ≈ 0.533,约百分之五十三点三。它会惩罚其中一项特别低的情况,适合在固定任务、固定数据上做辅助比较。
不过,F1 不包含真负例,也不直接表达错误的业务代价。两个模型的 F1 接近,可能一个误报很多,另一个漏报更多。如果一次漏报会拖延重要客户,而一次误报只需十秒核对,就不能只按 F1 排名决定上线。
还要注意分母为零。当模型一次正例都没有预测时,精确率的公式无法直接计算;工具可能返回零、空值或警告。报告必须说明处理方式,不能把“没有产生判断”包装成“百分之百精确”。
调阈值是在改变处理规则
某些分类系统为每条工单输出一个分数,再用阈值决定是否进入紧急队列。把门槛从较高值降下来,通常会让更多工单被选中,其中既有以前漏掉的紧急工单,也有额外的普通工单。模型本身可能没变,精确率和召回率却变了。
在同一批分数上降低阈值,召回率不会下降;精确率则不保证每一步都单调变化,因为新增样本的构成会不同。更不能把聊天模型自称的“九成把握”直接当作经过校准的概率。能否用于阈值决策,需要另外验证。
选择阈值应该使用独立验证数据。用训练过的样本调门槛,再拿同一批样本报告成绩,会高估效果。scikit-learn 的阈值调优文档明确区分模型预测与根据预测作决策,并提醒避免用训练数据同时调阈值。
把指标翻译成人力和处理时间
回到案例:一百条被标记的工单需要人工复核。如果每条花两分钟,就是两百分钟,其中一百二十分钟花在六十条误报上。这个换算比单独展示“精确率百分之四十”更容易帮助团队决定是否值得采用。
另一边的十条漏报,也不能只视作一个抽象数字。应查看它们是否集中在特定语言、某类故障、长消息或附件里。如果漏掉的恰好是最严重的情况,即使整体召回率上升,也未必改善了真实体验。

一种可测试的流程是设置三档:明显普通的进入常规队列,边界样本交人工判断,高优先级样本进入快速复核。三档的界线要经过实际试运行,且保留用户主动升级工单的通道。不要让分类结果成为发现紧急问题的唯一入口。
测试集选错,计算全对也会误导
为了方便演示,团队可能各挑五十条紧急和普通工单,组成一份均衡样本。但线上紧急工单只占小部分,这种测试集上的精确率不能直接套到生产环境。目标类别比例变化,即使对正负类别的识别能力接近,报警队列中的真实命中比例仍会变化。
比较两个版本时,应保持样本、类别定义和标签规则一致。按时间切分可以观察新问题上的表现;同一客户反复复制的工单,最好放在同一组,避免几乎相同的内容分别进入训练和测试,让模型看起来像提前知道答案。
样本数量也要一起报告。十条紧急工单里找出九条,和一万条里找出九千条,都叫百分之九十召回率,但证据稳定程度不同。小样本每错一条就会让比例大幅波动,不适合据此宣布产品全面提升。
总分之外,保留分组和失败原文
如果系统支持多个部门,就分别看每个部门的误报和漏报;支持多种语言,就按语言检查。总体结果可能被数量最多、格式最整齐的那一类主导,让样本少的群体表现被遮住。分组不是为了不断挑出漂亮数字,而是找到具体改进对象。
每个失败案例最好记录原始输入、参考标签、预测结果、评分、版本和时间。复查时判断:是标签含糊、输入缺信息、模型没识别,还是阈值选择不合适。四种原因对应不同动作,不能一律通过换模型解决。
这些指标可以衡量所有 AI 回答吗
不能直接通用。分类指标要求可定义的目标类别或检索目标。文章写得是否清楚、摘要是否忠于原文、回答有没有编造,通常需要另外制定评价维度。把整段回答硬压成“对或错”,可能掩盖局部事实错误与关键遗漏。
如果确实用大模型做分类,还要单独记录格式失败、无法判断和工具报错。不能从分母中悄悄去掉失败请求,只报告成功返回样本的准确率。重复运行时结果有波动,也应报告波动范围,而不是挑表现最好的一次。
看一份 AI 分类报告,至少核对五件事
- 正例到底是什么,参考答案由谁、按什么规则确定。
- 准确率、精确率、召回率对应的原始计数是多少。
- 阈值在哪份数据上选出,测试样本是否接近真实分布。
- 误报带来多少人工工作,漏报影响哪些业务。
- 是否展示了各类失败、分组结果、样本量和模型版本。
拿到一个“很高”的分数时,先要求对方给出那四个格子的数量。只要能把错误数清楚,很多模糊的产品讨论就会变得具体。
本文为读懂 AI 原创科普。案例与数值均为教学演算,非任何商业产品的实测结论;参考来源已在对应段落标注。配图来自 Unsplash:Luke Chesser、Isaac Smith、Andreea Avramescu;图片用于辅助阅读。