4. 统计功效分析:功效函数、样本量对功效的影响、如何计算最小样本量

统计功效(Statistical Power)是A/B测试中衡量“当真实差异存在时,我们能够正确拒绝零假设”的概率。功效分析帮助我们在实验设计阶段回答一个关键问题:需要多少样本才能可靠地检测出预期效果?

4.1 功效函数与核心参数

统计功效函数描述了功效与四个核心参数之间的关系:

参数 符号 说明 对功效的影响
显著性水平 α 犯第一类错误(假阳性)的概率,通常设为0.05 α↑ → 功效↑(但假阳性风险增加)
效应量 δ / d 实验组与对照组之间的标准化差异(如提升率) 效应量↑ → 功效↑
样本量 n 每组所需的样本数量 样本量↑ → 功效↑
统计功效 1-β 正确拒绝零假设的概率,通常目标设为0.80 目标功效↑ → 所需样本量↑
功效函数公式(简化版,双样本均值检验):
Power = Φ( |δ| / (σ * √(2/n)) - z1-α/2 )
其中 Φ 为标准正态累积分布函数,σ 为总体标准差,z 为临界值。
功效函数四参数关系图 统计功效 (1-β) 显著性水平 α 效应量 δ 样本量 n 变异性 σ 功效 = 1 - β = P(正确拒绝 H₀ | H₁ 为真) 目标功效通常设为 0.80,即 80% 的概率检测出真实效果

4.2 样本量对功效的影响

样本量是实验者最可控的因素。下图展示了不同样本量下功效的变化趋势:

  • 小样本(n < 100):功效通常低于 0.50,即使存在中等效应量也难以检测。
  • 中等样本(n = 200~500):功效提升至 0.60~0.80,适合检测中等效应量。
  • 大样本(n > 1000):功效接近 1.0,但需注意“统计显著但实际无意义”的风险。
经验法则: 样本量每增加 4 倍,功效大约提升 0.20~0.30(在中等效应量下)。但功效提升存在边际递减效应——当功效超过 0.90 后,继续增加样本量的收益急剧下降。
样本量 vs 统计功效(不同效应量) 0 500 1000 1500 2000 样本量 (每组) 0.0 0.2 0.4 0.6 0.8 统计功效 0.80 (目标) 小效应量 (d=0.2) 中效应量 (d=0.5) 大效应量 (d=0.8) 功效随样本量增加而上升 效应量越大,达到目标功效所需样本越少

4.3 如何计算最小样本量

最小样本量计算是A/B测试实验设计的第一步。以下是基于双样本均值检验(Z检验)的计算方法:

4.3.1 公式法

n = 2 * ( (z1-α/2 + z1-β)² * σ² ) / δ²

其中:
- z1-α/2:显著性水平对应的临界值(α=0.05 时 ≈ 1.96)
- z1-β:功效对应的临界值(β=0.20 时 ≈ 0.84)
- σ²:总体方差(可通过历史数据估计)
- δ:最小可检测效应量(MDE)

4.3.2 常用参数对照表

目标功效 α = 0.05 α = 0.01 α = 0.10
0.80 1.96 + 0.84 = 2.80 2.58 + 0.84 = 3.42 1.65 + 0.84 = 2.49
0.85 1.96 + 1.04 = 3.00 2.58 + 1.04 = 3.62 1.65 + 1.04 = 2.69
0.90 1.96 + 1.28 = 3.24 2.58 + 1.28 = 3.86 1.65 + 1.28 = 2.93
0.95 1.96 + 1.65 = 3.61 2.58 + 1.65 = 4.23 1.65 + 1.65 = 3.30

4.3.3 Python 计算示例

import math
from scipy import stats

def min_sample_size(alpha=0.05, power=0.80, effect_size=0.5, std=1.0):
    """
    计算双样本均值检验的最小样本量(每组)
    
    参数:
        alpha: 显著性水平,默认0.05
        power: 目标统计功效,默认0.80
        effect_size: 最小可检测效应量(MDE),默认0.5
        std: 总体标准差,默认1.0
    
    返回:
        每组所需的最小样本量(向上取整)
    """
    z_alpha = stats.norm.ppf(1 - alpha / 2)
    z_beta = stats.norm.ppf(power)
    
    n = 2 * ((z_alpha + z_beta) ** 2) * (std ** 2) / (effect_size ** 2)
    return math.ceil(n)

# 示例:检测0.3的效应量,α=0.05,功效=0.80
n_required = min_sample_size(effect_size=0.3)
print(f"所需最小样本量(每组): {n_required}")
# 输出: 所需最小样本量(每组): 176

4.3.4 计算步骤总结

  1. 设定参数:确定 α(通常 0.05)、目标功效(通常 0.80)、最小可检测效应量(MDE)。
  2. 估计变异性:使用历史数据或小规模预实验估计 σ。
  3. 代入公式:使用上述公式或 Python 函数计算 n。
  4. 调整与验证:考虑多重比较校正、分组不平衡等因素,适当放大样本量(通常 +10%~20%)。
  5. 检查可行性:确认计算出的样本量在实验周期内是否可收集。
常见陷阱:
  • 效应量估计过高:使用过于乐观的 MDE 会导致样本量不足,实验功效低下。
  • 忽略多重比较:同时测试多个指标或变体时,需使用 Bonferroni 校正调整 α。
  • 忽视分组不平衡:若实验组与对照组比例不是 1:1,需使用加权公式重新计算。
  • 未考虑流失率:实际样本量应包含预期流失/无效数据比例。

4.4 实际应用建议

场景 推荐功效 推荐 α 样本量策略
探索性实验(内部验证) 0.60~0.70 0.10 快速迭代,接受较高假阳性
常规产品优化 0.80 0.05 标准计算,预留 10% 余量
高风险决策(如定价、合规) 0.90~0.95 0.01 保守估计,预留 20% 余量
模型效果评估(离线+在线) 0.80 0.05 基于离线 AUC 提升量换算效应量
关键结论: 统计功效分析不是一次性工作,而是贯穿实验设计、执行和评估的持续过程。在模型效果评估中,建议在实验前完成功效计算,并在实验中期进行中期功效检查(但不要提前停止实验),确保最终结论的可靠性。