乐趣区

关于ab测试:从不均匀性角度浅析AB实验-京东云技术团队

作者:京东批发 路卫强

本篇的目标是从三个不平均性的角度, 对 AB 试验进行一个认知的遍及, 最终着重讲述 AB 试验的一个广泛的问题,即试验准确度问题。

一、AB 试验场景

在首页中,咱们是用红色基调还是绿色基调,是采纳门店小列表外 + 商品 feed(左图),还是采纳门店大列表囊括商品 feed(右图),哪种更吸引用户浏览下单呢,简略来解决让 50% 的用户看到左图成果,让 50% 的用户看到右图成果,最终通过点击量,单量等指标进行比对得出结论,这是典型的 AB 试验场景

二、AB 试验的定义

A/ B 试验就是针对想迭代的产品性能,提供两种不同的备选解决方案,而后让一部分用户应用计划 A,另一部分用户应用计划 B,最终通过试验数据比照来确定最优计划。

从定义里咱们就可以看进去, 最直观的一个概念, 就是用户的分流, 此时就波及到分流人数是否平均的问题, 即人数比例的平均性。

三、AB 中的三个不平均

1、人数比例的不平均

目前 AB 试验的分流外围算法是通过的哈希算法,假如咱们按用户名做为分流因子,应用 murmurhash 算法,以 100 桶制为例,确定一个人的地位的算法就是

// 将用户名通过 hash 算法计算出一个整数
int hashNum = MurmurHash3.murmurhash3_x86_32(useName)
// 整数值对 100 取模
int bucket = hashNum % 100;

当咱们定义一个试验两个策略的人数均为 50% 时,那么

bucket 为 0 -49 的用户由 AB 零碎标记为 A, 业务零碎依据 A 标记,使得用户应用计划 A

bucket 为 50-99 的用户由 AB 零碎标记为 B, 业务零碎依据 B 标记,使得用户应用计划 B。

可是咱们都晓得哈希算法并不是相对平均的,当 100 人时,基本上不会呈现有 50 集体走 A,50 集体走 B,然而 1 万集体的时候,两局部流量可能就靠近了 1:1,10 万人的时候可能更靠近 1:1。

之前有位经营的同学问过,为什么不能用一种很平均的算法,比方第一个人来了,放入 A,第二个人来了放入 B,第三个人来了放入 A,第四个人来了放入 B ….,这样一天 1W 集体来,5000 个取 A 策略,5000 个取 B 策略。

假如咱们真的这么做了,第一天是 OK 的,第二天进 A 只来了 4000 人,这样还是不平均的,如果你第二天依然按第一天的规定重新分配,这样会有一部分人乱了策略,不合乎咱们固定人群走固定策略的试验目标。

所以说这个不平均是无解的,HASH 算法是目前最现实的解决方案,前提是你须要肯定的流量,流量越大,分流绝对就比拟精确。

2、人群素质的不平均

咱们假如流量足够大,人数比例很平均了,然而还有个问题就是人群素质的平均问题。这里的素质包含生产能力,活跃度,年龄等各种人群因素。

假如当初咱们的流动对立采纳的 A 策略(现状),咱们想验证一下 B 策略(新策略)会不会带来客单价的晋升,就间接做了 AB 试验,还按 1:1 比例来分流,发现应用 A 计划的人群客单价是 100,应用客单价 B 的人群是 96,此时咱们能认为原有 A 计划优于 B 计划吗?其实是不能的,怎么确定这种人群素质的差别呢,能够采纳 AA 试验,就是两局部人都走 A,进行离开统计,可能会发现,位于 0 -49 桶的人群自身客单价就是 100,而位于 50-99 桶的人群可能只有 94,这么看来 B 计划是能晋升客单价的,因为位于 50-99 桶的人群自身指标就差一些。

当然 AA 不是必须的,可能你有整体的客单价指标,上了 B 策略后发现整体晋升了,这种状况相当于灰度验证了,但理论状况是比较复杂的,整体指标你是不分明的(因为这里的整体可能只是你取的业务中的一部分流量)。

所以解决素质不平均的伎俩就是采纳 AA 提前确定差异性,再在这个差异性根底上看差别的变动。

3、试验间影响的不平均

这个不平均性是最简单的,个别做试验咱们走两种极其:

第一种是齐全不复用人群,每个试验人群都是独立的,这样的话成果比拟精确,然而弊病是,当所有流量都被用去后,不能有新试验开始,必须期待有完结的试验后能力持续做。

第二种,所有试验都用全副流量,此时咱们认为试验尽管相互之间有影响,然而这种影响是正交的,量大的时候应该是平均的,如下图所示,P 试验的两个策略人群,到 Q 试验时,对 Q 的两个策略影响是平均的。

这种能够满足有限个试验,想做多少试验都能够,但弊病是,试验太多,必然有影响不平均的,且咱们无奈打消这种不平均。

所以咱们想能不能联合以上两种状况来解决呢,联合 google 的 Overlapping Experiment Infrastructure 文章咱们设计出分层的试验治理模型

首先咱们将总流量分成两局部,正交域,垂直域(含比照区)

咱们假如如图取 80% 的流量用做正交阈,20% 用作垂直域,垂直域中有 5% 用做比照区。

上图正交域下 4 个层,层内试验流量互斥,层间试验流量正交,咱们将可能会相互影响的试验放到同一层内进行流量互斥,而影响不大的试验能够放到不同层内。

垂直域中的试验流量只能互斥,且不与任何试验正交,能够了解用最纯正的流量做试验,能够 I1 和 I2 两个策略间比照,也能够 I1 或 I2 和比照域(现状)比对。

那此时有一个很重要的问题须要解决,咱们怎么确定哪些试验相互影响较大,须要放到同一层下。

有一些简略规范,比方入口不一样,指标不一样等等 ,这种能够放到不同层,咱们能够疏忽正交不平均的问题,反之就不行。

比方流动页劵对单量晋升度的试验和会员页面入会成果的试验,就能够放到不同层。

而首页上满减流动试验对客单价晋升的试验和同样首页买赠流动对客单价晋升的试验,最好是不共用用户,放到同层比拟适合。

但对于很多试验是不太容易通过简略规定来确定的,须要大数据的同学和产品,甚至研发来独特决定试验放到哪些层和哪些试验互斥,这的确在理论的运作中是最难的点。

总之采纳这种策略,能够复用流量的同时还能够升高不必要的相互影响,比拟综合思考了流量和准确度问题。

四、总结

当初咱们对以上问题进行总结,从问题到解决方案上来意识 ab 试验

1、人群做不到相对的平均,只能通过 HASH 算法,联合肯定的流量来解决。

2、通过 AA 试验,来提前确定人群素质的不平均。最终的试验数据联合 AA 试验数据来确定最终成果。

3、设计出正交垂直域,正交阈内多个层,每个层内放可能相互影响的试验,层内互斥,层间正交,保留垂直域,为要求精准的试验留出流量,来解决试验间相互影响的问题。

本篇从外围分流与试验间相互影响角度解说 ab 试验,心愿能引起大家在做试验前能有更多的思考,来更精确的验证本人想要的成果,心愿大家有趣味的能够留言探讨。

退出移动版