2、准确率的谎言:当正负样本极度不平衡时,准确率如何欺骗你

准确率(Accuracy)可能是大家最熟悉的指标了。我刚入行那会儿,也习惯性地先看准确率。直到有一次,我被它狠狠坑了一把。

那是一个信用卡欺诈检测项目。正样本(欺诈)只占0.1%,负样本(正常交易)占99.9%。我训练了一个模型,准确率高达99.8%。当时我还挺得意,觉得模型表现不错。

结果一上线,业务方就炸了。模型几乎没抓到任何欺诈交易。为什么?因为模型学到的策略很简单:把所有交易都预测为「正常」。这样准确率就是99.9%。

你看,准确率在这里完全失效了。它成了一个谎言。

2.1 准确率的定义与局限

准确率的公式很简单:

Accuracy = (TP + TN) / (TP + TN + FP + FN)

说白了,就是预测正确的样本数除以总样本数。

这个公式有个隐含假设:正负样本的重要性是相等的。但在很多真实场景中,这个假设根本不成立。

场景 正样本比例 准确率陷阱
信用卡欺诈检测 0.1% 全判为正常,准确率99.9%
罕见病诊断 0.01% 全判为健康,准确率99.99%
设备故障预测 1% 全判为正常,准确率99%

为什么会这样?因为准确率对多数类有天然的偏向。当负样本占绝对优势时,模型只要学会「躺平」——全部预测为负类,就能拿到很高的准确率。

核心结论:在正负样本极度不平衡时,准确率是一个危险的指标。它不能反映模型对少数类的识别能力。

2.2 一个真实的项目教训

我记得在2019年,我参与过一个工业质检项目。产品缺陷率大约0.5%。我们训练了一个缺陷检测模型,准确率达到了99.2%。

但实际测试时,模型漏掉了超过一半的缺陷产品。为什么?因为模型学到的决策边界严重偏向正常产品。它把很多「疑似缺陷」的样本都归为正常,因为这样能让准确率更高。

后来我们改用召回率(Recall)和精确率(Precision)来评估,才发现模型对缺陷的召回率只有42%。

这个教训让我养成了一个习惯:在PRD中,必须明确指定评估指标,不能只写「准确率不低于XX%」。尤其是当正负样本比例超过10:1时,准确率基本可以忽略。

2.3 什么时候可以用准确率?

准确率不是完全没用。我个人习惯在以下场景中使用它:

  • 正负样本基本平衡(比例在1:1到3:1之间)
  • 错误代价对称(假阳性与假阴性的代价相近)
  • 作为基线指标(快速了解模型整体表现)

但一旦出现不平衡,我建议你立刻转向其他指标。

2.4 替代方案:用混淆矩阵说话

与其只看一个准确率数字,不如看混淆矩阵。它把预测结果分成四类:

             预测为正      预测为负
实际为正      TP            FN
实际为负      FP            TN

从混淆矩阵可以衍生出三个更有用的指标:

  • 精确率(Precision):TP / (TP + FP) —— 预测为正的样本中,有多少是真的正
  • 召回率(Recall):TP / (TP + FN) —— 真正的正样本中,有多少被找出来了
  • F1分数:2 * (Precision * Recall) / (Precision + Recall) —— 精确率和召回率的调和平均
我的建议:在PRD中,对于不平衡数据集,至少要求同时提供精确率、召回率和F1分数。如果业务方只认准确率,你可以用混淆矩阵给他们解释为什么准确率不可靠。

2.5 避坑指南

我曾经在评审一个PRD时,看到需求里写着「模型准确率需达到95%以上」。数据集是用户流失预测,流失用户只占2%。

我当场就问:「如果模型把所有用户都预测为不流失,准确率是98%,这个模型能用吗?」

对方沉默了。后来我们把指标改成了「流失用户召回率不低于80%,同时精确率不低于60%」。

所以,写PRD时请记住:

  • 不要只写准确率,尤其是在不平衡场景下
  • 明确指定少数类的评估指标(召回率、精确率、F1)
  • 如果业务方坚持用准确率,加上一个约束条件:「在保证少数类召回率不低于XX%的前提下」

2.6 小结

准确率是个好指标,但它有适用条件。当正负样本极度不平衡时,它就成了一个谎言。你想想看,一个99.9%准确率的模型,可能连一个欺诈交易都抓不到。这样的模型你敢上线吗?

在PRD中,请务必根据数据分布选择合适的评估指标。别让准确率欺骗了你,也别让它欺骗了你的业务方。