Fork me on GitHub

搭建企业级 AB/Testing 平台实践

什么是AB测试?

在现实的产品迭代场景中,我们经常会遇到多个方案的选择的问题,在这里迭代的可以是UI界面,可以是算法策略。简单来说就是为同一个产品目标制定两个方案,一部分用户走A方案,另一部分走B方案,然后通过日志记录用户的使用情况,并通过结构化的日志数据分析相关指标,如点击率、转化率等,从而得出哪个方案更符合预期设计目标,并最终将全部流量切换至符合目标的方案。

AB测试的价值?

  • 为评估产品优化效果提供科学的证据,量化收益
  • 判断方案的好坏,不断迭代优化,提升企业变现能力
  • 科学性的实验能够提升组织在产品层面的决策能力

企业级AB/Testing平台实现

整体架构

image.png

客户端实验权衡

abtest
实验配置下发是指 各变量的配置,配置描述了变量的行为应该是怎样的。

a) 最简单的架构。

优点: 实现简单,服务端实验和客户端实验都可采用

缺点: 业务需要关注AB的显式调用; 每次调用都会有一个时间delay(除非找个恰当的时间 否则影响用户体验)

b) 利用“边缘网络”,一般是一个负载均衡服务器的角色,这个角色还提供了分流的功能

优点:符合一般网站的架构,业务无需关注显式的AB调用

缺点:不合适客户端实验,因为客户端很多交互发生在本地而不发起网络调用

c) SDK

优点: 业务无需关注显式的AB调用。非常适合于客户端实验和服务端实验。在前端各个组件间不需要传递AB变量,随用随调(有缓存)

缺点: 实现较为复杂,需要引入前端人力

实验期间的目标

实验设计时的目标:

  • 希望尽快得到实验结论,尽快决策
  • 希望收益最大化,用户体验影响最小
  • 希望实验结论可靠

多实验存在相互影响的实验设计

多团队合作中,经常遇到多业务交集的问题,以我近期主要负责的春节活动为例,老板会问:

  • 春节活动-明星红包子活动贡献了多少 DAU?春节活动-家乡卡子活动贡献了多少 DAU?
  • 春节活动总共贡献了多少 DAU?

严谨一点,我们采用了 AB 实验的方式核算,最终可能会发现一个问题:春节活动各个子活动的贡献之和,不等于春节活动的贡献,为什么呢?

  • 有的时候,活动 A 和活动 B,有着相互放大的作用,这个时候就会 1+1 > 2
  • 还有的时候,活动 A 和活动 B,本质上是在做相同的事情,这个时候就会 1+1 < 2

这个时候,我们准确量化春节活动的贡献,就需要一个【贯穿】所有活动的对照组,在 AB 实验系统中通俗称作贯穿层

这样分层后,我们可以按照如下的方式量化贡献

  • 计算春节活动的整体贡献:实验填充层-填充层填充组 VS 贯穿层-贯穿层填充组
  • 计算活动 A 的贡献:活动 A 实验层中,实验组 VS 对照组
  • 计算活动 B 的贡献:活动 B 实验层中,实验组 VS 对照组

业务迭代的同时,如何与自身的过去比较

上面谈到了【贯穿层】的设计,贯穿层的设计其实不但可以应用在多个活动的场景,有些场景,我们的业务需要和去年或上个季度的自身对比,同时业务还不断在多个方面运用 AB Test 迭代

类似与上面这种层次设计,在推荐系统中较为常见,在某一些产品或系统中,贯穿层不能够完全没有策略,那么采用去年或上个季度的策略,代表着基准值,从而量化新一个周期的增量贡献

我们可以量化:

  • 每个小迭代对整个系统的贡献:实验层中的实验组 VS 对照组
  • 周期内,系统全部迭代与上个周期的比较:实验填充层 VS 贯穿层 1(或贯穿层 2)
  • 同时,可以量化去年策略的自然增长或下降,以衡量旧有系统是否具有长期的适用性(作为系统设计者,更应鼓励设计具有长期适应性的系统):贯穿层 1(上个季度的策略)VS 贯穿层 2(去年的策略)

参考

如何设计一个 A/B test?


本文地址:https://www.6aiq.com/article/1596678395466
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出