工作中经常会有AB相关工作,空闲下来进行了梳理,整个文档没有重点关注AB中对应统计知识,一方面觉得展开的话太多,另一方面也受限于个人水平。不足之处肯定很多,希望和大家多多交流,大家多多提意见,感谢大家。
一、背景:
实际工作中,为了优化用户产品体验,或者验证运营策略,机器学习模型线上效果等等,我们通常都会进行线上的AB测试。多个方案线上运行对应周期后,回收数据以验证各方案策略的有效性,所以这里离不开数据分析最基本的思维—对比。指定参照进行数据对比,便知孰好孰坏。所以通俗不严谨的理解,可以认为ABtest是一个对比实验,但AB有着其科学的严谨性。
(相关资料图)
二、AB测试的大体流程:
1.明确测试目的
2.确定测试关注指标
的假设
4.确定测试对象
5.实验样本量计算及流量分割
6.线上实验配置及有效性验证
7.数据评估及AB迭代
1.明确测试目的
理清需求,明确AB的目的是为了什么,是否有必要进行线上验证,因为有些疑惑通过数据分析也能实现。个人理解,AB还是有一定的成本的,比如对用户体验的影响,所以有必要清楚目的,评估而行。
2.确定测试关注指标
核心收益指标:最为关心的核心指标,即测试目的所在,如订单被司机接单的应答率。
潜在负向指标:这类指标不是AB直接所影响,但潜在因为AB的策略会带来负面影响,如司机接到订单后的取消率。
辅助指标:辅以观察ab效果的指标,电商中的用户的复购率等等。
的假设
简单理解
这里其实是假设检验的思想在主导,构造本次AB测试的原假设和备择假设,即本次实验想要验证的东西。
如:检验样本均值是否存在差异:
或者二者是否是存在某个值的差异(c是常数,如均值差异2以上的等等):
当然对于比例类的假设检验形式也是类似的,这里就不展开了。
第一类错误和第二类错误
第一类错误 错误,即‘弃真’错误,小概率事件发生了我们认为实验组和对照组存在显著差异,而事时上二者无显著性差异,这个错误的概率就是 ;
第二类错误 错误,即‘取伪’错误,实验组和对照组两组实际有差异时被拒绝掉的概率,这里会涉及到统计功效(1-第二类错误,实验组&对照组有差异且能被检测出来的概率);
4.确定测试对象
这里要明确以下几个点:
测试上线平台,版本等等
测试上线功能/策略,明确AB中需要测试的策略、产品功能
测试上线的用户群体,要保证分流的科学合理性。
只有科学变量的控制,才能保证AB最为基础的可对比性,得到的结论才可靠。
5.实验样本量计算及流量分割
实验样本量的计算,AB测试指标的从当前表现到预期收益需要多少样本量,这可以从对应的统计学知识计算所得,大致如下(具体公式可以查看对应统计知识了解即可):
实验样本量计算
均值类检验所需样本量计算
n是所需样本量,实验组和对照组理论上样本一样多,则至少需要2n样本;α和β即为假设检验中的提及到的第一类错误和第二类错误的概率(一般分别取和),Z为正态分布的分位数函数;Δ为两组数值的差异;σ为标准差,是数值波动性的衡量,σ越大表示数值波动越厉害。
所以可知在其他变量不变情况下,当实验组&对照组数值的波动性越小,所需要的样本量就越小。
比例类检验所需样本量计算:
其中P1和P2是我们实验中的对照组和实验组的取值,其余同上。
在线工具进行样本量计算:
该在线计算样本量工具还是很好用的,大家可以用用看
实验流量分配
1.实验对用户体验感知影响很小,通常可以较大流量测试,如实验组:对照组 50%:50%的流量分配
2.实验稳定性不高:如新功能的上线,策略变动较大等,一般先小流量进行测试,后续依据表现放量。
3.依据实验的收益预期来判定:如希望获得很大的收益,在确定较大负面影响下,可以大流量上线。
流量分配比例假定ok之后,结合实验的样本量需求,则实验的实验周期即可得知:
如对订单进行分流:
平台日均订单100w,AB测试样本量需要30w,流量分配为10%,则可知30w/(100w*10%)=3天;
这里很重要的一点是,一个测试周期尽量要覆盖用户或者业务的一个周期性规律:
如短视频的周末播放量整体会偏高,用户刚接触新产品功能时会有新奇效应
关于AA实验
在我面试过程中面试官问过,怎么验证流量是均匀的,或者说如何证明你的实验收益不是波动所带来的?
这里其实可以通过AA实验(也可以设置AABB实验),通过AA实验的效果可以在指定显著水平下计算指标的波动置信区间,这样我们就得到了对照组的波动范围,也可以验证分流是否 是ok的;
对于测试我们同样可以计算出对应的指标波动的置信区间,这样对比即可知实验收益是否是否是由波动所造成的。
6.线上实验配置及有效性验证
实验的配置一般分为两种:
1.正交实验:
实验1和实验2是互斥的,彼此流量是互斥的;实验1和实验2流量打乱之后再分配到实验3和实验4,此时实验3和实验4是互斥的,但是和实验1与实验2是正交的。
2.互斥实验
互斥实验大体如下,各实验流量之间互斥
3.一些较为复杂的策略:
事实上,当ab测试活动比较多时,经常为了评估活动的有效性,实验的配置设置上会比较复杂,以下图为例:
基于贯穿周期的对照组和实验总流量分层这样的设计,来评估多活动共同作用下的整体收益
4. 实验配置后要数据查验
实验配置ok后,最好做一下数据查验工作,检查所设置实验是否真实线上生效,我个人遇到过2次研发实验配置错误导致数据回收不到的问题。
7.数据评估及AB迭代
这里个人认为至少有以下几点需要关注:
1.核心指标变化:以用来评估方案好坏
2.收益是否长期有效,AB在实际的复盘中不同周期试验下要考虑的问题是不完全相同的,如前期可能是关注指收益指标,中后期可能会更加关注短期内无法暴露出的负面影响,比如是否带来用户流失等问题。
3.不同类别/群体表现是否存在差异
基于上述这些思考来衡量AB是否扩量还是暂时下线迭代:
如笔者曾经评估过一个司机像用户提出加价申请的AB,当时大体如下的评估框架:
编辑切换为居中
三、AB测试中的几个注意事项:
1.保证实验组和对照组流量分配的均衡,以保证可实现最基础的对比;这里可以做AA实验,以及AABB实验等来进行验证。
2.保证版本,时间等客观的外界环境的的一致性。
3.实验生效日期尽量要覆盖业务的一次规律特征周期,或者是用户的一个完整的活动周期。
4.一次实验尽量保证用户的地理位置可比性,同事可以避免用户之间的交流带来的影响。
5.个人觉得没必要不停的检验数据是否有正向收益。
四、AB测试中的一些其他思考:
1.关注指标收益正向,但检验不显著,实验该作何处理?
个人理解,AB的目的是为了优化,如果线上收益是正向的,虽然检验不显著,但是可以继续保持线上运行,初次之外要关注是否存在可优化点。
2.实验中指标1正向收益,指标2收益负向,实验该作何处理?
个人理解,明确AB的首要关注指标,如果核心关注指标1,而指标2的负向暂时是可以接受的,则暂时可以保持AB的正常运行,可将实验周期再稍微拉长,重点关注下指标2的表现,这样指标2的问题得以放大,更利于解决。
3.实验指标收益不显著得做法?
通常做法有2:
1.增大实验样本量来快速验证实验是否真实有效
2.调整实验策略
进一步思考,为啥实验有时需要很大得样本量,这里本质上是关注指标的变动大,方差大,从而需要较大样本量来进行验证;唤个角度思考,如果把关注指标的方差缩小,那么所需样本量就随之减小。
前段时间学习,了解到了CUPED的方法(Controlled-experiment Using Pre-Experiment Data),简单介绍如下:
CUPED算法是一个通用的方法,主要利用实验前的无偏数据,(一般选取实验前的同一指标)对实验核心指标进行修正,使得新指标的方差更低,得到更敏感的新指标,放大treatment的影响。
CUPED思路如下:
编辑
编辑切换为居中
其中CUPED的结果关键点需要注意一下:
1.协变量X的选择:
通常为和Y相关的变量,多数情况下还是关注指标的本身,不过该指标数据可以选取实验前一定周期内的数据
2.部分样本缺乏数据的处理办法:
部分新用户在实验前缺乏数据,可以使用实验前对应指标的均值来进行代替
3.。。。其他注意点,还在学习理解中。
4.实验放量后,核心指标呈现负向
此时要从以下几个方面思考问题:
样本量的问题,是否随机,是否充足
实验周期
数据统计口径
用户群体问题
放量前的实验组用户、放量后新增的实验组用户、放量后对照组用户,看一下哪类用户影响的,一般而言,实验结果的差异,是与之前不同的那个人群造成的,需要找出这部分人群。
8. AB实验中的注意事项
1.不同组的实验参与对象互不干扰
2实验分组保证随机性,同一用户在实验期间保持所在组统一
。。。