兴盛优选大前端是如何做AB实验的

1,802 阅读11分钟

1.项目背景

过去,在兴盛优选前端设计改版需求中,我们没有一条简洁而高效的AB实验接入方案。大多数前端在接到AB需求,只能由业务直接调用服务端接口自行维护返回的数据状态,久而久之问题就暴露出来了:

◇首先前端开发者需要花大量的心思去处理AB的逻辑;

◇此外客户端实验的作用范围仅局限于端内,并不能覆盖前端所有的场景,比如外投,小程序或PC等等;

◇数据的精细度不足,不管是服务端实验,还是客户端实验都是页面维度的,而业务方常常需要看更细粒度的指标,比如页面上某个模块的点击率,前端在数据采集上具有天然的优势;

因此,打造一套标准化的简单高效的AB实验链路,是我们做这件事的初衷。

2.核心功能介绍

什么是A/B测试?

A/B 测试是一种产品优化方法;为同一个优化目标制定两个方案,让同一部分用户中的一部分用户命中 A 方案,同时另一部分用户命中 B 方案,统计并比较不同方案的点击率、转化率等数据指标,通过不同方案的数据表现,在确定数据表现通过假设检验后,决定最终方案的实验方法。

2.1 分流算法

picasso平台的分流算法采用的是字符串hash取模入桶的方式来实现,如下图所示:

关于流量分配

流量分配是A/B系统中的重要组成部分,举个栗子,我们新建一个实验:

1、实验分为实验组A和对照组B

2、预先分配流量为 50% :50%,即100人中 50人看到实验组A,另外50人看到对照组B

如上图所示就是一次用户分流的简单示例,在上述环节中,唯一变量为用户guid-hash结果,我们该如何保证变量的平均分配呢?

关于字符串hash算法

Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。

这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。

picasso使用的是一种常见的hash算法:DJB2算法来实现字符串hash。该算法可以将字符串输出为一串随机的数字,达到一种伪随机的效果,并且能保证字符串不变化的情况下,每次hash都能得到相同的结果。在获得数字结果之后,按照预先设定的流量比率,把用户分入到流量分桶当中,即可实现按照流量分流。

上图为picasso平台压测结果,10轮1W次不同guid请求,实验组分配比率为30% : 70%,最终10W次请求结果实际分配比率为70.005%,误差率为5/100000,可以说该算法的随机分配率基本符合要求。

2.2 流量复用/正交实验 & 互斥实验

随着picasso平台上的实验越来越多,在设计多个实验的过程中,经常会遇到下面两种情况:

1、同时创建了实验A和实验B,但是它们是同时运行的,这个时候我怎么确定实验A的数据不会影响到实验B的数据。

2、同时创建了实验A和实验B,但是他们是同时运行的甚至效果之间是相互排斥的,这个时候,我不想要用户同时参加两个实验。

其实这两个问题都可以归纳到两个概念来理解,流量复用/正交实验与互斥实验,接下来我们来看下什么是流量复用/正交试验。

2.2.1 流量复用/正交实验

首先来讲一下流量复用/正交实验,这个概念的提出主要是为了让不同实验的结果之间不产生互相影响,先来张图看一下,当没有流量复用的时候,多个实验同时运行会产生什么样的结果。

当一个用户命中第一个实验A的实验组之后,他参与的其他所有实验都会走到对应的左半区,这种情况下会导致多个实验的结果之间出现强相关,实验结果不能准确反应用户的选择。在这种情况下,为了防止多个实验之间的流量不复用导致实验结果失真的问题,便有了流量复用/正交实验的概念产生。

在流量复用的情况下,当用户命中了实验A中的A组之后,再次进入实验B的时候,重新按照实验B的流量分配规则重新分配流量,用来保证实验A的A组用户能够按照实验B的流量分配规则进入B实验的不同分组。我们可以发现,因为实验A-A组的一半流量在实验B-A中,另一半流量在实验B-B中,因此即使实验A-A组的策略会对实验B产生影响,那么这种影响也均匀的分布在了实验B的两个组之中;

在这种情况下,如果实验B-B组的指标上涨了,那么就可以排除实验B-B是受实验A-A影响才形成上涨。这就是流量复用/正交实验存在的意义,现在picasso平台上的所有并行实验全部遵循流量复用原则!

2.2.2 互斥实验

互斥实验的概念相对流量复用就简单一些了,互斥组中的所有实验都不会共享用户,如果一个用户命中了实验A,就不会命中该互斥组中的其他实验。

举例,你要同时做按钮颜色和按钮形状的实验,就需要将两个实验加入到一个互斥组中。

一个互斥组中的实验,流量都是不共享的,但是不同的互斥组之间采用的是流量复用的规则,也就是互斥组之间不会互相影响。

2.3 多场景与自定义规则

在介绍完分流算法与流量复用规则之后,一套基本的A/B流程就可以完成了,但是问题接踵而来,简单的随机分流没办法满足精准定位用户的要求了。

