跳到主要内容

7.6 分数的误差棒:这个差距是真的吗

一个每天都在发生的错误​

你的评测集跑完了。旧版本 72 分,新版本 75 分。

+3 分,改进有效,上线。

这个判断有很大概率是错的——而且错的方式很具体:如果你换一批题重跑,名次完全可能翻转。

原因不是评测集造得不好,而是一件更根本的事:

评测不是「测量」,是「抽样」。

你的 100 道题,是从「用户可能问的所有问题」这个无限大的池子里抽出来的一小把。抽到的这把恰好偏容易或偏难,都会让分数上下浮动。你量到的从来不是真实水平,而是真实水平加上一层抽样噪声。

物理实验里没人敢报一个不带误差棒的测量值。评测该用同一个标准。

亲手看看这层噪声有多厚​

🎮 动手实验
误差棒计算器:这个差距是真的吗
两个模型在你的评测集上分别考了 72 分和 75 分。B 更好吗?拖动「题目数量」看看那两根误差棒什么时候才分得开。
58.5%73.3%88.0%模型 A72.0%模型 B75.0%
A 的 95% 区间
±8.8 pp
B 的 95% 区间
±8.5 pp
差值 B − A
+3.0 pp
差值的 95% 区间
-9.2 pp ~ +15.2 pp
⚠️ 这个差距说明不了什么。差值的 95% 置信区间是 -9.2 pp ~ +15.2 pp,跨过了 0——意思是「B 更好」和「B 更差」这两种可能,现有数据都排除不掉。 换一批题重测,名次很可能翻转。 要让 +3.0 pp 这个差距达到统计显著(把握度 80%),你需要约 3,394 题;改成配对设计(两个模型考同一批题)能降到约 2,263 题。
💡 要点:评测分数是抽样估计,不是精确测量。一个 100 题的评测集,95% 置信区间大约是 ±9 个百分点——两个模型差 3 分,在统计上什么都说明不了。
省样本最有效的一招是配对设计:让两个模型考同一批题,而不是各考各的。同一道题的难易对两边同时起作用,这部分波动在做差时被抵消掉,方差直接降约三分之一。
口径:正态近似,$SE=\sqrt{p(1-p)/n}$,95% 置信区间取 ±1.96·SE;所需样本量按双侧 α=0.05、把握度 80% 计;配对相关系数取 1/3。题目之间若成组(同一篇材料出多道题)还要用聚类标准误,实际区间会更宽。

请按顺序做四个实验:

实验 ①:看默认状态。 100 题、72 分 vs 75 分。看那两根误差棒——它们重叠了一大半。差值的 95% 置信区间是 −9.2 ~ +15.2 个百分点,跨过了 0。意思是:「新版本更好」和「新版本更差」这两种可能,你手上的数据一个都排除不掉。

实验 ②:把题目数量往右拖。 看误差棒怎么收窄。注意收窄的速度——题目翻 4 倍,误差棒只缩一半(因为它按 n\sqrt{n} 走)。这是评测最讨厌的经济学:精度每提高一倍,成本要翻两番。

实验 ③:拖到 1000 题,再看。 区间收到了 −0.9 ~ +6.9——还是跨 0。一千道题,仍然判不出 3 个百分点的差距。多数团队的评测集远小于这个数,却在为 1~2 分的波动开会。

实验 ④:点「配对:考同一批题」。 区间立刻从 −9.2 ~ +15.2 收到 −7.0 ~ +13.0,所需题量从约 3400 降到约 2300。什么都没多做,只是让两个模型考了同一批题。

配对为什么白赚​

实验 ④ 那个收益值得单独说,因为它是这一节唯一「不花钱」的一招。

假设你的评测集里混着一道特别难的题和一道特别水的题。如果两个模型各考各的(各抽 100 题),A 可能多抽到几道水题、B 多抽到几道难题——这份运气差异全部算进了它们的分差里。

而如果两个模型考同一批题,题目的难易对两边同时起作用。做差的时候,这部分共同的波动被抵消掉了。剩下的才是模型之间真正的差异。

经验上,配对设计能让差值的方差降低约三分之一——换算成成本就是同样的结论少考三分之一的题。

推论也很实用:别拿「我们上个月测的 72 分」和「今天测的 75 分」比,除非两次用的是同一批题、同一套判分逻辑。跨批次比较等于放弃了配对带来的全部好处,还额外引入了评测集本身变化的干扰。

还有一个更隐蔽的坑:题目不独立​

上面所有计算都假设题目之间彼此独立。真实的评测集常常不是。

典型情形:你从 20 篇文档里各出 5 道题,凑成 100 题。这 100 题不是 100 份独立的信息——如果模型恰好读不懂第 7 篇文档,那 5 道题会一起错。

后果是:按 100 个独立样本算出来的误差棒,比真实的窄。你会以为自己的测量比实际更精确,从而更容易把噪声当成改进。正确做法是按「组」(这里是文档)而不是按「题」来算误差——这在统计上叫聚类标准误,在成组严重的评测集上,它算出来的区间可以比朴素算法宽出好几倍。

一个不需要动公式的替代方案:把「组」当成基本单位——一篇文档算一个样本(得分取它那 5 道题的平均),然后照常算。样本量从 100 变成 20,误差棒立刻变宽——那才是你真实的精度。

别把这一节读成「所以评测没用」

误差棒的意义不是让你放弃评测,而是让你把力气花在对的地方。三条实用推论:

一、大改动不需要大样本。 如果一个改动带来 15 个百分点的提升,100 题就足够看出来了(实验里把 B 拖到 87% 试试)。需要几千题的,是那些 1~3 个百分点的微小差异——而你该问的是:这么小的差异,值得为它上线吗?

二、区间跨 0 不等于「没有改进」。 它的准确含义是「用这批数据判不出来」。可能真没改进,也可能改进了但你的测量精度不够。别把它当成否定结论。

三、分层看比整体看更值钱。 与其把 100 题的总分从 72 推到 75,不如按 7.4 节分出来的失败类别分桶看:检索失败这一类从 60% 掉到 20%,哪怕总分只动了 3 分,也是一个非常明确的信号——因为你事先就知道该盯哪个桶,而不是在几十个数字里事后捞一个变好的。

本节要点
  • 评测是抽样不是测量:分数 = 真实水平 + 抽样噪声,报分数就该报误差棒。
  • 100 题的 95% 置信区间约 ±9 个百分点;1000 题仍判不出 3 个百分点的差距。
  • 精度按 n\sqrt{n} 走:误差棒缩一半,题量要翻四倍。
  • 配对设计(两个模型考同一批题)让差值方差降约三分之一,白赚——推论是别做跨批次的分数比较。
  • 题目成组(同一篇材料出多道题)会让朴素误差棒偏窄;把「组」当基本单位是最省事的补救。
  • 差值区间跨 0 = 「这批数据判不出来」,不等于「没有改进」。
📝 动手自测0/3
1. 在一个 100 题的评测集上,模型 A 得 72 分、模型 B 得 75 分。正确的结论是?
2. 让两个模型「考同一批题」而不是各考各的,为什么能省样本?
3. 你的评测集是「20 篇文档,每篇出 5 道题」共 100 题。按 100 个独立样本算误差棒会怎样?

延伸阅读​