全站补缺口最大的一篇:藏书至此没人系统讲「数字本身的可信度」。标准误差与 bootstrap 误差棒、配对比较看差异区间、pass@k/pass^k 选型、flaky 归因——读完你的 ship/no-ship 判断才算站得住。这也是本站补充资料区置顶主题(统计显著性)的中文最佳教材。
先修:无硬先修,有基本统计直觉即可。所有用评测数字做上线决策的人必读——尤其「分数涨了就宣布胜利」的团队。与 a17(自动化 evals 实测)连读:一个讲工具能信多少,一个讲数字能信多少。
先合上原文在心里作答,再点开对照。全对 = 本篇真正通关。
标准差衡量数据本身多分散;标准误差衡量你算出的估计值(如成功率)有多不确定——它是分数的「误差棒」刻度,∝ 1/√n。没有误差棒的成功率没有决策价值。
配对比较:两版跑同一批任务同一随机种子,逐题算差值,看差异的 95% 置信区间是否跨过 0(如 [+1%, +5%] 可信、[−2%, +8%] 不可信),而不是比两个总分谁大。
先归因:题目飘(判定歧义/环境不稳)就修题;Agent 飘就标记「已知不稳定」、多跑看分布、单独盯 pass^k。别一删了之,也别放进 CI 门禁。
上方为本站原创导读,下方为原文完整收录,便于对照阅读。
前五讲,我们把"怎么把每一次打分打准"讲透了——代码、LLM 裁判、Agent 裁判、人工校准。但还有一个致命问题没解决,它能让你把每次打分都打准、却依然得出错误结论:
Agent 是随机的。你跑一批任务得到的那个数字,本身就带着噪声。
一个"成功率 78%"的报告,看着很确定。可如果它只跑了一遍、几十个用例,那这个 78% 可能今天是 78、明天重跑就变 71 或 85。你拿着一个会跳的数字,做了 ship / no-ship 的决定——这才是最隐蔽的翻车方式。
这一讲的总警句:
没有量化不确定性的评测分数,是一个会骗你的数字。
我们要讲清:为什么单次结果不算数、怎么给分数配一根"误差棒"、两个版本差几个点到底是真提升还是运气、pass@k 和 pass^k 到底该看哪个、以及怎么处理那些"忽对忽错"的 flaky 用例。学完这一讲,你的 ship / no-ship 判断,才算站得住。
先把第 1 讲跃迁三那句话拎回来,因为它是这一讲的地基:对 Agent,跑一次几乎说明不了任何问题。
来算笔扎心的账。假设你的退款 Agent 真实成功率是 80%。你为验证一个改动,跑了一次某任务,成功了,于是上线。但 80% 的成功率意味着——你那一次"成功"里,有整整两成是运气。你用一次抽样,就给一个概率系统下了结论。
正确的姿势是:同一个任务跑多次(多个 trial),看通过的比例;而且不只看这个比例,还要看它有多不确定。前半句大多数人做得到,后半句——量化"有多不确定"——恰恰是区分"看起来在做评测"和"真的在做评测"的分水岭。这一讲主要讲后半句。
要量化不确定性,先认识一个词。并且要特意和一个近义词划清界限:
两者常被搞混,但对评测,我们要的是后者——标准误差,就是你那个"成功率"数字头上"误差棒"的刻度:它告诉你,如果换一批样本重测一次,这个数字大概会飘多少。(约定:本讲说"误差棒"或写 ±X% 时,默认指 95% 置信区间 ≈ ±2 个标准误差。)
关键规律:标准误差大致和 1/√n 成正比(n 是样本量)。对"成功率"这种二元结果,有个好用的近似公式:标准误差 SE ≈ √( p·(1−p) / n ),p 是成功率,n 是样本量。
拿 p = 0.8 代进去(SE = 0.4/√n),看它随样本量怎么变:
| 样本量 n | 标准误差 SE | 95% 区间(≈ p ± 2·SE) |
|---|---|---|
| 25 | 8% | 64% ~ 96% |
| 100 | 4% | 72% ~ 88% |
| 400 | 2% | 76% ~ 84% |
| 1600 | 1% | 78% ~ 82% |
两个结论一眼可见:① 样本翻 4 倍,误差棒才缩一半(1/√n 的代价);② 跑 25 个用例得到的"80%",真实值可能在 64%~96% 之间乱窜——几乎没有决策价值。这也解释了经验里那句"题量到 250–500 之后,标准误差才明显收敛、数字才稳得下来"。
所以从今天起,看到任何一个孤零零的成功率,先问一句:它背后有多少样本?误差棒多大?一个没有误差棒的 78%,和"我感觉大概八成吧"没有本质区别。
评测是有成本的,样本量不能无限堆。同样的预算,该花在"每题多跑几次"还是"多测几道题"?给个原则:
一般顺序是:先保证任务数量够(覆盖全维、堆到几百),再对关键任务加跑次数。别把预算全砸在少数几道题上反复跑——那只会让你对一小片区域过度自信,却对整体覆盖一无所知。
上表最后一列已经在做正确的事了——报区间,而不是报点。"成功率 78%" ➜ 改成 "78% ± 4%(95% 置信区间)"。多出来的这个 ±4%,才是让别人(和未来的你)能正确解读这个数字的关键。
如果你嫌二项公式太理论、或者你的指标不是简单的成功率(比如平均得分、pass^k 这种),有个万金油办法叫 bootstrap(自助法),不用推任何公式:
bootstrap 的好处是对任何指标都管用(成功率、平均分、pass^k、甚至你自定义的合成指标都行)、几行代码就能写,是工程师量化不确定性的瑞士军刀。二项公式和 bootstrap 怎么选?简单成功率用公式最快,指标一复杂就用 bootstrap,两者结论一般也对得上。总之记住:报告里给区间,是专业和业余的分界线之一。
顺带把第 15 讲那根线接上。校准 LLM 裁判时说过:人机一致率别只看原始百分比,要用 Cohen's kappa——因为原始一致率里混着"瞎猜也能对"的部分,会高估裁判的真实水平。你会发现,这和这一讲是同一个精神:一个光秃秃的原始数字(无论是成功率还是一致率)都会骗你,得给它做校正——给成功率配置信区间、给一致率减去随机基线,本质是同一件事:别让一个未经校正的数字替你做决定。
这是评测里最高频、也最容易翻车的判断:新版 78%、旧版 75%,涨了 3 个点,能宣布改进有效、可以上线吗?
大概率不能——先看误差棒。如果两个版本各自的置信区间是 75%±5% 和 78%±5%,它们重叠一大片,这 3 个点的差异很可能纯属噪声。你若据此上线,是在追一个幻觉。
怎么判断得更靠谱?两个要点:
第一,用配对比较(paired),别各跑各的。让新旧两个版本跑同一批任务、同样的随机种子,逐个任务比较它们的差。这样能消掉"任务难度"带来的方差——你比的是"在同一道题上,新版比旧版好还是差",比"两个版本各自独立跑出的总分"灵敏得多。很多真实但微小的提升,只有配对比较才看得出来。
第二,看"差异的置信区间是否跨过 0",而不是看两个数谁大。对配对后的"每题差值"做统计:如果差异的 95% 区间是 [+1%, +5%](整段在 0 以上),那这是个可信的提升;如果是 [−2%, +8%](跨过了 0),那你还不能说它变好了——差异淹没在噪声里。
一句可操作的话:别问"哪个数大",问"差异的区间跨没跨过 0"。
举个例子看配对的威力。200 个任务,旧版通过 150、新版通过 165。
对比就懂配对的价值了:不配对时两版区间重叠、看不出显著差异;配对后消掉了"任务难度"这个大噪声、只看"同一道题上谁更好",同样的数据就能得出显著结论。这正是版本对比要配对的原因。
(进阶一句:学界已有人主张用贝叶斯框架替代传统的点估计来做模型比较和排名,把不确定性显式建模——代表工作是 Don't Pass@k: A Bayesian Framework。你不必一上来就用,但要知道方向是"让不确定性显式化"。)
第 7 讲我们见过 pass^k,这里把它讲成一个决策。这两个指标衡量的是完全不同的东西,选错了,你会朝错误的方向优化。
什么时候看哪个?取决于你的场景能不能容忍偶发失败、能不能自检重试:
回到退款 Agent:它动的是真金白银,一次错误退款就是事故,该盯的是 pass^k。而 pass^k 对单次成功率极其敏感:
| 单次成功率 p | pass^10 |
|---|---|
| 90% | ≈ 35% |
| 95% | ≈ 60% |
| 99% | ≈ 90% |
一个平均分 90 的退款 Agent,连做 10 单几乎必崩一次。这就是为什么"动钱"的场景要死磕最后那几个 9——平均分从 90 提到 99 看着只多 9 分,可靠性却是天壤之别。选对指标,你才知道该往哪使劲。
评测里总有一批"忽对忽错、毫无规律"的 flaky 用例——同一个版本、同一道题,跑 10 次可能 5 次过 5 次挂,而且挂的原因还各不相同。处理它们,第一步不是删,而是归因(回扣"题目飘 vs Agent 飘"):
两个都别做的错事:① 别把 flaky 当噪声一删了之——你可能删掉的正是 Agent 最脆弱的软肋;② 别让 flaky 用例直接卡上线门禁(CI)——一个本身就忽对忽错的题,会让你的门禁随机地拦或放,失去意义。要么修好它、要么把它移出门禁集单独观察。
除了"不报误差棒",还有几个特别容易中招的坑,全都是在用某种方式"让数字变好看":
这些坑的共同点:都是在让"数字"变好看,而不是让"Agent"变好。评测的诚实,比评测的漂亮重要得多——毕竟你骗得过报告,骗不过真实用户。
把这一讲收成一份你能直接用的清单:
做到这六条,你的评测数字才配得上被拿去做上线决策。它们看着"麻烦",但对比一下代价就知道值不值:多跑几次、多算个区间,花的是几分钟和一点算力;而基于一个噪声数字误判上线,赔的是真实用户的信任。