A/B测试实例

说了那么多假设检验和A/B测试的理论,现在来让我们上手操作一下。

这里我自己编造了一个A/B测试的例子:

某公司原来的购买转化率是30%,现在想通过把其网页上的”购买“按钮加大一倍,使购买转化率提升到40%。

可以看到这里的对比指标是转化率,因此这里适用两独立样本比率检验。

原假设:对照组的购买转化率与试验组的购买转化率无显著差异

备择假设:对照组的购买转化率与试验组的购买转化率有显著差异

在测试之前,我们需要先确定样本量。假设我想要达到的功效为80%,显著性水平为5%,通过statsmodels计算样本量的步骤如下:

扫描二维码关注公众号,回复: 8352093 查看本文章

首先计算出我们想要达到的效应量,即购买转化率提升到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,属于小效应量,虽然试验组的购买转化率与对照组的购买转化率之间的差异具有显著性,但差异不大。

猜你喜欢

转载自www.cnblogs.com/HuZihu/p/12054281.html