项目:Agent 评测不确定性
项目目标
对同一批 12 个任务的 A/B 二元得分做配对比较,报告 平均差和 95% percentile bootstrap 区间。你需要验证方向、配对、输入边界、分位数方法与可复现性,并用证据边界解释结果。
实现:bootstrap_eval.py|测试:test_bootstrap_eval.py。
输入契约
- 每个
(A_i, B_i)对应同一个唯一任务,顺序不能打乱。 - 得分只能是
0或1,其中 1 表示按预先冻结的评分规则通过。 - 12 个任务只是教学样本,不宣称代表所有 Agent 流量。
- 差值方向固定为 ;正数有利于 B。
- Bootstrap 的重抽样单位是“任务差值”,不是单个 A/B 得分,也不是 bootstrap 生成的行。
方法分解
- 计算每个任务的差值 。
- 从 12 个差值中有放回抽取 12 个,计算均值。
- 重复 10,000 次,形成 bootstrap 统计量经验分布。
- 用 R7 风格线性插值取 2.5% 和 97.5% 分位数。
- 报告原始平均差、区间、任务数、重复次数、随机种子和方法名。
这是一种简单的 paired percentile bootstrap。分位数存在多种约定,percentile 区间也不是所有统计量和小样本的最优方法。本项目用它建立重抽样直觉,不把它包装成通用统计结论。
固定随机种子只让 Monte Carlo 重抽样可复现,不会增加任务代表性、评分可靠性或因果证据。提高 repeats 只减少模拟误差,不会把 12 个任务变成更大的真实样本。
运行与测试
在 vault 根目录运行:
$env:PYTHONDONTWRITEBYTECODE = '1'
python -B '.\Knowledge\AI Agent Engineer\docs\概率统计\examples\bootstrap_eval.py'
python -B -m unittest discover `
-s '.\Knowledge\AI Agent Engineer\docs\概率统计\examples' `
-p 'test_*.py' `
-v脚本预期输出:
method=paired-percentile-bootstrap
tasks=12 repeats=10000 seed=20260714
A mean=0.583
B mean=0.833
B-A=0.250
confidence=0.950 interval=[-0.083, 0.583]测试应有 8 项通过,覆盖:
- 分位数端点、插值与非法输入;
- 全部平局和全部 B 获胜的退化情形;
- 固定数据、方向与随机种子可复现性;
- 非法得分、空样本、重复次数、置信水平和 seed。
2026-07-14 实际验证
在 Python 3.11.9 下,脚本以普通模式和
python -O模式运行结果一致;8 项unittest全部通过,两个 Python 文件也通过py_compile语法检查。验证生成的__pycache__已在验收后删除,未作为知识库内容保留。
逐步读代码
PAIRED_SCORES保留同一任务的 A/B 对应关系。linear_quantile先排序,再按 位置做线性插值;函数拒绝空值、越界概率和非有限数。_validate_pairs明确拒绝非二元分数与损坏的 pair。paired_bootstrap先计算观测差,再对差值有放回抽样。BootstrapResult将方法参数和结果放在同一不可变记录中。- 测试验证特殊情况,不只检查“脚本能打印”。
结果解释
本样例观测到 B 比 A 高 0.25,即 25 个百分点;但区间约为 [-0.083, 0.583],跨过 0。对当前设计,合理表述是:
在这 12 个预先选定任务上,B 相对 A 的平均二元得分差为 +0.25;配对 percentile bootstrap 95% 区间为约 [-0.083, 0.583]。区间同时容许轻微退化与较大提升,当前样本不足以确定方向。该区间只近似当前任务抽样的不确定性;任务代表性、评分误差和生成随机性仍未覆盖。
不能写成“B 有 95% 概率更好”,也不能因点估计为正就宣称上线。即使区间不跨 0,也仍要对照预设的最小实际差异、延迟、成本与安全护栏。
必做扩展
- 重复样本陷阱:将每个任务机械复制 20 次,观察区间如何虚假变窄;解释为何行数增长不等于独立信息增长。
- 分层报告:给任务补
检索型/工具型标签,分别报告样本量、点估计和区间;不要只挑表现最好的层。 - 真实样本量:增加新的、代表目标总体的唯一任务,而不是只提高 bootstrap 次数。
- 生成层级:每个任务为 A/B 各生成 5 次,先明确 estimand,再决定按任务聚合还是做层级重抽样。
- 工程决策:同时报告延迟与费用,写出上线所需的最小实际改善和护栏阈值。
- 方法敏感性:比较不同分位数定义或区间方法时,记录实现与差异,不只挑最窄区间。
常见错误
- 分别重抽 A 与 B,破坏同一任务的配对。
- 看到 B-A 为正就忽略宽区间。
- 把
repeats=100000当作 10 万个真实任务。 - 复制任务、重复生成或评分者打分被当作独立样本。
- 改随机种子直到区间看起来更有利。
- 事后删除超时、失败或“异常任务”,却不报告排除规则。
- 把 percentile 区间称作无需假设、对任何问题都准确的 95% 保证。
自测与掌握标准
- 我能解释有放回抽样以及为何每次仍抽 12 个差值。
- 我没有分别打乱 A/B,且能说明差值方向。
- 我报告点估计、区间、样本量、方法、重复次数和 seed。
- 我知道分位数算法有多种定义,percentile bootstrap 有适用限制。
- 我没有把 bootstrap 当成修复选择偏差或相关样本的方法。
- 我能列出任务抽样、生成、评分和线上分布四类未覆盖不确定性。
- 我能把统计结果与最小实际差异、延迟、成本和安全护栏连接起来。
上一节:评测设计、效应量与统计陷阱|完成后返回 概率统计。
参考资料
核验日期:2026-07-14。