【阿里妈妈数据科学系列】第二篇:在线分流框架下的 ABTest
第一篇: 【阿里妈妈数据科学系列】第一篇:认识在线实验 (ABTest)
拾芥、芋萌 阿里妈妈技术
背景
AB Test 是为同一目标制定两个方案,在同一时间维度,保证其他条件一致的情况下,分析实验组跟对照组的区别,根据不同的实验类型以及应用场景,产生了不同分桶逻辑的AB Test,包括在线分流及离线抽样。在流量侧进行的实验,常采用在线分流的方式,例如算法实验,比较算法A和算法B的收益;在用户侧进行的实验,常采用离线抽样的方式,例如客户实验,比较一个产品功能在客户侧的收益。本文主要介绍在线分流框架下的 AB Test 。
一般来说,实验流程路径可以归纳为四个步骤:实验设计-->实验实施-->实验效果-->实验决策,在每个步骤内,都需要根据实验的需求明确实验细节,具体如下图:
▐ 1. 实验设计
1.1 实验目的
对于在线分流框架下的 AB Test,首先需要明确实验目的,通过数据决策回答需要解决的问题,常见问题包括:流量1策略和流量2策略,哪一个效果更好?哪个ROI更高?长期来看哪个更好?在哪个层级的流量能达到最好的效果?
1.2 实验方案
设计实验方案时需要从两个角度考虑:1)如何设计该实验需要评估的指标,2)如何获取与分配实验流量。解决了这两个问题,那么实验方案便完成了一大半。
1.2.1 指标设计
定义指标时可分为两类:一是不变量,即变量组和对照组的都应该相同;二是变量,即需要观察改变的量。对于不变量,需要注意两者的总量及数据分布是否相同,以保证实验的正常进行。
指标评估时可选择一个指标或一套指标。如果使用一套指标,可以聚合成一个指标,比如构造一个目标函数,或是简单的加权指标。
此外,还需要考虑指标的普适性,最好能够设定一个贯穿整个体系的指标。
常见的指标可分为四类:
- 转化率指标:以01分布为基础计算的转化率指标,例如:点击率、购买转化率等;
- 人均指标:指单个独立访问用户指标的平均值,例如:人均购买金额、人均点击数等;
- 聚合类指标:指独立访问用户指标的聚合,例如:曝光数、点击数等;
- 比率指标:指两个连续型定量指标的比率,例如点击成本、转化成本等。
1.2.1 流量获取与分配
流量获取: 在线分流的 AB Test 通常采用随机分割全局流量,让所有流量随机进入实验组和对照组。这样,实验策略对全局所有流量都能够起到作用,我们可以通过后验的方式对不同的层级或人群进行实验效果验证,帮助进一步精准定位到策略效果最好的层级。
样本量预估: 当我们需要对特定层级或人群进行后验时,由于这部分特定层级必须满足最小样本量这个前提条件,这时则需要样本量预估。A/B 实验的效果评估是以样本的参数估计来代替总体水平,进而观测出实验效果,观测实验效果=实验因素造成的效果+抽样误差+随机扰动。
在经典统计学派中,显著性检验是以统计频率的为基础的,因此对于频率的稳定性有一定的要求。其中,不稳定因素来自假设检验过程中的犯错概率,这个犯错概率通常是经验值。这两类错误与样本量本身存在一定的函数关系,只要找到这两者的函数关系,就有不同犯错概率下的最小样本量。最小样本量的计算公式为:
其中\Delta = \frac{\mu _x - \mu _y}{\mu _y},\sigma,为总体标准差,\mu为总体均值,\alpha为犯第一类错误的概率,为犯第二类错误的概率。
在选择最小样本量时,如果实验中需要关注不止一个指标,那么对应的每个指标都有会有个最小样本量的值,理论上应该取作为最终的最小样本量,但是不同的指标对应的最小样本量差异很大,很难同时满足,所以在实践中以核心指标的最小样本量为准。最小样本量指实验组与对照组各自所需的最小样本量,不是二者之和。
▐ 2. 实验实施
2.1 随机单元
随机单元是实验平台选取的达到随机化的最小单元,随机单元需要考虑的一个轴是粒度,常用的随机单元粒度包括“页面级别”、“会话级别”以及“用户级别”。
确定实验随机单元粒度时,需要考虑两个问题:1)用户体验有多重要;2)哪些指标很重要。由于在线分流的实验通常策略在算法侧便会生效,用户很难有实际感知,常用的随机单元粒度是页面级别,一般指 PV 层面,以一次请求 PV 作为一个随机单元,实验平台可以决定把这次 PV 导向某个“实验组”或“对照组”。
2.2 正交实验设计
在实际场景中,在一个全局流量下同时进行的在线分流实验有很多,因此在进行实验前需要确认流量必须互斥还是可以进行正交。
正交实验: 每个独立实验为一层,层与层之间流量是正交的,一份流量经过每层实验时,都会再次随机打散,且随机效果离散。
互斥实验: 实验在同一层拆分流量,且不论如何拆分,不同组的流量是不重叠的,如下图所示.
规则一:正交、互斥
规则二:分流模型
规则详述:
- 域 1 和域 2 拆分流量,此时域 1 和域 2 是互斥的;
- 流量流过域 2 中的 B1 层、B2 层、B3 层时,B1 层、B2 层、B3 层的流量都是与域 2 的流量相等,此时 B1 层、B2 层、B3 层的流量是正交的;
- 流量流过域 2 中的 B1 层时,又把 B1 层分为了 B1-1 ,B1-2 ,B1-3 ,此时 B1-1 ,B1-2 ,B1-3 之间又是互斥的。
根据以上规则,我们可以不断的在此模型中增加域、层,并且可以互相嵌套。这要与实际的业务相匹配,拆分过多的结构可能会把简单的业务复杂化,拆分过少的结构又可能不满足实际业务。
2.3 实验稳健性校验
实验的稳健性校验通常采用 AA Test 的方式进行,其基本理念是开启一个实验组和对照组配置相同的实验。在 AA Test 实验中,首先需要保障分桶尽可能无偏,一种方法是将 userid 或 devid 进行 hash,而后按照桶大小进行取模分桶,单层实验没有什么问题,但是长期交叉、连续实验会导致某个桶的用户行为有偏,进而导致其他层的实验结果受到影响,目前比较常用的方法是可重叠分层分桶方法。
具体来说,可重叠分层分桶方法就是将流量分成重叠的多个层,因为很多类实验从系统参数到观察的产品指标都是不相关的,完全可以将实验分成互相独立的多个层,例如:UI层、推荐算法层、广告算法层等。除分层外,在每个层中使用不同的随机分桶算法,保证流量在不同层中是正交的,即同一用户应该分到哪个桶是独立不相关的。如上一层1桶的所有用户,理论上应该均匀随机分布在下一层的1000个桶中。
进行 AA Test 之后有一定可能出现评估指标的波动现象,其原因是由于每个桶中的用户每天进行操作的次数完全随机,因此实验指标每天会有一定的波动值。常用的波动评估方法是对每个桶的指标进行监控,统计置信区间和置信度,指标均值,方差等信息。解决方案可以考虑提高实验桶内的用户数目,降低AA Test的波动。
▐ 3. 实验效果
3.1 统计描述
3.1.1 数据质量
数据质量会对模型的预测和泛化能力产生直接影响,涉及的主要因素包括:准确性、完整性、一致性、时效性、可信性和解释性。在真实数据中,我们拿到的数据可能包含大量的缺失值及大量的噪音,也可能因为人工录入错误导致有异常点存在,这些非常不利于算法模型的训练。数据清洗是对各种脏数据进行对应方式的处理,得到标准的、干净的、连续的数据,提供给数据统计及数据挖掘等使用。
数据预处理的主要步骤分为:数据清理和数据变换。
**数据清理:**主要通过填补缺失值、光滑噪声数据,平滑或删除离群点,以解决数据的不一致性。如果用户认为数据是脏乱的,便不太会相信基于这些数据的挖掘结果,即输出的结果是不可靠的。
- 缺失值的处理: 获取信息和数据时经常存在各类原因导致数据丢失和空缺。通常会基于变量的分布特性和重要性(信息量和预测能力)采用不同的方法。主要分为:
- 删除变量:若变量的缺失率较高(大于80%),覆盖率较低,且重要性较低,可以直接将变量删除;
- 定值填充:工程中常见用-9999进行替代;
- 统计量填充:若缺失率较低(小于95%)且重要性较低,则根据数据分布的情况进行填充。如数据符合均匀分布,采用该变量的均值填补缺失,如数据存在倾斜分布,采用中位数进行填补;
- 插值法填充:包括随机插值,多重差补法,热平台插补,拉格朗日插值,牛顿插值等;
- 模型填充:使用回归、贝叶斯、随机森林、决策树等模型对缺失数据进行预测。
- 哑变量填充:若变量是离散型,且不同值较少,可转换成哑变量。若某个变量存在十几个不同的值,可根据每个值的频数,将频数较小的值归为一类'other',降低维度。此做法可最大化保留变量的信息。
- 离群点处理: 异常值是数据分布的常态,处于特定分布区域或范围之外的数据通常被定义为异常或噪声。异常分为两种:“伪异常”,指特定业务运营动作产生,是正常反应业务的状态,不是数据本身的异常;“真异常”,指非特定业务运营动作产生,是数据本身分布异常,即离群点。检测离群点的主要方法如下:
- 简单统计分析:根据箱线图、各分位点判断是否存在异常,例如 pandas 的 describe 函数可以快速发现异常值;
- 3\sigma原则:若数据存在正态分布,偏离均值的3\sigma之外. 通常定义P(|x-\mu| > 3\sigma) <= 0.003范围内的点为离群点;
- 基于绝对离差中位数(MAD):计算各观测值与平均值的距离总和,放大看离群值的影响,这是一种稳健对抗离群数据的距离值方法;
- 基于距离:通过定义对象之间的临近性度量,根据距离判断异常对象是否远离其他对象,缺点:计算复杂度较高,不适用于大数据集和存在不同密度区域的数据集;
- 基于密度:离群点的局部密度显著低于大部分近邻点,适用于非均匀的数据集;
- 基于聚类:利用聚类算法,丢弃远离其他簇的小簇。
在数据处理阶段将离群点作为影响数据质量的异常点考虑,而不是作为异常检测目标点,一般采用较为简单直观的方法是结合箱线图和MAD的统计方法判断变量的离群点。具体的处理手段:
- 根据异常点的数量和影响,考虑是否将该条记录删除,信息损失多;
- 若对数据做了log-scale 对数变换后消除了异常值,则此方法生效,且不损失信息;
- 平均值或中位数替代异常点,简单高效,信息的损失较少;
- 在训练树模型时,树模型对离群点的鲁棒性较高,无信息损失,不影响模型训练效果。
- 噪声处理: 噪声是变量的随机误差和方差,是观测点和真实点之间的误差,即obs=x+\varepsilon。通常的处理办法:对数据进行分箱操作,等频或等宽分箱,然后用每个箱的平均数,中位数或者边界值(不同数据分布,处理方法不同)代替箱中所有的数,起到平滑数据的作用。另外一种做法是,建立该变量和预测变量的回归模型,根据回归系数和预测变量,反解出自变量的近似值。
数据变换: 数据变换包括对数据进行规范化,离散化,稀疏化处理,达到适用于挖掘的目的。1)规范化处理: 数据中不同特征的量纲可能不一致,数值间的差别可能很大,不进行处理可能会影响到数据分析的结果,因此,需要对数据按照一定比例进行缩放,使之落在一个特定的区域,便于进行综合分析。特别是基于距离的挖掘方法,聚类,KNN,SVM 一定要做规范化处理。
- 最大 - 最小规范化:将数据映射到[0,1]区间,x_{new} = \frac{x - x_{min}}{x_{max} - x_{min}}
- Z-Score标准化:处理后的数据均值为0,方差为1,x_{new} = \frac{x - \bar{x}}{\sigma}
- Log变换:在时间序列数据中,对于数据量级相差较大的变量,通常做Log函数的变换,x_{new}=logx
2)离散化处理: 数据离散化是指将连续的数据进行分段,使其变为一段段离散化的区间。分段的原则有基于等距离、等频率或优化的方法。数据离散化的主要原因包括:
- 模型需要:比如决策树、朴素贝叶斯等算法,都是基于离散型的数据展开的。有效的离散化能减小算法的时间和空间开销,提高系统对样本的分类聚类能力和抗噪声能力;
- 离散化的特征相对于连续型特征更易理解;
- 可以有效的克服数据中隐藏的缺陷,使模型结果更加稳定。
方法包括:
- 等频法:使得每个箱中的样本数量相等;
- 等宽法:使得属性的箱宽度相等;
- 聚类法:根据聚类出来的簇,每个簇中的数据为一个箱,簇的数量模型给定。
3)稀疏化处理: 针对离散型且标称变量,无法进行有序的 LabelEncoder 时,通常考虑将变量做 0、1 哑变量的稀疏化处理,稀疏化处理既有利于模型快速收敛,又能提升模型的抗噪能力。
3.1.2 基本统计描述
描述性统计量分为:集中趋势、离散程度(离中趋势)和分布形态。
1)集中趋势的描述性统计量:
- 均值:是指一组数据的算术平均数,描述一组数据的平均水平,是集中趋势中波动最小、最可靠的指标,但是均值容易受到极端值(极小值或极大值)的影响。
- 中位数:是指当一组数据按照顺序排列后,位于中间位置的数,不受极端值的影响,对于定序型变量,中位数是最适合的表征集中趋势的指标。
- 众数:是指一组数据中出现次数最多的观测值,不受极端值的影响,常用于描述定性数据的集中趋势。
2)离散程度的描述性统计量:
- 最大值和最小值:是一组数据中的最大观测值和最小观测值
- 极差:又称全距,是一组数据中的最大观测值和最小观测值之差,记作R,一般情况下,极差越大,离散程度越大,其值容易受到极端值的影响。
- 方差和标准差:是描述一组数据离散程度的最常用、最适用的指标,值越大,表明数据的离散程度越大。
3)分布形态的描述性统计量:
- 偏度:用来评估一组数据的分布呈现的对称程度,当偏度=0时,分布是对称的;当偏度>0时,分布呈正偏态;当偏度<0时,分布呈负偏态;
- 峰度:用来评估一组数据的分布形状的高低程度的指标,当峰度=0时,分布和正态分布基本一致;当峰度>0时,分布形态高狭;当峰度<0时,分布形态低阔。
4)频率分析: 频数分布分析(又称频率分析)主要通过频数分布表、条形图和直方图、百分位值等来描述数据的分布特征。
在做频数分布分析时,通常按照定性数据(即分类的类别),统计各个分类的频数,计算各个分类所占的百分比,进而得到频率分布表,最后根据频率分布表来绘制频率分布图。
5)趋势分析: 特殊情况下,当X轴是日期数据,Y轴是统计量(比如均值、总数量)时,可以绘制出统计量按照时间递增的趋势图,从图中可以看到统计量按照时间增加的趋势(无变化、递增或递减)和周期性。
6)相关性分析: 相关性分析是研究事物之间是否存在某种依存关系,并对具有依存关系的现象进行相关方向和相关程度的分析。相关程度用相关系数r表示,r=0表示不相关,通常情况下,0 < | r | <1表示变量之间存在不同程度的线性相关,根据约定的规则判断是否存在明显的相关性。
3.2 统计推断
对于在线分流实验的效果评估方面,统计推断是必然绕不开的一个话题。通常来说,我们的统计推断流程包括了进行假设检验,P值的计算,统计功效和置信区间的获得。
3.2.1 假设检验
假设检验使用了一种类似于“反证法”的推理方法,它的特点是:先假设总体某项假设成立,计算其会导致什么结果产生。若导致不合理现象产生,则拒绝原先的假设。若并不导致不合理的现象产生,则不能拒绝原先假设,从而接受原先假设。同时,它又不同于一般的反证法。所谓不合理现象产生,并非指形式逻辑上的绝对矛盾,而是基于小概率原理:概率很小的事件在一次试验中几乎是不可能发生的,若发生了,就是不合理的。至于怎样才算是“小概率”呢?通常可将概率不超过 0.05 的事件称为“小概率事件”,也可视具体情形而取 0.1 或 0.01 等。
在线分流实验通常选用 Bootstrap + t test 的方式进行总体检验,为什么当样本足够大时仍采用t检验呢?因为根据中心极限定理及 Slutsky 定理等,任意分布下样本构造的 t 统计量趋向于标准正态分布,因此 t 统计量对应的 p 值可由 t 分布近似计算。即样本量较大时,可以使用 t 检验任意分布的随机样本均值比较。
3.2.2 P值(P value)
P值是当原假设为真时,比所得到的样本观察结果更极端的结果出现的概率,是用来判定假设检验结果的一个参数。在计算 P 之前我们需要选择显著性水平,alpha 值只是一个阈值,即用来与 P值 进行比较判定是否具有统计学意义的一个判断标准,通常来说 alpha 会选择0.05,如果 P值 < alpha,可以解释为获得的结果大概率属于另一个分布,我们认为得到的样本结果是显著不同的;若 P值 > alpha,意味着所获得的结果更可能是同一总体分布的一部分,可认为获得的结果并不显著,只是一个偶然。
在现在的分流实验中,如果 P值 显著,可以认为实验组与对照组的分布不同,两组的策略差异带来了显著性差异,但如果 P值 不显著,可以认为实验组与对照组之间的差异并不由策略带来,而是偶然因素造成的。
3.3.3 统计功效
首先需要理解第一类错误与第二类错误,第一类错是α错误,即实验本身没有效应,但我们觉得有效应,α 就是我们犯第一类错误的概率,而第二类错误是β错误,指实验本身有效应,但是我们误以为没有,这个错误的概率定义为 β。而统计功效,就是 1-β,即不犯二类错误的概率。换句话说,就是当 AB 两组差异真的存在时,我们能正确判断的概率。
那么在实验中,统计功效的意义在哪呢?根据其背后逻辑,我们可以知道,统计功效低,那么当AB两组差异真的存在时,我们很可能会错误判断两组差异不存在。这种情况,通常发生在我们的实验结果不显著时。一般我们会继续优化实验方案,或者扩大样本量继续实验,努力尝试多次。所以更多时候,给我们带来实际困扰的是一类错误。即AB两组其实没有差异,但被误认为有差异。因此,以往的实验里,我们更多的会看到显著性水平α。但通过重复多次实验来获取显著结果,会增大犯错误的概率。并且,完全忽略β值也是不科学的。更好的办法是同时考虑α和β,把β控制在一个合理的范围内。
我们一般把统计功效定义在80%(或90%)以上,即β在0.2(或0.1)以下,通常认为这样的可信度是可以接受的。统计功效的计算公式为:
其中,σ 是标准差;Φ是标准正态分布下某个X值对应的概率面积;α是一类错误概率;β是二类错误概率,1-β是统计功效。
3.3.4 置信区间
置信区间是指由样本统计量所构造的总体参数的估计区间。在统计学中,一个概率样本的置信区间(Confidence interval)是对这个样本的某个总体参数的区间估计。置信区间展现的是这个参数的真实值有一定概率落在测量结果的周围的程度,其给出的是被测量参数的测量值的可信程度,即前面所要求的“一个概率”。
3.3 深度分析
在现有的在线分流实验框架体系下,对于实验的深度分析主要集中在维度细分和归因两个方面。
3.3.1 维度细分
对实验结果进行分维度拆分分析,观测实验效果,例如用户分群,对实验结果进行分群分析,看总体实验结果在用户群分解之后是否一致,是否在某一类用户的流量上表现好,而在另外一类用户里的流量上表现差?又或者对于点击率实验分位置拆分,可以把页面总体点击率拆分为分位置点击率,然后针对页面内容与用户需求,做一一对应分析。
当对维度拆解去验证实验效果来自局部增长还是全局增长的问题时,对于率指标或者分类的频数指标,常用的方法是采取分层卡方检验(cmh test)的方法去评估在细分纬度下是否存在辛普森悖论的场景,然后才细分维度两两间采取卡方检验的方式寻找有显著差异的配对组合;而对于均值类指标或比值类指标,这种指标并不能应用 cmh test 的方法去评估,而是可以采用方差分析的方式去评估分层间是否存在显著,用 LSD 方法构建统计量去寻找有显著差异的配对组合。
3.3.2 归因
当我们从实验获得显著的结果后,可以说明实验策略确实带来了有效收益,但是一个完整的实验项目这样就结束了吗?显然不是,一个没有被归因的结果,不太可能给我们带来可以被沉淀和复制的经验,进一步深层次挖掘,我们需要探寻的是实验为什么成功了?具体表现是什么?这时掌握对实验数据归因分析的思路,分析寻找实验成功背后可能的真相,才真正有利于我们决策,而不只是停留在一个实验结果数据上。
那么,如何归因呢?
- 获取方案触达到转化的过程指标,触达到转化的中间过程,通常都会有一个“过程黑箱”,如若不去拆解这个过程,对我们来说就是个黑盒子,但如果去进一步探寻,可以发现许多我们可以使用的数据,也就是我们所说的“过程指标”,过程比较简单,只需要梳理该过程黑箱内可能影响转化的指标即可。
2)
其他可归因的数据,除了过程黑箱,我们还能找到其他数据来观察变化,很常见的一种便是流失数据,这是最能体现负面影响的数据指标,就是当策略触达后,用户不是直接转化,而是直接流失了,可以分析用户在该页面是如何流失的,流失前的相关行为变化,往往转化率不行也意味着流失,那么用户如何流失就很可能给我们提供重要信息。此外,我们还能观察转化后的留存情况,订阅保留等数据,这些数据给我们提供了很有价值的长期估算指标。
3)
归因分析过程要不断的假设,要充分挖掘一份实验数据的信息,就要不断的重复做假设,重复分析和验证,当新的假设无法被现有数据验证时,则可以再设计实验去验证,这个就是优化方案或想法的来源。
实现上述的归因思路可以运用不同的分析模型,包括漏斗分析模型、归因分析模型、用户路径分析模型 以及 session 分析模型,这些都是可以用来分析转化率、流量分布等数据。此外,还可以借助一些回归模型和机器学习的算法,寻找相关性最大因子或过程指标,找到策略成功的关键。
▐ 4. 实验决策
在经历完上述步骤后,便到了完整实验的最后一步——实验决策。在这里需要结合实验效果部分中提到的的统计描述及推断和深度分析的数据结论去为实验定下一个科学的决策。
由于在线分流框架下的实验基本是对全局流量进行分割实验,在这样的背景下,我们需要回答:策略是否带来了正向效果?如果有,是否需要对全局流量/局部流量进行扩量?如果没有效果,是否需要回退之前的策略,再做优化迭代?
对于扩量的选择,除了需要关注核心指标的增量及 p值,同时还要结合其他指标、业务经验以及多维度数据去验证判断是否全量;如上述提到,我们需要结合实验效果部分里的统计描述及推断和深度分析的数据结论去进行判断。具体流程包括:
- 我们的核心指标是否带来了显著性的收益,是否达到了我们的预期?
- 分维度来看,是全局均有增长还是仅在某些维度的某些层达到了预期增长?
- 如果分维度各层均有显著性的提升或不存在某些层级显著负向的情况,可以选择全局扩量;如果仅在某些层级有显著性的提升并且同时存在某些层级显著负向的情况,可仅针对有提升的层级进行扩量操作,其余层级再做优化迭代。