跳到主要内容

样本量计算

问题

A/B 实验需要多少样本量?如何计算最小样本量?

答案

核心参数

参数符号含义常用值
显著性水平α假阳性概率(Type I Error)0.05
统计功效1-β检测到真实效应的概率0.80
最小检测效应MDE (δ)你关心的最小提升幅度业务决定
基准值p₀ / μ₀当前指标值历史数据
标准差σ指标的波动性历史数据

比例类指标(转化率)

n=(Zα/2+Zβ)22p(1p)δ2n = \frac{(Z_{\alpha/2} + Z_\beta)^2 \cdot 2p(1-p)}{\delta^2}

其中:

  • pp = 基准转化率
  • δ\delta = MDE(绝对值)= p1p0p_1 - p_0
  • Zα/2Z_{\alpha/2} = 1.96(α=0.05,双尾)
  • ZβZ_\beta = 0.84(Power=0.80)

示例:当前转化率 10%,希望检测 1% 的提升(10% → 11%)

n=(1.96+0.84)2×2×0.10×0.900.012=7.84×0.180.0001=14,112n = \frac{(1.96 + 0.84)^2 \times 2 \times 0.10 \times 0.90}{0.01^2} = \frac{7.84 \times 0.18}{0.0001} = 14{,}112

每组约 14,112 用户,两组共 28,224 用户。

均值类指标(客单价、时长)

n=(Zα/2+Zβ)22σ2δ2n = \frac{(Z_{\alpha/2} + Z_\beta)^2 \cdot 2\sigma^2}{\delta^2}

示例:平均客单价 200 元,标准差 80 元,检测 10 元提升

n=(1.96+0.84)2×2×802102=7.84×12800100=1,004n = \frac{(1.96 + 0.84)^2 \times 2 \times 80^2}{10^2} = \frac{7.84 \times 12800}{100} = 1{,}004

每组约 1,004 用户。

Python 计算

from scipy import stats
import numpy as np

def sample_size_proportion(p0: float, mde: float, alpha: float = 0.05, power: float = 0.80) -> int:
"""比例指标样本量计算(每组)"""
z_alpha = stats.norm.ppf(1 - alpha / 2)
z_beta = stats.norm.ppf(power)
p_avg = p0 + mde / 2
n = ((z_alpha + z_beta) ** 2 * 2 * p_avg * (1 - p_avg)) / (mde ** 2)
return int(np.ceil(n))

def sample_size_mean(sigma: float, mde: float, alpha: float = 0.05, power: float = 0.80) -> int:
"""均值指标样本量计算(每组)"""
z_alpha = stats.norm.ppf(1 - alpha / 2)
z_beta = stats.norm.ppf(power)
n = ((z_alpha + z_beta) ** 2 * 2 * sigma ** 2) / (mde ** 2)
return int(np.ceil(n))

# 转化率:基准 10%,检测 1% 提升
print(sample_size_proportion(0.10, 0.01)) # ~14112

# 客单价:标准差 80,检测 10 元提升
print(sample_size_mean(80, 10)) # ~1004

影响样本量的因素

你想要的对样本量的影响原因
更小的 α(0.05→0.01)↑ 增加更严格,需要更多证据
更高的 Power(0.80→0.90)↑ 增加更不容易漏掉真实效应
更小的 MDE大幅增加检测微小变化需要更多数据
指标方差更大↑ 增加信噪比低,需更多样本
基准转化率接近 50%↑ 增加方差 p(1-p) 在 50% 最大

常见问题处理

样本量不够怎么办?

方法做法代价
增大 MDE只检测更大的效应可能错过小提升
降低 Power0.80 → 0.70更容易漏掉效应
增加流量扩大实验范围风险扩大
降低方差CUPED 方差缩减实现复杂
延长实验积累更多行数占用时间

多组实验的样本量

如果有 3 个或更多实验组:

  • 每组对比 → 需要做多重比较校正(Bonferroni)
  • 校正后的 α' = α / 比较次数
  • 样本量会显著增加

常见面试问题

Q1: 样本量计算中最关键的参数是什么?

答案MDE(最小检测效应)。它由业务决定——你关心的最小提升是多少。MDE 对样本量的影响是平方关系:MDE 缩小一半,样本量增加 4 倍。

Q2: 某实验跑了 3 天就显著了,可以提前停吗?

答案不建议。原因:

  1. Peeking 问题:反复查看+提前停止会膨胀假阳性率
  2. 周效应:3 天不能覆盖完整周期
  3. 新奇效应:早期数据可能有偏
  4. 如果确实想提前停止,需使用序贯检验(Sequential Testing)方法

Q3: 如何确定 MDE?

答案:从业务角度出发:

  1. ROI 倒推:改动成本多少?需要多大提升才值得?
  2. 历史基准:同类改动通常带来多大提升?
  3. 实际约束:给定流量和时间,能检测到多小的效应?
  4. 一般经验:转化率的 MDE 通常在相对提升 2%-5%

Q4: 为什么 Power 通常选 0.80 而不是更高?

答案

  • 0.80 是学术界和工业界的惯例平衡点
  • 提高到 0.90 需要增加约 30% 的样本量
  • Power=0.80 意味着有 20% 概率漏掉真实效应(Type II Error)
  • 对于高风险决策(如定价改动),可以提高到 0.90

相关链接