标准A/B Test所需的样本量主要受到以下三个因素决定:
- 有多大的基础转化率
- 想要看到多大的差异
- 对于假正性结果和假负性结果的权衡
对此,行业并没有一个通行的规则。正确的样本量总是依赖于以上三个因素。
基本上:
- 基础转化率越低,需要的样本量越大;
- 期待观察到的差异越小,需要的样本量越大;
- 对结果越自信,需要的样本量越大。
如何计算样本量呢?
- 在线:Optimizely提供的在线计算工具:https://www.optimizely.com/sample-size-calculator/
- 离线:使用R基本统计包的函数
power.prop.test
power.prop.test(
p1 = 0.25,
p2 = 0.275,
power = 0.8,
alternative = 'two.sided',
sig.level = 0.05'
)
根据Optimizely的算法,用Python实现:
//based on https://www.optimizely.com/resources/sample-size-calculator/
import numpy as np
function get_sample_size(bs_cvr, min_effect, sig):
"""
- bs_cvr: Baseline conversion rate
- min_effect: Minimum detectable effect
- sig: Statistical significance
"""
c = bs_cvr - (bs_cvr * min_effect);
p = np.abs(bs_cvr * min_effect);
o = bs_cvr * (1 - bs_cvr) + c * (1 - c);
n = 2 * sig * o * np.log(1 + np.sqrt(o) / p) / (p * p);
return np.round(n)
参考:https://gist.github.com/kdzwinel/201293d7e35981e87b40
在理想的场景中,在运行实验时,需要执行以下工作:
- 追踪基准转化率
- 对想要观测到的差异达成一致
- 确定好合理的显著性水平(significance level)。一般来常用0.05的置信水平,意味着有5%的概率得到假正性结果。
- 确定好合理的统计功效(statistical power)。这是出现假负性结果的概率。0.80是一个比较合理的值,意味着有20%的概率错失实际存在的差异。
- 按统计规则计算必要的样本量。
- 直到在实验条件均拥有足够的样本量之后,才能停止实验。不要提前看结果。
- 结束实验。
- 分析实验数据。
但是,现实可能并不能如你所愿:
- 我们经常并不能确定一个合理的基准转化率。在未进行测试前,我们可能无法直到真实的基准转化率是多少。另外,由于转化率存在波动,我们也不能有效地确定基准转化率。
- 由于往往我们会实时地查看结果,所以常容易陷入到重复测量误差中。
一般来说,我们可以使用控制条件地转化率近似当作基准转化率。然后,我们可以用这个基准转化率计算出实验需要运行多长时间才能观测到一个期望的差异。
参考:http://pragmati.st/2013/02/15/calculating-sample-sizes-for-ab-tests/