查看原文
其他

网易大数据|互联网产品决策秘笈: AB测试

焦成远 网易传媒技术团队 2020-10-29

    1972年百事可乐公司举办了一个名为百事挑战的营销活动,百事工作人员在一张桌子上,放了两杯没有标签的可乐,一杯是百事,一杯是可口可乐。购物者被邀请尝试两杯可乐,然后选择喜欢哪一杯,接着工作人员会告诉你哪杯是百事哪杯是可口可乐。结果,57%的人选百事,43%选可口可乐。这个测试帮助百事树立了市场形象,提高了与可口可乐在货架上的竞争力。这就是AB测试的原身,双盲测试。

 

什么是AB测试?


    AB测试也叫对照实验或分桶实验,简单来讲就是为同一个目标设计多个方案,在同一时间让一部分用户使用A方案,一部分用户使用B方案。记录分析用户的使用情况,根据分析结果比较得出哪个方案更加优秀。

    举个栗子,在对文章的标题文案选择测试中,新颖的标题会更加引起人们的注意,提高用户的点击欲望,从而增加文章的点击率。

    但不要认为AB测试真的只会有A方案和B方案,AB测试只是一种叫法,你可以同时上线N个方案进行测试。


AB测试的基本步骤


AB测试通常是一个反复迭代的过程,它的基本步骤包括:

  • 设定AB测试的目标

  • 设计多个优化方案

  • 确定参与实验的方案与分流比例

  • 进行线上测试

  • 收集用户数据进行数据分析和效果判断

  • 根据测试结果发布新版本或添加新方案继续测试

    

    AB测试强调的是同一时间段内,用户成分相似的分组测试。时间的统一性避免了时间因素带来的误差及影响;成分相同则使地域、性别、年龄等等其他不确定因素对统计结果的影响降到最低。


AB测试的几点最佳实践


  • 确立科学的选择优化指标

    AB测试的最终目的,是通过测试手段找到更优秀的产品方案,而科学的选择优化指标,是一个AB测试的基础。一般来讲,能够通过AB测试来评估的指标只能是**率或者人均**,如点击率,进入率,人均时长,人均刷新等。而一些绝对数字如UV,PV,打开人数等,由于用户分组的随机性带来的不确定因素,无法进行评估。


  • 用户分组的随机与固定

    为用户在每一个实验中,随机分配一个实验分组,且用户每次访问时,都应该进入相同的实验分组。随机性保证了每个实验分组的用户成分相似,分组固定保证了用户体验前后一致。一个好的分组策略很重要,确保了AB测试分析数据的可信度和科学性。


  • 尽可能的保证每个实验分组的人数

    在不影响其他实验的前提下,尽可能为每个实验分组提供更多的用户数据,这将与实验的成功率成正比。假设某个页面的UV在5000左右,然后我们为每个实验分组分配的流量比例为2%,那么一天差不多会有100个UV进入实验分组,实验的结果很容易受到某些异常样本的影响。譬如说用户王老五每天都购买很多高价值的东西然后恰好分在了实验分组中,那么老王的购买行为就可能带偏整个实验分组的统计结果。如果实在没办法保证用户数,那么延长实验时间,也未尝不是一个好办法。


  • 科学的分析数据

    在一些初级的AB测试中,开发人员通常只根据某个指标几日来的平均值作为实验好坏的参考和依据,但这并不是最科学的分析方法。科学的分析数据需要采用很多专业的统计学方法来做出判断。通常使用方差分析或T检验等手段,对实验数据进行评估。这些方法能够有效的规避大部分由时间和分组随机性带来的数据波动,得到最准确的评估结果。


