统计功效 power
Day 28 给 Δ 加了 95% CI,能判「这个差显不显著」。但有个更隐蔽的陷阱:当任务太少时,即使真有差异也检不出来——CI 宽到永远含 0。
阶段: B3 · agent loop + 评测统计(Day 21-30) 标签: #statistical-power #sample-size #effect-size #eval-design
今日导引(由浅入深)
Day 28 给 Δ 加了 95% CI,能判「这个差显不显著」。但有个更隐蔽的陷阱:当任务太少时,即使真有差异也检不出来——CI 宽到永远含 0。
今天 Day 29 引入 power(功效):真有 Δ 时能把它检出来的概率。给定目标效应量(如 Δ5pp)和方差,反推「要在 95% 置信下稳定检出,需要多少任务 N」。这把「29 任务到底够不够」从感觉变成数字。
在 B1→B18 曲线上,这是评测统计三件套(Wald CI → bootstrap CI → power)的最后一环,也是对「29 任务太少」(Day 23 早就提过)的定量收尾。明天 Day 30 把统计脚本接真实 eval 输出、给选型结论收口。今天的最小可判定产出:requiredNForDelta 已建测试绿,能离线算样本量曲线;具体 power 数值依赖 Day 27 真 Δ 与方差(待跑)。
1. 机理精读
power 是什么,为什么它和 CI 互补。
- CI 回答「我观测到的 Δ 有多确定」;
- power 回答「假如真值是 Δ,我这套实验有多大概率把它抓出来」。
两者一体两面:N 太小 → CI 宽 → power 低 → 你「看不到差异」,但这不等于「没差异」(缺乏证据 ≠ 证据缺乏)。这是 eval 设计里最常被误读的一点:一个含 0 的 CI,可能是「真没差」,也可能是「样本太少功效不足」——必须用 power 分析把这两种情况分开。否则你会把「我的实验太弱」误读成「两模型一样好」。
效应量 + 方差 → 反推 N。
功效分析的标准公式(配对、双侧 α=.05、power=.8 的正态近似):
N = ( (z_{α/2} + z_β) · sd / |Δ| )²
直觉:
- 要检出的 Δ 越小(分母小),需要的 N 越大(平方放大);
- 逐题差的方差 sd 越大(分子大),需要的 N 也越大。
把目标 Δ=5pp 与从 Day 27 实测估的 sdDiff 代进去,就得到「为稳定检出 Δ5pp 所需任务数」。如果这个 N 远超 29,就证明当前套件 power 不足,单凭它得出的「无差异」不可信。
为什么 29 任务往往 power 不足。
- completion 是 0/1 结果,逐题差方差不小;
- 要检出 5pp 这种小效应,正态近似下常需上百甚至数百任务;
- 29 个任务在小效应区基本注定 power 不足。
这不是 bug,是样本量的物理极限。承认它、并给出「需要扩到多少」的建议样本量,比假装 29 够用诚实得多。这也是 B4 会强调「别只看均值、还要看可靠性」的伏笔。
α、β、power 三者的取舍。
公式里 zAlpha 控假阳性率(α=.05),zBeta 控功效(power=.8 ⟺ β=.2 漏检率)。想更保守(power=.9)就把 zBeta 调到 ≈1.2816,所需 N 上升;想容忍更高假阳性(α=.1)则 zAlpha 降、N 降。这套参数选择本身是产品决策:AML 这类高风险场景宁可多收数据、把功效提到 .9,也不愿漏判一个真实退化。
power 只覆盖均值差,是它的边界。
requiredNForDelta 反推的是「均值 completion 差」的检出所需 N。但模型可靠性还有另一面:
- 同一任务多次采样的方差;
- pass^k(k 次都过的概率)。
《Don't Pass@k》(2025-10) 提醒:可靠性度量别只盯均值。power 分析对此无能为力——它是均值差的工具,不是可靠性全貌的工具。这条边界要写清,免得把「均值差 power 够了」误读成「模型可靠了」。
2. 推导 / 手算 / 代码走读
requiredNForDelta 在 src/agent/eval/stats.ts(第 59–65 行):
- 签名:
requiredNForDelta(delta: number, sdDiff: number): number——delta是目标效应量(逐题差均值,如 0.05 表示 5pp),sdDiff是逐题差的样本标准差(由 Day 27 实测的 diffs 经sd()估出)。 - 常量:
zAlpha = 1.959963985(双侧 α=0.05 的临界 z)、zBeta = 0.841621234(power=0.80 的临界 z)。改 power=.9 则 zBeta≈1.2816、所需 N 上升。 - 退化处理:
delta === 0→Infinity(零效应需无穷样本,符合直觉);sdDiff <= 0→ 2(无方差则差异平凡可检,但sd()至少需 2 个观测)。
- 主式:
Math.max(2, Math.ceil(Math.pow(((zAlpha + zBeta) * sdDiff) / Math.abs(delta), 2)))——下取整到 ≥2、向上取整保证保守。
手算示范(验直觉,纯演示数字,非实测):设逐题差 sdDiff=0.45、目标 Δ=0.05。
分子 = (1.95996 + 0.84162) · 0.45 = 2.80158 · 0.45 ≈ 1.2607
1.2607 / 0.05 = 25.21
25.21² ≈ 635.7 → ceil → N ≈ 636
即在该方差下,要 80% 功效稳定检出 5pp 差,需约 636 个任务——29 远不够,power 严重不足。
诚实标注:636 是用演示用假设方差 0.45 算的,不是本套件实测。真实数字必须用 Day 27 跑出的真 sdDiff 重算。换句话说,本日产出的是「样本量曲线的算法」,不是「本套件的具体 power 值」。
样本量曲线怎么画(离线即可)。 固定 power=.8、α=.05、扫一组目标 Δ(如 0.03 / 0.05 / 0.10),对每个 Δ 用一个假定 sdDiff 调 requiredNForDelta,得 N(Δ) 曲线——直观展示「想检出越小的差,代价是平方级的任务数」。这条曲线无需 key,是本日可交付的离线产物;但把真 sdDiff 代入算「当前 power」必须等 Day 27 真跑。
3. 今日实战
- 在
src/agent/eval/stats.ts已有的requiredNForDelta基础上,确认 power 反推逻辑:固定 power=.8、α=.05,对一组目标 Δ(如 3pp/5pp/10pp)扫出所需任务数,画样本量曲线。 - 待 Day 27 实测的 DeepSeek-vs-Qwen 逐题 diffs 到位后,用
sd(diffs)估 sdDiff、对实测 Δ 算当前 power 与建议样本量。 - 运行
pnpm test保持stats.test绿(确定性种子)。
4. 今日实测 / 产出
requiredNForDelta已建测试绿;框架已可离线算样本量曲线。已完成。- 笔记记当前 power 值 + 建议样本量 —— power 的具体数值依赖 Day 27 真实 Δ 与方差,故待跑(需 OPENROUTER_API_KEY 先出 Δ)。
- 真实 power / 建议样本量未产出数字——不臆造(本文 636 等仅为手算演示假设,非实测)。
5. 常见误区 / 陷阱
- 把「CI 含 0」直接当「没差异」:可能只是 power 不足;必须配 power 分析区分。
- 用 29 任务的小套件下「无显著差异」的强结论:小样本 power 低,结论脆弱。
- 只看 power(均值差)就宣布模型可靠:power 不覆盖 variance/pass^k,可靠性要另测。
- 用假设方差算 N 当真实结论:sdDiff 必须用真实跑数估,演示数字不能上报。
- 忘了 power 公式默认 power=.8:高风险场景应显式提到 .9,N 会更大。
6. 学习资源(每条带 YYYY-MM)
- Cohen, Statistical Power Analysis for the Behavioral Sciences(经典专著)—— power / 效应量 / 样本量三角关系(打底)。
- 本仓
src/agent/eval/stats.ts(requiredNForDelta)—— 正态近似样本量反推实现走读。 - Don't Pass@k(arXiv,2025-10)—— 可靠性度量别只看均值,variance/pass^k 也要纳入(B4 主线,本日边界引用)。
- Miller, Adding Error Bars to Evals(2024-11)—— 误差棒与样本量直觉的方法学背景。
SOTA检查 (2026-06 更新)
- 当前主流:功效分析为经典统计,无时效问题,正态近似的
requiredNForDelta仍是标准做法、仍 SOTA。 - 重要补充:《Don't Pass@k》(2025-10) 提醒——可靠性度量别只看均值,variance/pass^k 也要纳入;power 仅覆盖均值差,不是可靠性全貌。
- 过时黑名单:勿把「均值差 power 够」误读为「模型可靠」;勿用假设方差冒充实测样本量结论。
- 下次复查点:Day 30 接真实报告算实测 Δ 与方差,回填当前 power;B4 引入 pass^k 视角补足可靠性度量。
衔接
- 昨天:Day 28 — paired bootstrap + CI(给 Δ 加 95% CI,判显著)。
- 今天:power 反推所需 N,量化「29 任务够不够」;framework 可离线算样本量曲线,power 实值待真 Δ。
- 明天:Day 30 — stats-on-evals 收口(统计脚本接真实报告,CI 是否含 0 给选型结论)。