1. 实验设计从样本量开始:先算明白再动手
做A/B测试这么多年,我最大的感受是:绝大多数实验失败,都不是死在分析方法上,而是死在实验设计阶段。最常见的一个场景就是——产品经理兴冲冲跑过来,说我们要上线一个新功能,帮你配好了实验,三个小时后问"数据出了吗?效果怎么样?"
三个小时能看出什么?三个小时连统计显著性需要的样本量零头都不够。
所以我想先聊一个很多教程不会开篇就讲的东西:样本量计算。这是整个实验框架的发动机,发动机没调好,后面全白搭。
1.1 为什么样本量是实验的第一步
要回答"实验要做多久、需要多少用户",本质是在回答一个问题:我们有多大的把握,检测出真实存在的差异?
这里有个核心概念叫统计功效(Statistical Power),一般设定在80%或者90%。意思是说,如果新版本真的比旧版本好5个百分点,我们有80%或90%的概率能通过实验检测到这个差异。剩下的20%或10%,就是"真实存在差异但实验没看出来"的概率,统计学上叫第二类错误(β)。
另一个配套概念是显著性水平(α),通常取5%。意思是说,如果新版本其实没效果,我们有5%的概率会误判为有效果,这就是第一类错误。
这两个参数加上两个业务参数——基线转化率和最小可检测提升(MDE,Minimum Detectable Effect)——共同决定了样本量。最小可检测提升是业务方拍板的核心问题:我们希望检测出多小的效果?1%的提升?还是必须5%的提升才值得上线?这个值设得越小,需要的样本量就越大,实验周期就越长。
我很喜欢用一个类比来解释:样本量估算就像钓鱼选鱼竿,你想钓1公斤以上的鱼,和想钓0.1公斤以上的鱼,用的装备完全是两码事。MDE就是那条"最小值得钓的鱼"。
1.2 样本量计算公式与Python实现
对于转化率这类二值指标(用户要么转化,要么没转化),最常用的样本量近似公式是:
[
n = \frac{(Z_{\alpha/2} + Z_{\beta})^2 \cdot 2p(1-p)}{\delta^2}
]
其中:
- (p) 是基线转化率(对照组目前的转化率)
- (\delta) 是最小可检测提升(绝对值)
- (Z_{\alpha/2}) 是显著性水平对应的Z值,α=0.05时取1.96
- (Z_{\beta}) 是功效对应的Z值,功效=80%时取0.84,功效=90%时取1.28
- (n) 是每组所需样本量
直接看公式可能有点抽象,我把它写成Python函数,你直接调用就行:
python复制from scipy import stats
def calculate_sample_size(
baseline_rate: float,
minimum_detectable_effect: float,
alpha: float = 0.05,
power: float = 0.8,
) -> int:
"""
计算两样本比例检验所需的每组样本量。
参数:
baseline_rate: 基线转化率,比如 0.2 表示20%
minimum_detectable_effect: 最小可检测提升(绝对差值),比如 0.02 表示2个百分点
alpha: 显著性水平,默认为0.05
power: 统计功效,默认为0.8
返回:
每组所需样本量(向上取整)
"""
z_alpha = stats.norm.ppf(1 - alpha / 2)
z_beta = stats.norm.ppf(power)
p = baseline_rate
delta = minimum_detectable_effect
n = (z_alpha + z_beta) ** 2 * 2 * p * (1 - p) / (delta ** 2)
return int(n // 1 + 1)
# 示例:基线转化率20%,希望检测出2%的绝对提升,α=0.05,功效=80%
sample_size = calculate_sample_size(baseline_rate=0.2, minimum_detectable_effect=0.02)
print(f"每组需要 {sample_size} 个用户")
我实际跑一下,基线转化率20%、MDE=2个百分点时,每组需要约6150个用户,两组加起来一万二。如果你的产品日活只有五千,那这个实验要跑将近三天才能出结果。MDE改成1个百分点,样本量立刻变成约24600个,实验周期翻四倍。
这就是为什么MDE的设定极其关键。它不是拍脑袋拍的,而是业务上要回答:一个功能如果只带来0.5%的提升,值不值得承担全量上线的风险? 如果值得,你就准备好海量样本;如果不值得,干脆把MDE调大,实验早点结束。
1.3 样本量参数敏感性速查
为了让你少走弯路,我把不同参数组合下的样本量列成一个表,方便快速估算实验规模。
| 基线转化率 | MDE(绝对提升) | 显著性水平 α | 统计功效 | 每组样本量 |
|---|---|---|---|---|
| 10% | 1% | 5% | 80% | 13,831 |
| 10% | 2% | 5% | 80% | 3,458 |
| 10% | 5% | 5% | 80% | 553 |
| 20% | 1% | 5% | 80% | 24,587 |
| 20% | 2% | 5% | 80% | 6,147 |
| 20% | 2% | 5% | 90% | 8,229 |
| 30% | 2% | 5% | 80% | 7,180 |
| 30% | 2% | 5% | 95% | 10,132 |
| 50% | 1% | 1% | 90% | 65,861 |
从这张表能读出几件事:
第一,基线转化率越靠近50%,方差越大,需要的样本量越多。 同样是MDE=2%,基线10%需要3458个,基线50%就需要约9600个。
第二,功效从80%提到90%,样本量大约增加34%。 很多团队想都不想就设90%甚至95%,结果实验周期拉长一倍,还不如在80%功效下多做几轮实验迭代得快。
第三,α从5%收紧到1%,样本量急剧膨胀。 除非涉及资金安全、法律合规这类极高风险的改动,否则真的没必要用1%。
我见过太多团队,样本量没算清楚就上线,跑了一周发现对照组和实验组各攒了三千个用户,一算功效只有40%,这意味着即使新版本真的好用,也有60%的概率检测不出来。这不是数据分析的问题,是实验设计的问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 指标体系与分流策略:框架的地基
样本量解决了"做多久"的问题,接下来要解决"怎么做才干净"的问题。一个高效的实验框架,在正式跑实验之前,必须想清楚两件事:用什么指标评判胜负,以及怎么把用户分到不同的组里。
这两件事如果做不好,后面再高级的统计方法都救不回来。
2.1 指标体系:核心指标、护栏指标、过程指标三层设计
很多团队做实验只看一个指标,比如只看点击率。这是非常危险的——点击率涨了,但人均时长掉了、投诉率涨了,这种"胜利"很可能是个陷阱。
我的建议是建立三层指标体系:
第一层:核心指标(决策指标)。 整个实验唯一用来做上线/不下线决策的指标。通常是一个,最多两个。比如电商场景下是支付转化率,内容场景下是人均阅读时长。注意,核心指标必须是北极星指标或者它的一级拆解指标,不能是虚荣指标(比如UV、PV这种)。
第二层:护栏指标(Guardrail Metrics)。 用来监控"实验组是否伤到了不该伤的东西"。电商场景里,核心指标是转化率,护栏指标就是客单价、退款率、投诉率。内容场景里,核心指标是阅读时长,护栏指标就是跳出率、负反馈比例。护栏指标不需要达到显著性,但如果出现恶化趋势且接近显著性边界,就需要拦截实验、停止放量。
第三层:过程指标(诊断指标)。 用来解释"核心指标为什么变了"。比如实验组的支付转化率提高了,过程指标能告诉我们,是首单转化提升了,还是复购转化提升了?是搜索页进来的用户转化好了,还是信息流进来的用户转化好了?过程指标不参与决策,但参与归因分析。
有了三层指标,你搭建