AB测试架构


  • 单层实验框架

    单程实验框架简单粗暴,通过一个固定的Hash函数对用户的唯一标识进行Hash取模,进行分桶,将用户均匀的分配至100个实验桶中,当然,如果你的用户量足够大,甚至可以划分成1000个桶来进行实验。单层实验架构保证每个实验都是在互斥状态下进行,每个用户同一时刻只会参与一个实验,数据分析比较容易。虽然单层实验框架是可行的,但同时也存在几个问题

  • 扩展性差,由于实验桶有限,只能同时进行少量实验。但目前的互联网产品更新迭代速度极快,经常有大量的创新需要进行AB测试,单层框架在一定程度上限制了迭代速度。

  • 流量饥渴问题,在实践单层实验框架时,经常会发生以下状况:算法组先上线了多个实验测试新算法,紧接着广告组也需要进行AB实验来观察用户的点击效果,但由于前面的实验占用了大量流量,后面创建的实验只能使用很少的流量,甚至没有流量可用,需要排队实验。

  • 多层重叠实验框架

    当前最流行的多层AB实验框架,莫过于谷歌提出的多层重叠实验架构,市面上大部分的AB测试产品,基本都是基于这个框架和理论搭建而成的。

    多层重叠实验框架解决了单层实验框架的问题:允许多个实验并行进行,具有很强的扩展性与灵活性。搞清楚下面几个概念,你也可以轻松的搭建多层重叠实验框架。

    域是对用户流量的一种纵向划分,将流量垂直的切分成多块,多个域中的实现相互没有干扰,保证实验纯度。

    层是系统参数的一个子集,是对域流量的一个横向划分。每个层使用独立的Hash函数对用户进行分桶,使得多个层之间的用户流量是正交的。如下图所示,每个层中的实验对其他层的影响都是正交的,参与层A中实验X的用户,均匀的分散在层B中,使层B中的实验也可以独立进行分析,并得到准确的分析结果。

    层内互斥:

    层间正交:

  • 变量

    变量是AB测试中最核心的元素。配置实验时,可以选择一个或多个变量进行实验,同时会为每一个实验分组设置一个变量值。同一个变量在两个分组中拥有相同的变量值我们称为AA实验,否则就是AB实验。AA实验一般用来检验实验分组是否合理,理想状态下,作为AA实验的两个实验分组的统计数据应当是基本一致的。

    下图为仅对北京男性生效的受众分组:

  • 白名单

    白名单功能通常是为测试人员准备的。如果为某个实验分组添加了白名单,那么白名单中的用户将跳过流量配比和受众条件,直接获得这个实验分组的变量值,但不会计入统计数据。



技术实现


    解释清楚了AB测试的基本概念和实验框架后,再为大家介绍一下AB测试平台在技术架构上的一些关键节点和实现。

  • 系统架构

    • ‍服务端整体由Java实现,使用DSF框架作为服务注册中心对外暴露服务。

    • 客户端主要提供Java和C++两种语言的SDK与服务端进行通信,定时获取实验配置

    • 存储方面使用MySQL结合Redis缓存,提高系统响应速度与可用性

    • 通过SDK收集接入方数据,并存入HDFS,通过离线计算写入业务表

    • 独立部署R服务,提供数据分析接口

  • 云计算模式

    一个AB测试平台需要服务全公司所有的应用,从这个角度而言,使用SaaS模式来构建AB测试平台是一个很好的选择。

    1. 云端集群部署,滚动式的升级和部署,可以在用户无感知的情况下对平台进行升级和改造

    2. 多租户数据隔离机制,一个应用即为一个租户,将不同应用的实验数据进行隔离

    3. 多角色权限控制,一个准备进行AB测试的团队一般有以下几种用户角色,应用管理员,实际操作者,数据分析师以及希望看到AB实验效果的只读用户。每个角色各司其职,避免由于误操作引起的线上故障。

  • 嵌入式SDK

    AB测试相对于线上产品来说,属于外挂系统,是正常业务逻辑以外的额外性能开销,所以进行AB测试的前提是避免对线上产品造成不良影响,尤其是性能和可用性方面。面对高并发场景,直接通过服务调用获取实验数据显然是不合适的。而嵌入式SDK的方式是AB测试技术实现的最佳实践。

  1. 通过HTTP 长连接技术为客户端SDK与AB平台服务建立通信通道

  2. 由于AB测试并不要求强实时性,因此我们可以定时拉取(如30秒)全量实验配置数据,并缓存在客户端内存

  3. 提供API直接从内存中获取用户的分桶及实验配置数据,不影响线上产品的性能

  4. 服务端与SDK端建立两层容错机制,避免由于AB测试平台的异常情况导致线上产品发生异常或崩溃

    这种方式的弊端也很明显,面对不同编程语言的应用,需要单独提供相应语言的SDK。但SDK中的运算逻辑相对简单,开发成本低,依然是利大于弊的最优解。

  • MurmurHash3

   MurmurHash是当前比较流行的一种均衡性Hash算法,其最新的版本为MurmurHash3,它提供32位或128位的散列值。

