关于 statistical-testing-guide
为 ML 实验比较提供统计检验指南和配套脚本,适用于不同随机种子、数据集或方法。它帮助研究者选择检验、量化效应与不确定性,并以可复现方式报告结果。
主要功能
- 01常见比较情形的检验选择
- 02效应量与置信区间计算
- 03多重比较校正
- 04规划随机种子数量的功效分析
- 05通过脚本生成可复现报告
适用场景
- 01检验方法在多个随机种子上的改进
- 02校正消融比较中的 p 值
- 03估算检测某种效应所需的种子数
- 04准备 ML 论文的统计报告
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ jurgendn/ agent-skills --skill statistical-testing-guide安装后在 Claude Code 中输入/statistical-testing-guide确认已加载。
附带文件scripts/stats.py
详细介绍
统计检验指南
统计有效性不是官僚主义。它是让读者相信所报告的改进确实存在,而非源于幸运随机种子的机制。
ML 论文中最常见的错误不是误用检验,而是完全跳过检验,把 3 个随机种子的均值当作事实来报告。
使用附带的脚本计算
了解比较结构(见下一节)后,不要手动推导 scipy 调用——运行 scripts/stats.py。该脚本实现了下文的检验选择逻辑、效应量和报告模板,确保结果正确且可复现。
# Compare two methods across seeds (auto-selects t-test / Wilcoxon / Mann-Whitney),
# with effect size, bootstrap CI, permutation cross-check, and a copy-paste sentence:
python scripts/stats.py compare --a 0.843 0.851 0.838 0.847 0.840 \
--b 0.812 0.805 0.820 0.808 0.815 --paired --metric F1
python scripts/stats.py correct --pvalues 0.01 0.04 0.03 0.20 --method holm # multiple comparisons
python scripts/stats.py power --d 0.5 --n 5 # seeds / detectable effect
python scripts/stats.py selftest # verify the install
使用以下工作流程来决定要计算什么以及如何解读结果;实际计算则使用该脚本。脚本生成的报告与本技能末尾的“输出格式”模板一致。
工作流程
1. 确定比较对象
选择检验之前,先明确比较结构:
- 两种方法,多个随机种子:例如,方法 A 与方法 B 各自使用随机种子 {42, 123, 456} 运行
- 一种方法,多个数据集:例如,改进在 5 个基准测试中是否都成立?
- 一种方法,多个超参数设置:调优曲线,而非显著性检验
- 两种方法,多个任务:多任务比较
观测单位很重要。如果运行 5 个随机种子 × 3 个数据集,就有 15 个观测值,但它们并不独立,将它们合并会夸大有效样本量。
2. 选择正确的检验
比较两种方法且使用多个随机种子(最常见的 ML 场景)
| 情况 | 推荐检验 |
|---|---|
| ≥10 个随机种子,指标近似正态分布 | 配对 t 检验 |
| <10 个随机种子,或分布非正态 | Wilcoxon 符号秩检验 |
| 希望避免分布假设 | Bootstrap 置换检验 |
| 跨多个数据集比较 | 平均值后检验,或混合效应模型 |
配对是指两种方法共用每个随机种子(都使用随机种子 42 运行,都使用随机种子 123 运行,依此类推)。当两种方法使用相同的数据或初始化时,配对检验效能更高,也更合适。
不应使用 t 检验的情况:少于 5 个随机种子、指标有界(例如准确率接近 0 或 1),或指标是排名(例如排行榜上的名次)。
比较两种以上的方法
进行成对检验,然后进行多重比较校正(见步骤 4)。不要只运行一次整体 ANOVA,就声称所有方法都存在差异;应检验你关注的具体方法对。
在多个基准测试上进行比较
不要合并不同基准测试的结果。应当:
- 按基准测试分别报告结果。
- 说明差异显著的基准测试数量。
- 计算胜率(方法 A 优于 B 的基准测试比例),作为汇总统计量。
需要了解的非参数检验
- Wilcoxon 符号秩检验:配对、非参数。适用于随机种子较少或指标为序数的情况。
- Mann-Whitney U 检验:非配对、非参数。适用于随机种子无法匹配的情况。
- Bootstrap:对观测到的运行结果进行重采样,以估计差值的分布。灵活性极高,适用于任何指标。
- 置换检验:在不同方法之间随机置换标签,以构建零分布。是小样本比较的黄金标准。
3. 计算并报告效应量
统计显著性回答的是“差异可能不为零吗?”。效应量回答的是“差异值得关注吗?”。两者都需要报告。
| 效应量指标 | 适用情况 | 解释 |
|---|---|---|
| Cohen's d | 连续指标,近似正态分布 | 小:0.2,中:0.5,大:0.8 |
| Cliff's delta | 序数数据或非正态分布 | -1 到 1;约为 0 表示无差异 |
| 均值差 ± CI | 始终与上述指标一并报告 | 对读者来说最容易理解 |
| 胜率 | 多个数据集 | A > B 的任务所占比例 |
务必报告实际数值,而不只是 p < 0.05。 F1 提升 0.1% 即使在统计上显著(n 很大),在实践中也未必显著。
4. 处理多重比较
如果你以显著性水平 α 进行 k 次检验,预计会偶然出现 k × α 个假阳性。在 α = 0.05 时进行 10 次检验,预计会有 0.5 个假发现——即使所有结果都符合零假设,也可能出现显著结果。
需要校正的情况:
- 你在多个指标上检验同一个假设。
- 你在消融表中比较多个方法对。
- 你运行了许多超参数配置并选出最佳结果。
校正方法:
- Bonferroni:将每个 p 值乘以 k(或将阈值设为 α/k)。方法保守,但简单。
- Holm-Bonferroni:Bonferroni 的逐步递减版本。保守程度较低。
- Benjamini-Hochberg (FDR):控制假发现率,而非族错误率。对于包含许多检验的探索性分析,优先采用此方法。
无需校正的情况:
- 预先指定的主要比较(一个方法、一个指标、一个数据集)。如果假设是在查看数据前提出的,则无需校正。
- 将用于后续验证性研究的探索性分析。
明确报告校正方法:“我们对 8 个消融变体应用 Bonferroni 校正(α = 0.05/8 = 0.006)。”
5. 在运行前规划随机种子数量
功效分析可确定:要以给定概率检测到给定效应量,需要多少个随机种子。
ML 实验的实用建议:
| 预期效应量 | 达到 80% 检验功效所需的最少种子数 |
|---|---|
| 大(d > 0.8,例如提升 5 个百分点以上) | 3–5 个种子 |
| 中(d ≈ 0.5,例如提升 2–3 个百分点) | 8–12 个种子 |
| 小(d < 0.2,例如提升 <1 个百分点) | 30 个以上种子(通常不可行) |
如果声称的提升 <1 个百分点,而论文只运行了 3 个种子,结果就无法解释。请明确说明这一点,并增加种子数量,或界定可检测效应量的范围。
大多数 ML 论文的经验法则:5 个种子是实际可行的最低数量;10 个种子对中等效应具有合理的检验功效;始终报告方差。
6. 正确报告
论文中任何比较的最低报告要求:
- 均值(或非正态分布时的中位数)。
- 标准差或标准误(明确说明是哪一种)。
- 种子数 / 试验次数。
- 种子是在查看结果前还是之后固定的。
- 所用检验、p 值和效应量(声称结果显著时)。
标准差与标准误:
- 标准差:各次运行结果的离散程度。用于说明变异性。
- 标准误(SD/√n):均值估计的精确度。用于计算均值的置信区间。
- 绝不能只报告 SE 而不说明它是 SE——它看起来会像 SD,使结果显得比实际更稳定。
置信区间格式:“84.3 ± 1.2”应明确说明是“5 个种子的均值 ± SD”或“均值 ± 95% CI”。
7. 机器学习论文中的常见错误
只报告最佳随机种子:如果你运行了 10 个随机种子并报告最大值,结果就会产生偏差。请报告均值 ± 标准差;如果还报告最大值作为参考,请注明。
事后挑选随机种子:看到哪些随机种子有利于你的方法后才挑选,会夸大结果。请预先登记随机种子(或使用固定范围内的所有随机种子)。
报告显著性却不报告效应量:p < 0.05 且 d = 0.05 是毫无意义的结果。请务必同时报告效应量。
比较均值却不报告方差:只说“84.3 对比 83.1”,不报告方差,并不能作为证据。如果标准差为 2.0,这个差异就难以察觉。
混淆统计显著性与实际显著性:当 n 很大时,即使 0.1% 的提升在统计上显著,如果对下游的影响微乎其微,也不能算作贡献。
增加数据后再进行检验:如果看到结果不显著后又增加了随机种子,就需要校正序贯检验(或承认这一局限)。
论文比较报告模板
Method A achieved [mean] ± [SD] on [metric] over [n] seeds,
compared to Method B's [mean] ± [SD] ([n] seeds).
The difference ([A−B]) is statistically significant
(Wilcoxon signed-rank, p = [value]; Cohen's d = [value]).
如果不显著:
The observed difference of [A−B] was not statistically significant
(p = [value]; 95% CI [low, high]), with insufficient power to detect
effects smaller than [minimum detectable effect] given [n] seeds.
输出格式
# Statistical Analysis Plan / Report
## Comparison structure
- Unit of observation:
- Number of conditions:
- Pairing:
## Recommended test
- Test: [name and justification]
- Correction for multiple comparisons: [yes/no; method]
## Effect size
- Measure: [Cohen's d / Cliff's delta / mean difference + CI]
- Observed / estimated value:
## Power / seeds
- Effect size target: [what you're trying to detect]
- Seeds required for 80% power: [estimate]
- Seeds you have: [n]
- Verdict: [adequately powered / underpowered / unknown]
## Results
[Formatted comparison with mean ± SD, test statistic, p-value, effect size]
## Reporting text (copy-paste ready)
[Draft sentence for the paper]
## Caveats
[Known limitations of the analysis]