在字节,A/B 实验是这么做的!

发布时间:2022-01-16 20:50:19

以上图图示为例,假设我们有 100 万用户要进行 A/B 测试:

先选定目标受众,比如一线城市的用户。

A/B 测试不可能对所有用户都进行实验,所以要进行科学抽样,选择小部分流量进行实验。

抽样之后需要对样本进行分组,比如 A 组保持现状,B 组的某一个因素有所改变。

分组之后在同一时间进行实验,就可以看到改变变量后用户行为的变化。

再根据对应实验目标的指标,比如点击率的高低,来评估实验的结果。

以上就是我们对 A/B 测试的定义。

目前,A/B 测试已被 Google、Facebook、亚马逊等大型互联网公司广泛采用;字节跳动更是在 2012 年成立之初便开始使用 A/B 测试,公司内部一直流传一句话:一切皆可 A/B 测试。

A/B 测试在字节跳动已是非常基础的设施和文化,目前,字节跳动日新增实验 1500+,那我们为什么要做 A/B 测试呢?主要有 3 点原因:

  1. 风险控制:小流量实验可以避免直接上线效果不好造成损失。其次,实验迭代的过程中,决策都是有科学依据的,可以避免系统性的偏差。

  2. 因果推断:我们相信 A/B 实验中的优化和改变最终能影响到线上数据以及用户的行为。在这个前提下,A/B 测试就是最好的因果推断工具。

  3. 复利效应:A/B 测试是可以持续不断进行的实验,即使一次实验提升的效果不大,但是长期下来复利效应的积累会产生很大的变化和回报。

A/B 测试系统实现

了解了我们为什么要做 A/B 测试,下面我们来看一下火山引擎的 A/B 测试系统是如何实现的。
在字节,A/B 实验是这么做的!

上图是火山引擎 A/B 测试系统的架构示意图,整体架构分为几层:

  • 运行环境层:在最底层,服务可以运行在容器内,也可以运行在物理机上。

  • 基础设施层:会用到关系型数据库和键值对。因为 A/B 测试要处理很大的数据量,这一层也会使用离线和实时的大数据组件。

  • 服务层:包括实验所需的分流服务、元信息服务、调度服务等。在 A/B 测试中我们也需要标识用户,因此这一层有设备服务。为了提供多种数据查询,还有 OLAP 引擎。

  • 业务层:包括实验管理、指标管理、Feature 管理、评估报告等。

  • 接入层:包括 CDN、网络防火墙、负载均衡。

  • 应用层:提供管理后台控制实验、查看报告等,SDK 调用。

下面介绍几个实验流程的实现:

客户端实验参数传递及生效过程

在字节,A/B 实验是这么做的!

客户端实验的流程如上图所示:

  • 业务方开发策略,确定实验内容;

  • 枚举策略中的映射关系并在客户端实现映射关系;

  • 创建并开启实验;

  • 客户端已经集成了火山引擎 A/B 测试系统的 SDK,向 A/B 测试系统请求分流服务,判断用户命中哪些实验哪些版本,下发参数;

  • 客户端从 SDK 取到参数,进行相对应的流程完成实验。

服务端实验参数传递及生效过程

服务端的实验和客户端类似:

在字节,A/B 实验是这么做的!

  • 设计实验;

  • 服务端实验的 SDK 是跟业务系统比如服务端集成在一起。客户是从其他 C 端用户直接请求业务的服务端,该服务端会在本地 SDK 做决策;

  • 决策完之后将参数下发到下游,使策略生效;

统计分析实践

在统计分析中,我们总结了一些有用的实践经验:

  • 确定业务的指标体系:可以从宏观/微观、长期/短期、横向/纵向三个角度建设指标体系。

  • 分类检验:对指标进行置信度计算的时候,并不会每次都用同一套方法,而是针对不同的指标类型(包括转化类、人均类、CTR 类等)进行不同的建模采用不同的方法。

  • 统计修正:如果一个实验开了多个组,可能犯了多重比较的错误。还有时开完实验之后每天都会查看结果,这就犯了连续观测的错误。所以在实践中需要有一些统计修正的方法来修正行为。

  • 基于叶贝斯体系的探索:区别于经典的假设检验,我们也在探索基于叶贝斯体系,如何评估实验效果,降低面向用户使用时候的理解门槛。在智能流量调优、模型超参数搜索等场景下有具体落地。

这里也跟大家分享一些 A/B 实验设计背后的思考:

  • 避免过度曝光:A/B 实验中有一个很关键的点是决策哪些样本应该进入实验。如果所有打开应用的人都能命中实验,实验结果就不会很明显。

  • 进组和出组:假设我们对北京的用户进行了实验,有些人出差或者旅游离开北京之后还能命中实验吗?我们可以把这个决策留给实验者,让实验者自己决定是进组还是出组。

  • 和 Feature Flag 的珠联璧合:实验之前可以把能进行实验的内容抽象成 Feature Flag,简单理解成功能开关。实验完成之后的上线或者重复实验,也可用 Feature Flag 进行管理。

字节跳动 A/B 测试最佳实践

在字节跳动,A/B 测试已经是一种企业文化,大家都认