差异显著性是什么
两个版本的评测分数差一点点时,先要判断这个差是不是噪声。做法是做配对比较:让两个版本跑同一批样本,把逐样本的得分相减,得到差值序列,再用 bootstrap 重采样或符号检验估计差值的分布。因为消除了题目难度的差异,配对设计比直接比较两个独立平均值灵敏得多,能把「真提升」和「样本波动」区分开。
基本信息
| 适用平台 | Python 环境(标准库 random 即可实现 bootstrap;统计库可做符号检验) |
|---|---|
| 数据要求 | 两个版本跑同一批样本,可逐样本对齐 |
| 产出 | 差值区间与显著性判断,而不是两个单点分数 |
| 纪律 | 对比的指标越多,判定阈值应越严格 |
典型使用场景
- 提示改版后分数涨了 1.5 分:先判断是否显著,再决定是否上线
- 模型升版评估:新旧模型在同一测试集上的表现差异是否可信
- 小样本场景:评测集只有一两百条时,单点分数尤其不稳
- 多方案对比:从若干候选里选出表现最好者时,避免选中运气好的那个
- 对外报告:给出区间估计而非只报一个数,便于读者判断可信度
配对 bootstrap 思路
配对 bootstrap 思路
import random
# a、b 为同一批样本上两个版本的逐样本得分(0/1 或分值)
def paired_bootstrap(a, b, n=10000):
diffs = [x - y for x, y in zip(a, b)] # 逐样本差值,消除题目难度
k = 0
for _ in range(n):
s = sum(random.choice(diffs) for _ in diffs) # 有放回重采样求和
if s <= 0:
k += 1
return k / n # 差值不优于 0 的比例,近似 p 值;越小越可能真提升判断与表述
| 观察结果 | 结论倾向 | 建议表述 |
|---|---|---|
| 差值区间完全在 0 以上 | 提升可信 | 报告差值区间与样本量 |
| 区间跨越 0 | 无法区分 | 表述为未观测到显著差异 |
| 区间完全在 0 以下 | 出现退化 | 按退化处理,先查原因 |
| 样本量小且差值小 | 噪声主导 | 扩样本或复跑后再下结论 |
配对的前提是同一批样本:两个版本各自跑不同样本时无法配对,只能做独立样本比较,所需样本量会大得多。
同时比较很多指标或很多候选版本时,总会有某个组合「显著」。比较前先固定主指标与判定规则,其余结果只作解释,不作上线依据。