说了那么多假设检验和 A/B 测试的理论, 现在来让我们上手操作一下.
这里我自己编造了一个 A/B 测试的例子:
某公司原来的购买转化率是 30%, 现在想通过把其网页上的 "购买" 按钮加大一倍, 使购买转化率提升到 40%.
可以看到这里的对比指标是转化率, 因此这里适用两独立样本比率检验.
原假设: 对照组的购买转化率与试验组的购买转化率无显著差异
备择假设: 对照组的购买转化率与试验组的购买转化率有显著差异
在测试之前, 我们需要先确定样本量. 假设我想要达到的功效为 80%, 显著性水平为 5%, 通过 statsmodels 计算样本量的步骤如下:
首先计算出我们想要达到的效应量, 即购买转化率提升到 40% 对应的效应量是多少, 然后再通过效应量, 功效, 显著性水平计算出每组所需的样本量.
- from statsmodels.stats.proportion import proportion_effectsize
- from statsmodels.stats.power import zt_ind_solve_power
- effect_size=proportion_effectsize(prop1=0.3, prop2=0.4, method='normal')
- sample_size=zt_ind_solve_power(effect_size=effect_size, nobs1=None, alpha=0.05, power=0.8, ratio=1.0, alternative='two-sided')
这里解释一下, zt_ind_solve_power 函数里的参数 ratio=1 表示试验组和对照组的样本量相同, alternative='two-sided'表示是双尾检验.
计算结果是: 每组样本大约需要 356 个观测值.
接下去进行 A/B 测试. 假设两种方案各有 5000 个用户参与测试, 原方案有 1545 个用户完成转化, 优化方案有 1870 个用户完成转化. 用 statsmodels 计算 p 值:
- from statsmodels.stats.proportion import proportions_ztest
- z_score, p_value=proportions_ztest(count=[1545,1870], nobs=[5000,5000], value=None, alternative='two-sided')
proportions_ztest 函数里的 count 表示对照组和试验组完成转化的人数, nobs 表示各组样本的观测人数.
计算出的 p 值是: 7.2e-12.p<=α, 结果是显著的.
计算置信区间:
- p1=1545/5000
- p2=1870/5000
- n1=n2=5000
- p=(n1*p1+n2*p2)/(n1+n2)
- import scipy
- z_critical=scipy.stats.norm.ppf(0.975) #计算临界值
- margin=z_critical*(p*(1-p)*(1/n1+1/n2))**0.5 #计算边际误差
- lower=p-margin #置信区间下限
- upper=p+margin #置信区间上限
置信区间是 (0.32, 0.36).
可以看到, 虽然试验组的购买转化率与对照组的购买转化率之间有显著差异, 但是并没有达到我们设定的优化目标.
接下去完成假设检验报告:
1, 描述统计
对照组样本: 5000 个用户, 其中有 1545 人完成转化. p1=0.309.
试验组样本: 5000 个用户, 其中有 1870 人完成转化. p2=0.374.
2, 推断统计
(1) 假设检验
原假设: 试验组的购买转化率 p2 - 对照组的购买转化率 p1=0
备择假设: 试验组的购买转化率 p2 - 对照组的购买转化率 p1≠0
检验类型: 两独立样本比率检验
样本量: 对照组 5000, 试验组 5000
抽样分布类型: p1-p2 近似正态分布
检验方向: 双尾
显著性水平α:0.05
检验统计量的值:-6.85
p 值: 7.2e-12
结论: p<=α, 拒绝原假设, 试验组的购买转化率与对照组的购买转化率之间有显著差异.
(2) 置信区间
置信度: 0.95
置信度对应的检验统计量的值:-1.96, 1.96
置信区间:(0.32, 0.36)
3, 效应量
效应量的类型: Cohen's h
效应量的值: 0.14
对效应量的解释: 效应量低于 0.2, 属于小效应量, 虽然试验组的购买转化率与对照组的购买转化率之间的差异具有显著性, 但差异不大.
来源: http://www.bubuko.com/infodetail-3355785.html