A/B test的含义
-
含义:也称为分割测试或桶测试,是一种将网页或应用程序的两个版本相互比较以确定哪个版本的性能更好的方法。A/B test本质上是一个实验,其中页面的两个或多个变体随机显示给用户,统计分析确定哪个变体对于给定的目标效果更好
-
操作:对同一个页面创建两个版本,一半流量显示页面原始版本(控件),一半流量显示页面修改版本(变体)
-
目的:让个人、团队和公司通过用户行为结果数据不断对其用户体验进行仔细更改。
-
举例:为提高销售质量和数量,尝试对标题、可视图像、表单字段、号召性用于和页面的整体布局进行A/B test更改。一次测试一个变化有助于确定哪些变化对访问者行为产生哪些影响。
A/B test的步骤
- 确定目标:目标是用于确定变体是否比原始版本更成功的指标。例,点击按钮的点击率,链接到产品购买的打开率,电子邮箱注册的注册率等等。
- 创建变体:对网站原有版本的元素进行所需要的更改。例,更改按钮颜色,交换页面上元素的顺序,隐藏导航元素或完全自定义的内容。
- 生成假设:一旦确定了目标,就可以开始生成A/B test测试想法和假设,以便统计分析它们是否会优于当前版本。
- 收集数据:针对指定区域的假设收集相对应的数据用于A/B test分析。
- 运行试验:网站或应用的访问者将被随机分配控件或变体。测量,计算和比较它们与每种体验的相互作用,以确定每个用户体验的表现。
- 分析结果:显示两个版本之间是否存在统计性显著差异。
A/B test案例
-
目标:CTR(点击通过率,到达目标页面的数量/广告的展现量)
-
变体:新的推荐策略B
-
控件:旧的推荐策略A
-
假设:
原假设:CTR(B) <= CTR(A)
备择假设:CTR(B) > CTR(A)
-
进行试验,收集数据。
-
分析结果
python的scipy.stats.ttest_ind可以做关于两组数据的双边t检验(比较两个平均数的差异是否显著)
from scipy import stats import numpy as np import seaborn as sns A = np.array([1,4,2,3,5,5,5,7,8,9,10,18]) B = np.array([1,2,5,6,8,10,13,14,17,20,13,8]) stats.ttest_ind(B,A,equal_var=False) #d得到p-value=0.13,但这是双边检验的结果 #单边检验的结果:p-value/2 > 0.05,不能拒绝原假设,不能认为B比A效果更好
注意
- 先验性:用低代价,小流量进行实验,再推广到全流量客户
- 控制变量:不同版本、方案在验证时,要保证其它条件一致
- 分流科学&数据科学:AB两组分配的数量一致;不能直接用均值转化率、均值点击率进行决策,需要进行假设检验