我所在的公司是一家酒店OTA行业的互联网公司,作为一名数据算法工程师,每天的工作主要是数据清理、特征工程、训练测试模型以及线上模型平台开发等相关工作;除此之外,在这样一个以产品运营为主的公司经常会跟运营的数据分析师和产品经理合作,开发运营相关的模型。模型上线之后效果评估主要依赖的是AB系统的指标,然而AB系统的开发人员有时候并不熟悉统计知识,而且凡是系统都有 bug,为了客观公正地评价模型的效果,我深入了解了我司的AB系统,复习了统计知识的同时,也发现了很多问题,下面分几篇文章来分享一下。
AB系统的主旨就是灰度发布新策略(B组),通过观察实验组(B) 与对照组(A)在数据指标上的差别来决定新策略是否可以带来好的效果,值得上线。首先介绍两个概念:分组,分层
分组
在分组上一般是ABC 或ABCD四个组, 其中ACD 都是维持线上原策略,B组采用新策略。留出ACD的目的是为了能够观察AA的指标,理论上,相同策略的组,在指标上应该是不显著的,如果AA显著这时往往数据积累不足,需要等待AA不显著才能开始观察AB指标的情况。每组的流量应尽量均匀,这样AA容易稳定。
分层
同时在线的实验往往很多,以针对用户的实验为例,如果分流系统将 uid 分组的算法如果是固定的,那么就需要加一个分层,即使每个用户在不同实验中要随机分组,例如user_a, 在实验1中在A组, 在实验2中在ABCD任意一个组的概率是均等的。
为什么要有分层?
我们可以举一个例子,假设实验1的新策略是使得某个指标上升了50%, 实验2的指标是使得某个指标降低了50%, 如果两个实验的分流策略完全相同,都是分ABC三个组,比例是34:33:33。
如果没有分层:对于落在AC组的人保持了原有策略,B组则实验1和实验2的策略叠加,导致指标先升一倍再降一倍或先降后升(理想情况下),最终B组指标没有变化,那么对于实验1,实验2 实验指标都是不显著变化。
如果有随机分层:从实验1的角度看, 实验2的策略组将按比例分在实验1的ABC里,则在计算实验1的AA或AB时,这部分影响将抵消(理想情况下),那么实验1里ABC主要的差异在实验2的策略上是无偏的,即不会受实验2影响。
下一篇介绍统计的一些概念,如假设检验,第一类错误α, 第二类错误β,实验最小样本量的计算等。