4. 统计功效分析:功效函数、样本量对功效的影响、如何计算最小样本量
统计功效(Statistical Power)是A/B测试中衡量“当真实差异存在时,我们能够正确拒绝零假设”的概率。功效分析帮助我们在实验设计阶段回答一个关键问题:需要多少样本才能可靠地检测出预期效果?
4.1 功效函数与核心参数
统计功效函数描述了功效与四个核心参数之间的关系:
| 参数 | 符号 | 说明 | 对功效的影响 |
|---|---|---|---|
| 显著性水平 | α | 犯第一类错误(假阳性)的概率,通常设为0.05 | α↑ → 功效↑(但假阳性风险增加) |
| 效应量 | δ / d | 实验组与对照组之间的标准化差异(如提升率) | 效应量↑ → 功效↑ |
| 样本量 | n | 每组所需的样本数量 | 样本量↑ → 功效↑ |
| 统计功效 | 1-β | 正确拒绝零假设的概率,通常目标设为0.80 | 目标功效↑ → 所需样本量↑ |
功效函数公式(简化版,双样本均值检验):
其中 Φ 为标准正态累积分布函数,σ 为总体标准差,z 为临界值。
Power = Φ( |δ| / (σ * √(2/n)) - z1-α/2 )其中 Φ 为标准正态累积分布函数,σ 为总体标准差,z 为临界值。
4.2 样本量对功效的影响
样本量是实验者最可控的因素。下图展示了不同样本量下功效的变化趋势:
- 小样本(n < 100):功效通常低于 0.50,即使存在中等效应量也难以检测。
- 中等样本(n = 200~500):功效提升至 0.60~0.80,适合检测中等效应量。
- 大样本(n > 1000):功效接近 1.0,但需注意“统计显著但实际无意义”的风险。
经验法则: 样本量每增加 4 倍,功效大约提升 0.20~0.30(在中等效应量下)。但功效提升存在边际递减效应——当功效超过 0.90 后,继续增加样本量的收益急剧下降。
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 计算步骤总结
- 设定参数:确定 α(通常 0.05)、目标功效(通常 0.80)、最小可检测效应量(MDE)。
- 估计变异性:使用历史数据或小规模预实验估计 σ。
- 代入公式:使用上述公式或 Python 函数计算 n。
- 调整与验证:考虑多重比较校正、分组不平衡等因素,适当放大样本量(通常 +10%~20%)。
- 检查可行性:确认计算出的样本量在实验周期内是否可收集。
常见陷阱:
- 效应量估计过高:使用过于乐观的 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 提升量换算效应量 |
关键结论: 统计功效分析不是一次性工作,而是贯穿实验设计、执行和评估的持续过程。在模型效果评估中,建议在实验前完成功效计算,并在实验中期进行中期功效检查(但不要提前停止实验),确保最终结论的可靠性。