统计推断¶
评测分数是有限样本上的估计。统计推断要回答:比较对象是什么、哪些样本真正独立、差异有多大、区间有多宽,以及同时查看很多指标后结论还剩多少可信度。
Estimand 与独立单位¶
先定义目标差异
若 A/B 在同一 item 上运行,逐项差值
保留了难度配对,通常比比较两个独立均值更有效。配对要求 item、输入、协议、预算和 evaluator 完全一致;缺少一侧输出的样本不能静默删除。
真正独立单位可能是题族、文档、repository、用户或环境,而不是每行。若一个 repository 有 100 个 issue,逐 issue bootstrap 会低估共同代码库带来的相关性。
分母与缺失¶
为每个系统保留:
observed valid score
invalid output
timeout
environment / infrastructure failure
missing judge or verifier
not run
比较可同时报告:
- end-to-end effect:所有分配样本,按预注册规则给失败状态赋结果;
- conditional effect:双方均有效的可比子集;
- coverage difference:有效执行比例之差。
只报 complete-case effect 隐含“缺失与表现无关”;在难题更容易 timeout 时,这一假设明显不成立。
Paired bootstrap¶
对 \(n\) 个配对 item:
- 从索引 \(\{1,\ldots,n\}\) 有放回抽取 \(n\) 个;
- 在同一抽样索引上同时取 A/B;
- 计算 \(\hat\Delta^*\);
- 重复 \(B\) 次;
- 用 bootstrap 分布分位数构造区间。
点估计为
二元指标也应对 item-level 差值重采样,而不是分别 bootstrap 两个准确率。随机种子、重采样次数、区间方法和双侧/单侧目标都需记录。
点估计的语义核只做一件事:在共同有效的配对 item 上先相减、再聚合。它返回差值向量,让区间、slice 与异常值检查都沿用同一 estimand。
import numpy as np
def paired_effect(baseline, candidate):
baseline = np.asarray(baseline, dtype=float)
candidate = np.asarray(candidate, dtype=float)
if baseline.ndim != 1 or baseline.shape != candidate.shape:
raise ValueError("paired one-dimensional observations required")
if baseline.size == 0:
raise ValueError("paired effect needs at least one item")
if not np.isfinite(baseline).all() or not np.isfinite(candidate).all():
raise ValueError("missing outcomes need an explicit policy")
difference = candidate - baseline
return difference.mean(), difference
effect, difference = paired_effect([0, 1, 0], [1, 1, 0])
assert np.isclose(effect, 1 / 3)
np.testing.assert_allclose(difference, [1, 0, 0])
assert len(difference) == 3
try:
paired_effect([], [])
except ValueError:
pass
else:
raise AssertionError("an empty paired sample must be rejected")
这段代码拒绝缺失值,是为了迫使调用方先明确 end-to-end、conditional 或 coverage estimand;它不主张 complete-case 是默认答案。cluster bootstrap 在下节沿用同一逐 item 差值,只改变重采样单位。
Cluster bootstrap¶
若 item 属于 cluster \(g\),先有放回抽 cluster,再带入该 cluster 的全部样本。估计单位取决于目标:
- 若目标总体按请求加权,cluster 被抽到后保留其原始样本数;
- 若目标希望每个 repository/用户等权,先求 cluster mean 再平均。
两者都合理,但 estimand 不同。cluster 数而不是行数决定区间的主要信息量;只有少数 cluster 时,普通 percentile bootstrap 也可能不稳定,应报告 cluster 数并做敏感性分析。
分层 cluster¶
若语言、领域或难度有固定目标权重,可在每个 stratum 内抽 cluster,再按预注册 \(w_s\) 聚合:
这样既保留 slice 权重,又不打破 cluster 相关性。
下面给出 request-weighted paired cluster bootstrap:同一抽样索引同时作用于 A/B,抽到一个 cluster 时带入其中全部 item。返回点估计和 percentile interval;若 estimand 是 cluster 等权,应先把每个 cluster 的差值聚合为一行再调用。
配对 cluster bootstrap
import numpy as np
def paired_cluster_bootstrap(a, b, cluster, draws=2000, alpha=.05, seed=0):
a = np.asarray(a, dtype=float)
b = np.asarray(b, dtype=float)
cluster = np.asarray(cluster)
if not (a.shape == b.shape == cluster.shape) or a.ndim != 1:
raise ValueError("paired observations and cluster IDs must align")
if len(a) == 0 or not np.isfinite(a).all() or not np.isfinite(b).all():
raise ValueError("complete finite pairs are required")
groups = np.unique(cluster)
members = [np.flatnonzero(cluster == group) for group in groups]
rng = np.random.default_rng(seed)
sampled = np.empty(draws)
difference = b - a
for draw in range(draws):
chosen = rng.integers(0, len(groups), len(groups))
index = np.concatenate([members[i] for i in chosen])
sampled[draw] = difference[index].mean()
lo, hi = np.quantile(sampled, [alpha / 2, 1 - alpha / 2])
return difference.mean(), (lo, hi)
a = np.array([0., 1., 0., 1., 0., 1.])
b = a + np.array([.1, .1, .2, .2, .3, .3])
cluster = np.array(["x", "x", "y", "y", "z", "z"])
effect, interval = paired_cluster_bootstrap(a, b, cluster, seed=7)
assert np.isclose(effect, .2)
assert interval[0] <= effect <= interval[1]
assert paired_cluster_bootstrap(a, b, cluster, seed=7) == (effect, interval)
这个实现要求调用方先按预注册规则处理 timeout、invalid 和 missing;静默 complete-case 删除会改变 estimand。生产报告还要给出 cluster 数、重采样次数、随机种子、区间方法与 slice 权重,并在 cluster 很少时做替代区间和逐 cluster 敏感性分析。
Effect 与置信区间¶
报告
baseline score
candidate score
absolute effect
relative effect when meaningful
confidence interval
practical margin
相对提升在 baseline 接近零时会夸大,应始终保留绝对差。置信区间表示采样与协议下的估计不确定性,不覆盖 benchmark 污染、judge 偏差和目标总体错配等系统误差。
非劣检验预先给定允许回归 \(\delta_0\)。若 \(\Delta=B-A\),候选非劣通常要求区间下界高于 \(-\delta_0\);不能在结果出来后改变 margin。
功效与样本量¶
对配对差值方差 \(\sigma_d^2\)、希望检测的最小实际差异 \(\delta_{\min}\),粗略样本量为
\(1-\beta\) 是目标 power。二元配对指标的 \(\sigma_d\) 主要由 A/B 不一致样本决定;应使用 pilot 的逐项差值或 simulation,而不是独立比例公式。cluster 数据要用设计效应或直接模拟 cluster bootstrap,不能把行数代入。
低 power 的“无显著差异”不等于等价。若样本不足,应报告区间仍允许多大提升或回归。
Multiple comparison¶
同时查看多个 benchmark、slice、prompt 和 checkpoint,会提高至少一个偶然胜出的概率。先划分:
- 一个或少数 primary hypothesis;
- 预注册 secondary metrics;
- exploratory slices。
常用控制方式:
- family-wise error:Bonferroni 或 Holm;
- false discovery rate:适合较多探索假设;
- hierarchical testing:先总指标,再进入预定义 slice;
- 独立 holdout:选择后在未查看数据上确认。
若模型由同一批 benchmark 选出,最终报告的置信区间没有自动校正选择过程。最可靠做法是保留未参与选择的冻结测试。
重复生成与嵌套结构¶
一个 prompt 有多次 stochastic trial 时,trial 嵌套在 prompt 内。应先定义目标:
- 单次随机运行成功率;
- 给定 \(k\) 次预算至少一次成功;
- 连续 \(k\) 次都成功;
- prompt 间 macro success。
不能把所有 trial 展平成独立 item。Agent 环境还可能有 environment seed 和 user simulator 两层随机性,应按层级重采样或用明确的 mixed design。
实现契约¶
item, cluster, stratum and trial IDs
paired run and protocol digests
primary/secondary/exploratory labels
denominator and missing-value policy
point estimator and slice weights
bootstrap seed/count/CI method
power assumptions and practical margin
multiplicity family and correction
原始逐样本分数和状态应可重算全部表格;只保存 bootstrap 区间无法审计分母。
正确性与失效¶
- 独立 bootstrap A/B:丢失配对,区间无谓变宽。
- 逐行 bootstrap cluster 数据:区间过窄。
- 只有几个 cluster 却报高精度:有效样本量被夸大。
- 缺失样本 complete-case 删除:难度相关 missingness 产生偏差。
- 只报 \(p\) 值:effect 和实际意义缺失。
- 置信区间跨零写成相同:低 power 不等于等价。
- 试了很多 prompt 只报最好一个:选择过程未校正。
- 同一测试集反复发布区间:长期适应耗尽独立性。
- bootstrap 覆盖系统误差的错觉:污染和 judge bias 不在随机区间内。
何时可用简单区间¶
样本确实独立、A/B 完全配对、指标固定且没有多重选择时,item-level paired bootstrap 足够清晰。小样本、高度聚类或极低事件率需要更谨慎的 exact、permutation、Bayesian 或领域专用分析;不应以复杂方法掩盖数据不足。
报告卡¶
estimand and target population
statistical / cluster / trial units
paired coverage and missing statuses
baseline/candidate/effect/CI
bootstrap or test specification
sample and cluster counts
power and minimum practical effect
primary family and multiplicity handling
slice weights and exploratory labels
systematic uncertainties outside the interval
指标与分母见指标与评测设计,paired/cluster 实现见评测工具。