A/B Test是我们做算法模型时离不开的助手,只有通过A/B Test的模型才能进入产品。但要使A/B Test达到应有的效果,我们必须严格地满足它的一些要求。这里有一篇关于A/B test的文章:写得很好,我只在这里补充一些细节。
Z检验
很多情况下,我们要用Z检验来判断A/B Test的有效性。Z检验,也称“U检验”,是为了检验在零假设情况下测试数据能否可以接近正态分布的一种统计测试。根据中心极限定理,在大样本条件下许多测验可以被贴合为正态分布。在不同的显著性水平上,Z检验有着同一个临界值,因此它比临界值标准不同学生t检验更简单易用。当实际标准差未知,而样本容量较小(小于等于30)时,学生T检验更加适用。
我们设H0假设为A、B没有显著性差异,H1假设为A、B有显著性差异。那我们就有几个重要的数据需要考虑:
- 样本容量,即A、B的sample数量,一般我们会设
- power:拒绝H0后接受H1的概率,一般设为90%
- 置信度:我们做出结论的可信度有多少,一般是0.95或者0.99
- 显著性:1-置信度,也就是0.05或者0.01
- 置信区间:目标值的置信区间,以高斯分布为例,是,其中与置信度有关
statsmodels
Python有一个统计工具statsmodels,其中有一个工具可以用来计算Z检验。
举一个简单的?,我们已知目前的CTR是0.7,我们想要提升10%即将CTR提升到0.77,A和B的sample size相同,那么我们计算需要的样本量的方法为:
effect_size = 0.07 / sqrt(0.7 * ( 1 -0.7))print NormalIndPower().solve_power( effect_size=effect_size, nobs1=None, alpha=0.05, power=0.9, ratio=1.0, alternative='larger') 复制代码
计算器
网上有很多sample size计算器,比如说这就是一个。其中,Conversion Rate是指优化目标现在的值,例如现在的CTR,其他的metrics则像我们之前提到的那样。