mcpField
S
statistical-testing-guide

statistical-testing-guide

github.com/jurgendn数据与数据库1163 次安装6 周前更新
代码仓库

关于 statistical-testing-guide

为 ML 实验比较提供统计检验指南和配套脚本,适用于不同随机种子、数据集或方法。它帮助研究者选择检验、量化效应与不确定性,并以可复现方式报告结果。

主要功能

  1. 01常见比较情形的检验选择
  2. 02效应量与置信区间计算
  3. 03多重比较校正
  4. 04规划随机种子数量的功效分析
  5. 05通过脚本生成可复现报告

适用场景

  1. 01检验方法在多个随机种子上的改进
  2. 02校正消融比较中的 p 值
  3. 03估算检测某种效应所需的种子数
  4. 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]

评论

支持 Markdown