王志兴
摘要:随着流量红利、人口红利衰减 ,产品运营算法更加关注精细化运营,AB实验是一种精细化运营的手段。通过对实验策略和对照策略的数据进行分析,对比关键指标的变化,将转化率高的策略进行转全上线。指标分析分为实时指标和离线指标,实时指标用来及时反馈数据异常与否,离线指标用来观察业务关心的指标的变化情况,其中对指标的有效性分析需要统计学的样本量预估和假设性检验。
关键词:AB实验;数据埋点;指标分析;假设性检验;实验转全
中图分类号:TP311.13 文献标识码:A 文章编号:1672-9129(2020)10-0026-02
1 项目背景介绍
ABTest将用户随机分为若干个用户组,将不同的用户组同时试验线上不同的版本效果。我们将新建一个页面设置为测试页面,然后这个新建的页面可能在背景颜色,文字内容及风格样式等与原有的基线页面不同,我们将这两个页面隨机的分发给不同的在线用户,其中看到基线页面的用户群体为A流量组,看到测试页面的用户群体为B流量组,A流量组和B流量组所占全体用户的比例是一致的,且用户画像群体随机离散。在实验过程中我们对用户的行为数据进行埋点,通过统一的上报通道收集到数据仓库中。最终后台通过大数据分析的方式计算出基准页面及测试页面不同的点击,意向及转化率等指标,帮助业务对产品策略进行决策。AB实验的三个特性,先验性:相对于后验先让部分小流量用户使用,来验证我们的想法;并行性:运行两个或两个以上版本策略同时去对比,节省验证时间;科学性:用统计的指标判断结果,避免我们依靠经验主义去做决策。
但是ABTest仅仅只是将用户分成若干个不同的群体,存在如下的问题
1.1流量饥饿及实验间相互影响。现有大部分分流模型都是单层的实验模型,即不同的实验使用不同的流量,各自独立,流量间互不干扰,但是会存在流量饥饿的问题。单层实验模型下,其中实验A占用了40%的实验流量,实验B占用了50%的实验流量,在增加一个实验C20%的实验流量时,我们发现已经没有空闲流量给实验C使用,支持的实验个数是有限的。在多层的实验模型下,即不同的实验使用的流量相互正交,可以最大程度支持实验数量,但是这样会存在实验间相互干扰的情况。多层实验模型下,假设针对某个功能模块建立了背景颜色实验和文字颜色实验,背景颜色实验中背景色是红色或者白色,文字颜色实验中文字颜色是红色或者绿色,并且这两个实验分别放置于不同的实验层中,如果用户同时命中了这两个实验,并且命中的策略是背景颜色为红色,文字颜色也是红色,如此一来就导致了页面样式不可读,实验间相互干扰的情况出现。
1.2业务埋点方案复杂。在一般的埋点方案下,业务方的每个需求都需要向负责埋点的同学申请埋点规范,并且需要业务方关注埋点的数据,实验埋点逻辑完全由代码控制,增加了业务方同学的开发量,埋点行为缺乏控制,容易出现缺少埋点,埋点错误等问题。
1.3数据产出不及时,缺乏科学分析方式。ABTest在整体流程上只包含业务的分流,并不包含产出数据的具体流程,所有的数据产出需要业务方找专业的数据人员去提取数据,而且在产出数据后,仅通过指标的大小比较,以确定最优策略。但在现实情况中,这样的策略全量发布后,往往没有获得正向的收益。
2 实验系统设计
2.1分流模型:原有的分流模型只包含同层实验模型及多层实验模型。而在实验系统提供的解决方案中,可以同时满足业务方对互斥实验和正交实验的需求。具体实现中,实验系统按照业务维度对用户的流量进行划分,在每个业务内部实验系统对实验的位置进行了划分,最高级别的是页面的维度,其次对每个页面拆解为多个模块,最后在模块的维度进一步拆解为若干个层;接着实验系统内部按照业务将用户的流量均匀划分为若干个流量大小相同的流量桶,然后将这些流量桶组成实验域,这些实验域包含隔离实验域(在这个域下的用户不会命中任何实验),互斥实验域(在这个实验域中的用户在这个业务下至多命中一个实验),正交实验域(在这个域中我们分为页面隔离实验即用户在一个页面可以命中至多命中一个实验,正交实验即用户可以命中多个实验)。业务在进行实验的时候可以对自己实验的实验方式进行选择,放在不同的实验域中进行实验,来支持更多的实验。
2.2流量圈定:首先对用户进行流量圈定,如所在的城市需要是北京,客户端版本范围圈定,用户画像圈定等,我们将这些条件和我们的实验进行绑定,确保只有满足上述条件的用户才能命中该实验。
2.3分流算法: 将每一层用户充分打散的算法,分流算法为f(分流标识+离散因子)。在分流标识方面,实验系统支持多种分流标量,例如uuid,userid,cookie等一系列的用户唯一标识。而在离散因子上实验系统会为每层生成不同的离散因子,并且会对离散因子进行预验证来保证该离散因子能够保证用户在每层上命中的实验都是均匀离散的。最后在离散算法上,我们通过对大量算法的验证,最终采用Murmur3Hash作为我们的离散算法,更好的保证用户能够充分离散。
分流流程: 根据分流算法f(用户唯一标识+业务) mod 100获取用户在业务上命中的桶号,根据桶号我们找到业务所在的实验域,如果在对照实验域,那么用户不会命中任何实验,直接返回;如果用户命中隔离实验域,那么用户通过命中的桶号去层上找到对应的实验,如果找到实验则返回该实验,如果没有找到则直接返回。如果用户命中正交实验域,这时如果该层属于页面隔离的实验范畴,我们根据分流算法f(用户唯一标识+业务+页面标识) mod 正交实验域桶个数 获取新的桶号;如果该层属于正交实验的范畴我们根据分流算法f(用户唯一标识+业务+层标识) mod 正交实验域桶个数 获取新的桶号。我们根据获取到的桶号去层上找到对应的实验,如果找到实验则返回该实验,如果没有找到则直接返回。
3 数据分析
3.1样本量预估:层域模型客观避免了实验干扰也支持了更多的实验,但是同层上主观流量浪费依然存在,大家喜欢随机申请流量,流量到底多少合适?既不浪费流量,又能保证流量足以置信。样本量过小:实验结果不能排除随机误差造成的假象样本量过大:策略影响面较大、资源浪费,同层流量是有限的。所以系统应该提供科学的样本量计算工具,根据现在的数据指标和预估提升率计算出样本量。
3.2埋点流程:业务PM首先在实验系统平台配置该实验所需要关注的相关埋点,实验系统会将埋点和实验的关联关系统一下发到分流服务中,然后客户端向分流服务请求实验的时候会将埋点信息一并下发到客户端中,并保存到本地的缓存。业务只需要关注自己业务的埋点,并不需要显式的将实验信息追加到埋点中,最终在埋点通报上报的过程中,会去通过埋点id查询本地缓存,找到该埋点关联的实验信息,自动追加到埋点中,完成实验数据的上报。
3.3数据产出:业务首先在实验系统平台配置关心的数据指标,根据上面埋点流程产出的数据,实验系统会将业务实验的流量明细进入数据仓库,实验系统会通过业务配置的不同的数据指标。
实时指标:1)数据指标:曝光UV、点击UV、意向UV、支付UV、支付订单数、支付金额等;2)实时数据以天为维度,从当天0点0分开始到当前时间的累积数据(UV去重);3)存入底表字段:除了筛选维度外,支持 abtest_key、版本、埋点模块 在底表查询; 4)展示需求:默认按该ABkey下ABtest_flow维度展示当天实时指标数据;日期项下显示当天。每个实验数据表中展示这个实验key的埋点转化数据(每个实验的数据单独展示);5)数据下载需求:支持数据下载及复制SQL。
离线指标:启动不同的后台ETL任务将实验的指标数据进行聚合,统一存储到业务实验指标库中,最后在实验系统平台读取业务实验指标库的数据进行报表展示。
3.4数据分析:业务在进行数据分析的过程中,实验系统引入了统计学的相关概念,假设性检验,是统计学中用来判断从样本得出的结论能否推论到总体的一种方法(小概率反正法)。原假设:实验策略与对照策略无显著差别,备择假设:实验策略与对照策略有显著的差别,显著性水平α:当原假设为正确时却把它拒绝了的概率或风险,规约α=0.05,P值:表示对原假设的支持程度,P <=α时,小概率事件不可能发生,拒绝原假设,即备择假设成立,P> α时,接受原定的零假设。我们将实验的结论直观的告诉给业务方,方便业务方进行数据分析,确定实验是否置信。
3.5实验转全:实验策略的指标达到预期后,需要发起转全申请,申请应该提正式的转全邮件,内容应该包括实验背景概述、项目简介、小流量数据指标、性能数据、上线日期、下一步计划、审批人和关注人等,待审批人认可并通过审批后方可进行策略上线。
参考文献:
[1] R. Kohavi, R. Longbotham, D. Sommerfield, and R. M. Henne. Controlled experiments on the web: Survey and practical guide. Data Mining and Knowledge Discovery, 18, no. 1:140–181, July 2008.
[2]T. Crook, B. Frasca, R. Kohavi, and R. Longbotham. Seven pitfalls to avoid when running controlled experiments on the web. Microsoft white paper, March 2008. http://exp-platform.com/Documents/ExPpitfalls.pdf.
[3]石林,張景.概率论与数理统计——理论与演练[M].第1版.成都:西南交通大学出版社,2013