相信大家都或多或少听说过A/B测试,即便没有听过其实也被动的参与过——作为受试者。在网站和APP的设计、产品的运营中,经常会面临多个设计/运营方案的选择。小到按钮的位置、文案的内容、主题的颜色,再到注册表单的设计、不同的运营方案,都有不同的选择。A/B test可以帮助我们做出选择,消除客户体验(UX)设计中不同意见的争执。

全网最全最详细解释A/B Test是什么?_AB测试

一、A/B test背景

AB实验的概念来自生物医学的双盲测试,双盲测试中病人被随机分成两组,在不知情的情况下分别给予安慰剂和测试用药,经过一段时间的实验后,比较这两组病人的表现是否具有显著的差异,从而确定测试用药是否有效。2000年,Google工程师将这一方法应用在互联网产品测试中,此后AB实验变得越来越重要,逐渐成为互联网产品运营迭代科学化、数据驱动增长的重要手段。

从国外的Apple、Airbnb、Amazon、Facebook、Google、LinkedIn、Microsoft、Uber等公司,到国内的百度、阿里、腾讯、滴滴、字节跳动、美团等公司,在各种终端(网站、PC应用程序、移动应用程序、电子邮件等)上运行着大量的AB实验。

这些公司每年进行数千到数万次实验,涉及上亿的用户,测试内容涵盖了绝大多数产品特征的优化,包括

  • 用户体验:颜色、字体和交互等);
  • 算法优化:搜索、广告、个性化、推荐等;
  • 产品性能:响应速度、吞吐量、稳定性、延迟;
  • 内容:商品、资讯、服务
  • 生态管理系统、商业化收入等。

二、什么是A/B Test?

先看一下火山引擎是怎么介绍的:在线上流量中取出一小部分(较低风险),完全随机地分给原策略A和新策略B(排除干扰),再结合一定的统计方法,得到对于两种策略相对效果的准确估计(量化结果)。这一套基于小样本的实验方法同时满足了低风险,抗干扰和量化结果的要求,因此不论在互联网产品研发还是科学研究中,都被广泛使用。

A/B测试(也称为分割测试/桶测试/受控实验)是一种将网页或应用程序的两个版本相互比较以确定哪个版本的性能更好的方法。因为AB实验被引入互联网公司后,应用场景主要是大规模的在线测试,所以也被称作在线AB实验或者在线对照实验(Online Controlled Experiment,OCE)。

AB测试本质上是一个实验,其中页面的两个或多个变体随机显示给用户,统计分析确定哪个变体对于给定的转换目标(指标如CTR)效果更好。

全网最全最详细解释A/B Test是什么?_Test_02

如果将这个流程应用到产品迭代中,就是将具有不同功能、不同策略的产品版本,在同一时间,分别让两个或多个用户组访问。这些参与实验的用户组是从总体用户中随机抽样出来的,一般只占总体用户的一小部分,而且不同组用户的属性、构成成分是相同或相似的。先通过日志系统、业务系统收集各组用户的行为数据和业务数据,然后基于这些数据指标分析、评估出相比之下更好的产品版本,最后推广到全部用户。

全网最全最详细解释A/B Test是什么?_AB测试_03

以上图为例,我们试图通过AB实验找出哪个颜色的横幅位点击率更高:A组保持浅色横幅不变,B组采用深色的横幅,分析哪个颜色更能引起用户的关注,提升用户的点击率。如果通过实验发现深色横幅的点击率更高,就将深色横幅位推广到全部用户。

当然,在实际应用中,AB实验的效果评估一般没有这么简单,比如除了点击率之外,还需要综合考虑其他的指标。

从不同分类视角来看,AB实验有着不同的类型:

  • 从实验实施的产品形态来看:App类型、PC类型、网页页面类型等。
  • 从实验代码运行的机制来看:前端页面类型、后端服务类型等。
  • 从实验分流的对象来看:用户类型、会话类型、页面类型、元素类型等。
  • 从实验服务调用的方式来看:SDK类型、接口服务类型等。
  • 从实验内容来看:交互类、算法类、内容类、工程性能类等。

