待完成 |ABtest 原理及用法总结


待完成 |ABtest 原理及用法总结

A/B test 流程

创建实验组:对网站原有版本的元素进行所需的更改。可能是更改按钮的颜色,交换页面上元素的顺序,隐藏导航元素或完全自定义的内容。
确定目标:目标是用于确定实验组是否比对照组更成功的指标。可以是点击按钮的点击率、链接到产品购买的打开率、电子邮件注册的注册率等等。
生成假设:一旦确定了目标,就可以开始生成A / B测试想法和假设,以便统计分析它们是否会优于当前版本。
收集数据:针对指定区域的假设收集相对应的数据用于A/B test分析。
运行试验:此时,网站或应用的访问者将被随机分配对照组和实验组。测量、计算和比较他们与每种体验的相互作用,以确定每个用户体验的表现。
分析结果:实验完成后,就可以分析结果了。A / B test分析将显示实验组和对照组两个版本之间是否存在统计性显著差异。

A/B test简单案例

实例背景简述

某司「猜你想看」业务接入了的新推荐算法,新推荐策略算法开发完成后,在全流量上线之前要评估新推荐策略的优劣。所用的评估方法是A/B test,具体做法是在全量中抽样出两份小流量,分别走新推荐策略分支和旧推荐策略分支,通过对比这两份流量下的指标(这里按用户点击衡量)的差异,可以评估出新策略的优劣,进而决定新策略是否全适合全流量。

实例A/B test步骤

指标:CTR

实验组:新的推荐策略B

目标假设:新的推荐策略实验组B可以带来更多的用户点击。

收集数据:实验组B数据为新的策略结果数据,对照组A数据为旧的策略结果数据。均为伪造数据。

分析结果(Python):利用 python 中的 scipy.stats.ttest_ind 做关于两组数据的双边 t 检验,结果比较简单。但是做大于或者小于的单边检测的时候需要做一些处理,才能得到正确的结果

我们先看看实验组B和对照组A均值情况:

很明显,实验组B的均值 >对照组A的均值,但这就能说明实验组B可以带来更多的业务转化吗?还是仅仅是由于一些随机因素造成的?

1 from scipy import stats
2 import numpy as np
3 import numpy as np
4 import seaborn as sns
5 
6 A = np.array([ 1, 4, 2, 3, 5, 5, 5, 7, 8, 9,10,18])
7 B = np.array([ 1, 2, 5, 6, 8, 10, 13, 14, 17, 20,13,8])
8 print('策略A的均值是:',np.mean(A))
9 print('策略B的均值是:',np.mean(B))
1 Output:
2 策略A的均值是:6.416666666666667
3 策略B的均值是:9.75

于是,为了更加科学就需要进一步做个假设检验。因为我们是希望实验组B效果更好,所以设置:

(1)原假设H0:B<=A

(2)备择假设H1:B>A  (一般研究者欲支持的结论设为备择假设,其反面作为原假设)

scipy.stats.ttest_ind(x,y)默认验证的是x.mean()-y.mean()这个假设。为了在结果中得到正数,计算如下:

stats.ttest_ind(B,A,equal_var= False)
1 output:
2 Ttest_indResult(statistic=1.556783470104261, pvalue=0.13462981561745652)

根据 scipy.stats.ttest_ind(x, y) 文档的解释,这是双边检验的结果。为了得到单边检验的结果,需要将计算出来的 pvalue 除于2 取单边的结果与显著性水平α进行比较。
通过检验统计量得出 p-value=0.13462981561745652,取阈值显著性水平α=0.05,那么p/2 > α=0.05,没有落在拒绝域,所以不能够拒绝原假设,认为备择假设H1:B>A成立。即暂时还不能够认为实验组B就一定能带来多的用户点击。

A/B test需要注意点:

1、先验性:通过低代价,小流量的实验,在推广到全流量的用户。
2、并行性:不同版本、不同方案在验证时,要保重其他条件都一致。
3、分流科学性和数据科学性:分流科学是指对AB两组分配的数据要一致,数据科学性是指不能直接用均值转化率、均值点击率来进行AB test决策,而是要通过置信区间、假设检验、收敛程度来得出结论。

【参考】

【1】A/B Test的统计原理和效果解读

相关