/** Returns the MurmurHash3_x86_32 hash. */public static int murmurHash3_x86_32(byte[] data, int offset, int len, int seed)

    dataseed是它的两个主要的参数,data是将要进行Hash的原始值,seedHash因子,使用不同的Hash因子将会得到不同的Hash结果。这种方式完美契合了AB测试所需要的Hash函数:将用户的唯一标识作为data传入,每个实验层拥有一个独特且唯一的数字作为seed。这样既保证了用户分组的随机性,同时也保证了多个层之间的正交关系。

  • 数据降噪

    为了获得更稳定的实验分析结果,需要稳定的数据来支持。所以在进行AB实验数据分析之前,需要先对收集上来的用户数据进行降噪,排除异常数据。介绍一种常用的降噪手段:

    箱形图(英文:Box plot),又称为盒须图、盒式图、盒状图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因型状如箱子而得名。在各种领域也经常被使用,常见于品质管理,快速识别异常值。

    箱形图最大的优点就是不受异常值的影响,能够准确稳定地描绘出数据的离散分布情况,同时也利于数据的清洗。

    假设我们一组序列数为例: 1215, 17192023252830333435, 3637 (14项),通过此组数据了解这五大因

1. 下四分位数Q1

a. 确定四分位数的位置。Qi所在位置= i(n+1)/4,其中i=1,2,3。n表示序列中包含的项数。

b. 根据位置,计算相应的四分位数。

例中:

Q1所在的位置=(14+1)/4=3.75,

Q1=0.25×第三项+0.75×第四项=0.25×17+0.75×19=18.5;

2. 中位数(第二个四分位数)Q2

中位数,即一组数由小到大排列处于中间位置的数。若序列数为偶数个,该组的中位数为中间两个数的平均数。

例中:

Q2所在的位置=2(14+1)/4=7.5,

Q2=0.5×第七项+0.5×第八项=0.5×25+0.5×28=26.5

        3. 上四分位数Q3

计算方法同下四分位数。

例中:

Q3所在的位置=3(14+1)/4=11.25,

Q3=0.75×第十一项+0.25×第十二项=0.75×34+0.25×35=34.25。

4. 上限

上限是非异常范围内的最大值。

首先要知道什么是四分位距如何计算的?

四分位距IQR=Q3-Q1,那么上限 = Q3+1.5*IQR

5. 下限

下限是非异常范围内的最小值。

下限 = Q1-1.5*IQR

    通过上下限对数据进行过滤后,得到的就是相对比较稳定的样本数据。为后续的分析打下基础。

  • 数据分析

    科学的AB实验需要使用科学的统计学方法来对实验结果进行评估。行业内进行AB实验评估的方法主要有两种,方差分析和T检验,是基于统计学推断结论的方法,属于假设检验,由样本推断总体,用于判别两组或多组数据均着是不是具有显著性的差异。网易昆仑AB试验系统中有三种实现方法,可选择使用。

  1. 两样本T检验:适用于判断两组数据均值是不是一样的,是不是真的有显著性的差异。

  2. 单因素方差分析:单一因素多个总体均值的检验。适用于实验的影响因素只有一个的情况,比如只有实验分组这单一因素。

  3. 双因素方差分析:与单因素方差分析的区别在于影响因素的数量,可以计算多个因素影响下的结果检验。如根据时间和实验分组这两个因素进行分析,得到各因素对结果的影响。

    P值是这几种检验方法的最终结果,也是显著性的判断依据。P值越小,说明两组数据的差异越显著。通常以0.05作为判断标准,当P值小于0.05时,表示两组数据的差异明显。如图六所示,两实验分组数据的检验P值为0.04,说明两组数据差异明显。同时实验分组的均值大于对照组的均值,得出显著提升的结论。


    目前网易传媒已经基于上述的AB测试架构,搭建了一整套完整的AB测试技术体系,大量的实验也在平台中有条不紊的进行着。虽然作为AB测试数据支持团队,免不了要经常和各个产品线反复沟(shuai)(guo)实验指标结果,但我们仍在努力完善和优化我们的AB测试框架,提供更加科学和严谨的数据服务。


鸣谢:感谢数据团队焦鹏和孟秋提供的统计学专业相关内容支持。


作者简介



焦成远  2018年加入网易传媒,高级Java开发工程师,目前在后台技术中心负责Java后端开发,主要负责后台通用系统以及支撑系统的开发与设计。

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存