这些是AB实验常见的分类方式。当然,AB实验的分类不局限于以上分类,可以根据实际情况,采用不同的分类方式。不管何种类型的AB实验,都应符合分流→实验→数据分析→决策的基本流程。

三、为什么要做A/B test?

试想以下几种场景:

  1. 小A凭着丰富的经验直接修改了产品的线上策略,一周后发现效果不升反降,遂下线。
  2. 小B和小C同时上线了两个产品功能,一周后产品数据有下降,都认为是对方的问题,谁也不肯接锅。
  3. 小D上线了一个新策略,随后进入十一黄金周,用户交互有所下降,小D觉得一定是假期埋没了自己的辛苦贡献,但也辩不明白,无处申冤。
  4. 小E辛苦工作一整年,开发了365个不同的功能上线,年终写总结时却写不出到底在哪些方面究竟贡献了多少。

想必不论是研发还是产品运营,都不希望自己辛苦工作过后落入上述的几种尴尬的境地中,因此数据驱动业务增长就显得很有必要。

A/B test可以让个人,团队和公司通过用户行为结果数据不断对其用户体验进行仔细更改。这允许他们构建假设,并更好地了解为什么修改的某些元素会影响用户行为。这些假设可能被证明是错误的,也就是说他们对特定目标的最佳体验的个人或团队想法利用A/B test证明对用户来说是行不通的,当然也可能证明是正确的。

所以说 A/B test不仅仅是解决一次分歧的对比,A/B test可以持续使用,以不断改善用户的体验,改善某一目标,如随着时间推移的转换率。

全网最全最详细解释A/B Test是什么?_Test_04

例如,B2B技术公司可能希望从活动登陆页面提高其销售线索质量和数量。为了实现这一目标,团队将尝试对标题,可视图像,表单字段,号召性用语和页面的整体布局进行A/B测试更改。

一次测试一个变化有助于他们确定哪些变化对访问者的行为产生何种影响,哪些变化没有影响访问者的行为。随着时间的推移,他们可以结合实验中多次正向变化的效果来展示变体相对于控件的可测量的改进。

这样来说产品开发人员和设计人员可以使用A/B测试来演示新功能对用户体验变化的影响。只要目标明确定义并且有明确的假设,用户参与,产品体验等都可以通过A/B测试进行优化。

四、A/B测试流程

一个完整的A/B test主要包括如下几部分:

全网最全最详细解释A/B Test是什么?_AB测试_05

1、分析现状,建立假设:分析业务,确定最高优先级的改进点,作出假设,提出优化建议。

2、设定指标:设置主要指标来衡量版本的优劣;设置辅助指标来评估其他影响。

目标是用于确定变体是否比原始版本更成功的指标。可以是点击按钮的点击率、链接到产品购买的打开率、电子邮件注册的注册率等等。

3、设计与开发:设计优化版本的原型并完成开发。

  • 对网站原有版本的元素进行所需的更改。可能是更改按钮的颜色,交换页面上元素的顺序,隐藏导航元素或完全自定义的内容。
  • 一旦确定了目标,就可以开始生成A/B测试想法和假设,以便统计分析它们是否会优于当前版本。

4、确定测试时长:确定测试进行的时长。

5、确定分流方案:确定每个测试版本的分流比例及其他分流细节。

6、采集并分析数据:收集实验数据,进行有效性和效果判断。

  • 针对指定区域的假设收集相对应的数据用于A/B test分析。
  • 此时,网站或应用的访问者将被随机分配控件或变体。测量,计算和比较他们与每种体验的相互作用,以确定每个用户体验的表现。
  • 实验完成后,就可以分析结果了。A/B test分析将显示两个版本之间是否存在统计性显著差异。

7、给出结论:

  • ① 确定发布新版本;
  • ②调整分流比例继续测试;
  • ③优化迭代方案重新开发,回到步骤1。

无论实验结果如何,需要利用试验结果作为学习经验生成未来可以测试的新假设,并不断迭代优化应用元素或网站的用户体验。

五、工作原理

在A/B test中,你可以设置访问网页或应用程序屏幕并对其进行修改以创建同一页面的第二个版本。这个更改可以像单个标题或按钮一样简单,也可以是完整的页面重新设计。然后,一半的流量显示页面的原始版本(称为控件),另一半显示页面的修改版本(称为变体)。

