如何计算实验所需样本量?
解读
面试官问“如何计算实验所需样本量”,并不是想听你把统计学公式背一遍,而是考察三件事:
- 你是否知道国内主流 A/B 实验平台(如火山引擎、腾讯灯塔、阿里云 Dataworks)对样本量有自动估算功能,但仍需人工输入关键参数;
- 你是否能把业务目标、用户分层、流量分配与统计严谨性串成一条线;
- 你是否能在流量有限、周期紧张、效果微小的真实国产场景里,给出可落地的折中方案。
一句话:要证明“我会让实验在最少天数+最少用户内得出可信结论,并且不伤害大盘指标”。
知识点
- 核心指标类型:比例型(转化率、留存率)与均值型(人均时长、人均 GMV),公式不同。
- 五大必需参数:
- 基准值:当前大盘指标,如 7 日留存 28%。
- 最小可检测提升(MDE):业务能感知的最小幅度,如 +2%,对应相对提升 7.1%。
- 显著性水平 α:国内普遍取 0.05(双边),对应 95% 置信度。
- 检验效能 1-β:国内普遍取 0.8,即 80% 概率检测到真实差异。
- 合并方差或标准差:均值型指标需用历史 30 日数据估算。
- 分层实验与聚类修正:若按用户 id 随机,无需聚类修正;若按直播间、门店、班级等“聚类单元”随机,需乘设计效应(DE),样本量可膨胀 3~10 倍。
- 流量切割与伦理:国内日活 100 万的产品,通常单日可挤出 10%~20% 纯净流量做实验,超出需分多日或降级实验。
- 多日累积与周期性:电商要跨完整消费周期(至少 7 日),内容产品要跨两个周中+周末,避免周内效应失真。
- 早期止损:若平台支持序贯检验(mSPRT),可在样本量达到 50% 时提前判断,减少 20%~30% 流量,但需把 α 调低到 0.03 以防 inflate。
- Python 实战代码:
statsmodels.stats.powerNormalIndPower.solve_power或power.ttest_ind,一行代码出结果,面试时可直接口述。
答案
“我在上一家公司负责电商大促的留存实验,目标是把 7 日留存从 28% 提到 30%。
第一步,用近 30 日数据确认基准值 28%,业务方认为相对提升 7.1%(+2 个百分点)才值得全量,因此 MDE 设 2%。
第二步,α 取 0.05,power 取 0.8,指标为比例型,用两样本 Z 检验样本量公式:
n = 2 × [Z_(1-α/2)√(2p(1-p)) + Z_(1-β)√(p1(1-p1)+p2(1-p2))]² / (p1-p2)²
代入 p=0.28,p1=0.28,p2=0.30,算出单组 6 200 人,两组共 1.24 万。
第三步,考虑聚类修正:我们按用户 id 随机,设计效应≈1,无需膨胀。
第四步,看流量池:大促期 DAU 120 万,公司规定单日实验不超 15%,即可用 18 万用户。1.24 万仅占 6.9%,一天就能跑完。
第五步,跨周期校验:留存要观察 7 日,因此实验至少跑 7+2=9 天(多留 2 天等延迟数据)。
第六步,上线前 Power Check:用火山引擎的“样本量计算器”复验,结果 1.26 万,与手算误差 <2%,通过评审。
第七步,提前止损:平台支持序贯检验,若第 5 天 p 值 <0.03 且效应正向,可提前全量,节省约 30% 流量。
最终实验 9 天完成,留存提升 2.1 个百分点,显著且业务可感知,全量发布。”
拓展思考
- 指标微小怎么办:若 MDE 只有 0.5%,样本量会膨胀到 5 万/组,远超单日可用流量,此时可:
- 把**核心指标降级为“次日留存”**缩短观测窗;
- 改用比例提升+收益预估模型,先验证方向正向,再全量后长期回收;
- 采用CUPED缩减方差,样本量可再降 20%~40%。
- 多指标悖论:国内面试常追问“同时看留存+GMV,样本量以谁为准?”标准答案是“以需要样本量更大的指标为准,若资源不足,用Bonferroni 校正把 α 调到 0.025,重新估算。”
- 伦理与合规:教育、金融类 App 必须通过工信部备案的实验平台,且实验组不超 10% 未成年用户,计算时需先剔除敏感人群,再算样本量。
- 面试加分项:把“样本量→实验周期→上线排期→业务 OKR”做成一张甘特图口述出来,让面试官直观感受到你把统计学真正嵌进了国内快节奏的业务节奏。