返回 AICAP-180
B3 · Day 29agent loop + 评测统计

统计功效 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. 推导 / 手算 / 代码走读

requiredNForDeltasrc/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 === 0Infinity(零效应需无穷样本,符合直觉);
    • 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. 今日实战

  1. src/agent/eval/stats.ts 已有的 requiredNForDelta 基础上,确认 power 反推逻辑:固定 power=.8、α=.05,对一组目标 Δ(如 3pp/5pp/10pp)扫出所需任务数,画样本量曲线。
  2. 待 Day 27 实测的 DeepSeek-vs-Qwen 逐题 diffs 到位后,用 sd(diffs) 估 sdDiff、对实测 Δ 算当前 power建议样本量
  3. 运行 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.tsrequiredNForDelta)—— 正态近似样本量反推实现走读。
  • 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 给选型结论)。