全网最全最详细解释A/B Test是什么?_数据_06

当用户访问页面时,如上图灰色按钮(控件)和箭头所指红色按钮(变体),利用埋点可以对用户点击行为数据采集,并通过统计引擎进行分析(进行A/B test)。然后,就可以确定这种更改(变体)对于给定的指标(这里是用户点击率CTR)产生正向影响,负向影响或无影响。实验数据结果可能如下:

全网最全最详细解释A/B Test是什么?_AB测试_07

六、实践案例

通过2个场景示例为大家展示如何分析、拆解一个业务问题,设定优化方向、评价指标并设计一个A/B实验来进行效果验证。

6.1 推荐策略A/B Test(一)

💡 实验的来源:通过分析当前业务问题、提出潜在的解决方案,形成一个「实验idea」

1. 背景简述

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

2. A/B test步骤

指标:用户点击(CTR)变体:新的推荐策略假设:新的推荐策略可以带来更多的用户点击。收集数据:以下B组数据为我们想验证的新的策略结果数据,A组数据为旧的策略结果数据。均为伪造数据。

3. 分析结果(Python)

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

from scipy import stats
import numpy as np
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])
print('策略A的均值是:',np.mean(A))
print('策略B的均值是:',np.mean(B))

# 策略A的均值是:6.416666666666667
# 策略B的均值是:9.75

stats.ttest_ind(B,A,equal_var= False)

# Ttest_indResult(statistic=1.556783470104261, pvalue=0.13462981561745652)
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.

很明显,策略B的均值大于策略A的均值,但这就能说明策略B可以带来更多的业务转化吗?还是说仅仅是由于一些随机的因素造成的。

我们是想证明新开发的策略B效果更好,所以可以设置原假设和备择假设分别是:

  • H0:A>=B
  • H1:A < B

scipy.stats.ttest_ind(x,y)默认验证的是x.mean()-y.mean()这个假设。为了在结果中得到正数,根据 scipy.stats.ttest_ind(x, y) 文档的解释,这是双边检验的结果。为了得到单边检验的结果,需要将计算出来的 pvalue 除于2取单边的结果(这里取阈值为0.05)。求得pvalue=0.13462981561745652,p/2 > alpha(0.05), 所以不能够拒绝假设,暂时不能够认为策略B能带来多的用户点击。

6.2 推荐策略A/B Test(一)

1. 业务背景

💡 实验的来源:通过分析当前业务问题、提出潜在的解决方案,形成一个「实验idea」

背景:该产品是一个汽车类App产品,发现App登录率偏低,通过转化漏斗定位问题为触发登录率过低,影响个性化服务的机会。

全网最全最详细解释A/B Test是什么?_数据_08

图片根据上面的分析,一个比较自然的想法,就是去提升触发登录率,也就是给未登录用户增加更多的登录入口。那么就面临两个问题:

  1. 在哪里加入口?
  2. 以什么形式加入口?

针对第一个问题,需要定位目前未登录用户的主要流量去向,在这些主要的流量场加入登录入口,效果是最好的。现有未登录可使用的功能,包括但不限于:关注、点赞、进入直播间、保存发布草稿、查看浏览历史等。通过用户路径对未登录用户的行为路径进行分析发现关注、点赞、查看历史等场景流量较多,可以尝试在这些环节加入登录引导。

2. 实验目标

💡说明:

  • 目标:明确「实验idea」最终想达成的业务目标是什么,根据目标来制定衡量指标
  • 衡量指标:用于评价目标是否达成的成功标准。且需要论证是因为施加了实验策略而达成的,因此指标和策略要有明确的业务因果性

至此,就形成了完整的 「实验假设」:预期通过xxx改进,可对指标A提升n%,从而为产品/用户带来xxxx价值。

目标:在不影响未登录用户使用体验的前提下,提升登录率,更好地为服务用户衡量指标:登录率实验假设: 通过在每个入口尝试不同的引导方式,可对指标「登录率」提升n%,从而更好的服务用户。

3. 实验设计

当下主流的登录引导由弱到强有:非阻断式弹窗/蒙层引导、半屏/全屏面板引导、全屏面板强制登录。针对不同入口,可以实验不同的登录引导方式。