2.3.1 自定义规则

首先,为了满足精准定位用户的功能,picasso完成了自定义过滤规则的能力,过滤条件可配置。条件由五元组构成,包括:[Area]、[Key]、[Value]、[Operator]和[Type]。Key、Value 分别对应实验的条件字段和期望值,Operator 表示比较表达式,Type 表示数据类型,Operator 和 Type 是绑定的。由于 Operator 表达的语义有限(以 “大于” 比较表达式来说,字符串是无法比较的,只有数字和日期值得比较),因此增加了 Type 的概念。每种条件类型对应一系列比较表达式。绝大部分场景字符串type即满足我们的需求。Area 域,由于目前平台只支持使用http请求访问,所以在访问时需要区分过滤规则是对headers还是body进行运算。

Operator与Type取值和规则如下:

目前picasso平台支持最多11种过滤规则,基本可以满足普通的用户区分的功能,并且将自定义规则的执行程序封装为一个简单的RE规则引擎。到这里,picasso平台的基本分流逻辑就已经明晰了。

2.3.2 多场景实验

产品要上线一个新功能,但是属于破坏性功能,在不能保证功能有效的前提下自然是不能大批量上线的,以目前公司的情况是可以选择客户量较小的省区来进行实验的。这样也就衍生出了多场景与自定义规则的需求。举个栗子:

1、江西区域 50%用户进入实验 25%进入A组 25%进入B组

2、同时,贵州区域所有用户进入实验,并且所有用户进入A组

首先来简单分析一下几个关键变量,首先是省区概念,picasso平台需要对用户所属的省区进行分辨。第二则是50%与100%流量,picasso还需要对不同省区的用户使用不同的流量分配策略。如果以前面展示的自定义规则与流量分流逻辑是无法满足这种实验情况的,在此条件下,picasso提出了多场景实验的概念。

1、新增场景概念,每个场景可以单独设置自己的自定义规则和流量分配

2、场景与场景之间的关系为or关系

3、场景本身带有排序与权重

以多场景的方式来解题上面的栗子就很简单了,新建两个场景分别对应江西50%和贵州100%,就能保证实验分流结果了。

2.4 自定义指标与报告

2.4.1 指标

在互联网行业中,指标是指反映某种事物或现象,描述在一定时间和条件下的规模、程度、比例、结构等概念,通常由指标名称和指标数值组成。

指标,可以分为简单计数型指标和复合型指标。

1、 简单计数型指标是指可通过重复加1这一数学行为而获得数值的指标,如UV(Unique Visit , 独立访客数)、PV(Page View,页面浏览量)。

2.、复合型指标是由简单计数型指标经四则运算后得到的,如跳出率、购买转化率。

picasso平台实现了一套完整的自定义指标功能,可以从事件、过滤、计数、求值、求和等多个维度自定义指标,从而达到最准确的实验效果。

通过一系列配置,基本可以完成任何类型的指标配置。

目前picasso平台支持单事件指标和转化率符合指标两种类别,支持包括均PV、UV、求和、求中位数、求平均值在内的总共14种数据计算方式,支持完全自定义的数据过滤指标,所有的参数均可采用自定义配置,或者抓取现有的线上数据进行筛选。并且对指标进行了分级,可以完全复用在不同实验和项目之中。

2.4.2 实验报告

在配置完指标之后,对应的实验报告会立刻生成。

在对应的实验报告页面就可以按照时间维度查看到对应的指标图表,对应指标的横轴为时间,纵轴为指标关注的数据,每条线对应不同的实验分组。

如上图所示,可以直接得出更优秀的实验分组。然后针对性的修改流量分配,择优而行。并且实验报告支持分享功能。

3.整体架构

讲完核心功能,最终picasso的整体架构已经成型了。

4.案例展示

目前picasso上线已经有4个月了,目前主要对接用户端小程序,为用户端小程序的营销策略提供了多次有效的实验数据和配置。

已覆盖推荐、广告、搜索、UI、产品功能等业务场景,提供了从实验创建、指标计算、统计分析到灰度发布,最终评估上线等贯穿整个实验生命周期的服务。可以帮助业务在快速迭代的路上,大胆假设、小心求证。

1、分类橱窗推荐

2、天降神券

5.未来方向

不积跬步无以至千里,不积小流无以成江海。picasso平台的功能和体验还远远称不上优秀,目前团队主要向着以下几个方向前进:

1、更简便的实验配置与更详细的报告体验。

2、接入用户分群功能,实现更加精准,更加丰富的用户精确细分。

3、完善统计学检验,置信区间计算,保证实验效果真实有效。

4、维持稳定的服务场景,持续提供稳定的高可用的服务能力。

5、后续picasso团队将会提供更多的功能,更好的体验,以帮助业务快速迭代,实现营销增长,共同进步。

关注兴盛优选技术官方公众号,解锁更多干货文章