实验模式:客户端编程实验实验受众:全体用户,不做任何过滤流量大小:根据样本量计算器计算可得,不同产品、业务形态差异巨大,保险起见在单组数量级过万实验时长:14天及以上实验版本

  • 对照组:线上样式(全屏面板强制登录)
  • 全网最全最详细解释A/B Test是什么?_数据_09

  • 实验组:新样式(半屏面板引导,增加引导说明)
  • 全网最全最详细解释A/B Test是什么?_AB测试_10

监控指标

  • 核心指标:登录率
  • 关注指标:登录触发、登录提交、登录成功三个环节的转化率

评估思路:「登录率」是成功指标

  • 显著上涨则说明方案有效果,可以直接上线
  • 显著下降则说明方案有负向影响,需要进一步拆解数据来分析原因
  • 无显著变化则说明没有明显作用,可以通过拆解用户分层、商品品类的数据来分析是什么原因导致的,如果发现有显著变化的敏感人群或敏感品类可以进一步施加策略做实验

七、一些tips

1. 先验性

通过低代价,小流量的实验,在推广到全流量的用户。

2. 测试时长

测试的时长不宜过短,否则参与试验的用户几乎都是产品的高频用户。

3. 分流/抽样

应该保证同时性、同质性、唯一性、均匀性。

  1. 同时性:分流应该是同时的,测试的进行也应该是同时的。
  2. 同质性:也可以说是相似性,是要求分出的用户群,在各维度的特征都相似。可以基于用户的设备特征(例如手机机型、操作系统版本号、手机语言等)和用户的其他标签(例如性别、年龄、新老用户、会员等级等)进行分群,每一个A/B测试试验都可以选定特定的用户群进行试验。

💡思考:如何判断是不是真的同质?可以采用AAB测试。抽出两份流量进行A版本的测试,进行AA测试,并分别与B版本进行AB测试。通过考察A1和A2组是否存在显著性差异,就可以确定试验的分流是否同质了。

  1. 唯一性:即要求用户不被重复计入测试。
  2. 均匀性:要求各组流量是均匀的。
  3. 数据科学性:数据科学性是指不能直接用均值转化率、均值点击率来进行AB test决策,而是要通过置信区间、假设检验、收敛程度来得出结论。
4. A/B测试只能有两个版本么?

A/B test不是只能A方案和B方案,实际上一个测试可以包含A/B/C/D/E/……多个版本,但是要保证单变量,比如按钮的颜色赤/橙/黄/绿/青/蓝/紫,那么这七个方案是可以做A/B测试的;但如果某方案在旁边新增了另一个按钮,即便实验结果产生了显著差异,我们也无法判断这种差异的成因究竟是谁。

5. 同一段时间内可以做不同的A/B测试么?

比如一个test抽取总体20%的流量做按钮颜色的实验,另一个test也抽取总体20%的流量做布局样式的实验。是否可行?

我认为是可行的。但要求多个方案并行测试,同层互斥。如果从总体里,先后两次随机抽取20%流量,则很有可能会有重叠的用户,既无法满足控制单变量,又影响了用户的使用体验。

  • 同层指的是在同一流量层中创建实验,在此层中创建的实验共享此层中的100%流量。
  • 互斥指的是在此层中,一个设备有且只能分配到此层多个实验中的某一个实验。

八、企业案例

火山引擎 A/B Test

字节的火山引擎已经开放了比较完整的🔥🔥🔥 A/B 测试平台

全网最全最详细解释A/B Test是什么?_Test_11

整体分为实验管理、指标管理、实验报告、高级分析。

全网最全最详细解释A/B Test是什么?_A/B Test_12

  1. 实验管理模块
  2. 全网最全最详细解释A/B Test是什么?_A/B Test_13

  3. 指标管理模块

核心指标:用来决策实验功能是否符合预期的「直接效果指标」 也叫「成功指标」。只可以设置一个指标为某个实验的核心指标,可在实验报告里面查看实验数据。

全网最全最详细解释A/B Test是什么?_AB测试_14

3.实验报告

全网最全最详细解释A/B Test是什么?_Test_15

4. 高级分析

全网最全最详细解释A/B Test是什么?_Test_16

58招聘推荐系统 AB Test

58招聘的AB实验框架的推荐策略配置及AB实验框架支撑着他们每天80多个推荐位,线上20多个AB实验的日常迭代。

全网最全最详细解释A/B Test是什么?_Test_17

推荐的整体步骤清晰,层次分明,为了快速高效验证离线分析成果,策略算法同学经常会在不同层级并行迭代实验。因此要求实验不互相干扰,每层的实验流量正交,评估效果准确有效,框架需要支持分层实验的功能。

纵向来看,流量域分为独立实验区和分层实验区。独立实验区不支持分层实验,针对单一变量进行实验。而分层实验区根据推荐流程分为多层:召回层、补足层,过滤层、排序层、资源控制层。每一层均可配置多组实验,层与层之间互不干扰。其中召回层会整合多个数据源的职位数据,通过实验标识回传以简单轻量的方式支持下游服务的AB实验需求。

通过可视化平台配置AB实验参数(推荐位,实验号等)即可实时监控各个常用核心数据指标的实验效果。

下图中可以清晰得看到一个实验从开始到AA验证的整体数据变化情况。

全网最全最详细解释A/B Test是什么?_迭代_18

美团 A/B test平台

实验配置模块,用户可以基于实验前提出的假设、定义的成功指标快速创建实验,并基于特定的分流策略完成分流配置;

全网最全最详细解释A/B Test是什么?_Test_19

分流以及埋点上报模块,提供JAR包接入的形式,异步获取实验配置进行本地分流计算和埋点上报;

在线分析模块,依据用户在实验配置管理模块选取的用于说明实验效果的指标、分流埋点上报模块记录的日志,自动地产生各实验的实验报告,供实验观察者使用,然后根据实验效果帮助他们作出正确的决策。

传统A/B实验的分流方式,无法保证分出的两个群组实验组和对照组的流量都是无差别的,无法避免因流量分配不平衡而导致的A/B群组差异过大问题,很容易造成对实验结果的误判。

为满足不同业务场景的诉求,美团的A/B平台建设采取了多种分流策略:

全网最全最详细解释A/B Test是什么?_数据_20

针对策略之间的相互影响、请求不独立场景下的A/B实验,采取限流准入的分流方式,针对不同的实验,选取不同的分流因子。

在实验前,通过AA分组,找出无差别的实验组和对照组,作为实验分流配置的依据,这种分流方式要有一套完整刻画流量因子的指标体系,只要刻画流量因子的指标间无统计显著性,就认为分出的实验组和对照组无差别。

贝壳找房A/B平台

AB平台架构主要包括web层、api层、数据层、存储层,核心分流服务构成。

全网最全最详细解释A/B Test是什么?_Test_21

将流量的实验分组信息与用户行为日志做关联,分析实验的指标数据。实验效果分析包括实时数据分析和离线数据分析:

全网最全最详细解释A/B Test是什么?_AB测试_22

伴鱼技术A / B Test

全网最全最详细解释A/B Test是什么?_数据_23

  1. 平台接入方(即实验代码实现的位置),提供服务端和客户端两种接入渠道。
  2. 平台内部实现,分为「分流」和「管理」两个部分。分流模块主要是供在线业务调用,通过分流模型,得出分流结果。管理模块则是实验元数据、实验效果数据等信息的管理后台,提供可视化的操作界面。
  3. 周边数据配套设施,包括实验分流数据的上报、采集,指标数据的聚合计算。涉及指标库以及数据处理等系统。

一条实验流量从进入系统到最终分配方案需要经历三个阶段:流量过滤、同层实验分配、实验内部方案分配。这些阶段应当在平台内部分流模块中闭环实现。

九、补充知识

上面只是从应用的角度介绍来AB test的一些内容,当收集好数据之后做推断性统计分析可能需要具备以下知识:

  • 点估计
  • 区间估计:正向的推断统计
  • 中心极限定理
  • 假设检验(较为核心):假设检验可以理解为反证的推断统计,关于假设检验本身,你可能还需要知道小概率事件、t分布、z分布、卡方分布、p值、alpha错误、belta错误等。

十、拓展阅读