AB test基于统计学远离。通过随机划分,均匀分布的假设来实现控制变量对照的作用。但是对于小样本则会面临很多问题,有的产品流量不小,但是关键指标的贡献者很少,也是小样本状态。譬如直播打赏。
常见的问题有如下两个:
抽样不均(非完全randomized)(修正bias)
背景:
单纯地随机用户分组,在用户体量够大的情况下,能保证均匀性。但是当我们相关指标用户呈现头部集中的情况,譬如top 2%用户贡献了40%的gmv,那么对这2%的用户随机分组有很大概率不均。(分组之间有偏差)。
现象:在aa中,分组一直有稳定差异。
这个问题也会出现在Observational 实验中。对于这些实验,我们无法控制使其完全randomized。问题:
如何解决这种样本量抽样不均的问题?如何解决:
方法1:解决分组偏差的方法其1就是在实验之前进行aa实验,然后ab阶段的diff减去aa的diff。[1]
方法2:其2则是通过算法找到在相应指标(如gmv)上的均匀的分组,aa保证其均匀性,再进行实验。[2]
推荐方法3:使用PSM(propensity score matching)来进行实验数据的统计评估。[3]
指标数值不稳定(variance过大)
- 背景:
我们观测的指标数值,在一定周期内呈现不稳定的状态。
现象:在aa中,无论如何随机分组,其组间diff都是不稳定的。有时候a组高,有时候b组高,或者其diff差值变化太大,时而大时而小。
这个问题的本质是variance过大,组内variance过大,甚至大于均值的差值,这个视角可以参考F-test与ANOVA
与上述问题(分组不均)是独立的两个问题,这两个问题可能都会存在。譬如就算我们成功进行了完全随机的分组,也可能因为组内样本太少,导致variance过大。
问题:
这种问题相对也是常见的,就譬如用户复购周期本身有很大diff,比如有的用户隔日购买,有的用户一周购买一次,如果我们的算法在复购这个维度上分配不均,可能导致比如两个分组前几天是稳定均衡的,在后面几天就开始出现diff。(当然,对于复购周期这个问题,在最小公倍数的周期下统计可以稳定,但是这个最小公倍数是多少无法观测,而且周期可能也太长了)但是从理论上来讲,只要样本个体足够多,就能一定程度上解决这个问题:个体数量于variance成反比,数量越大variance越小。
还有些时候,可能纯粹是因为小概率的随机性,譬如突然出现一个之前从未出现的野生土豪,购买了超多东西。这种随机性,通过历史数据的统计是无法捕捉的。当然,如何界定与评估也是难点之一如何解决:
如果出现这个问题,则是最难解决的。
方法1:降低variance最直觉的方案就是,增加样本:提升实验时长,提升实验组流量。但是增加样本成本太高,过长的决策周期也可能引入更多的不确定因素(譬如10月份的实验,多做几天就要双11大促了)
方法2:参数化评估,譬如用Linear Model,引入covariate,通过X(是否在实验组)的系数,以及系数的显著性来评估(ANCOVA),延伸还有semi-parametric method[10]
推荐方法3:核心思路在不增加样本的情况下进行variance reduction[4]
Refer:
[1]:pre-experiment数据很重要。最简单的方式,就是将ab组进行实验前的数据diff记录下来,作为原始差值,但是一般情况下,如果这个差值太大,可能用这两个组的实验数据会有较大偏差,因而会影响实验的结论。
[2]:衍伸问题1: 多维度限制下构建正交的无偏分组。
在特定指标的维度,构建无偏且正交的分组?这也是一个比较难以解决的问题。
因此,这种方案某些情况下也比较难以实操。
[3]An Introduction to Propensity Score Methods for Reducing the Effects of Confounding in Observational Studies。我们用高维的特征向量X,构建对treatment(分组)的预估作为propensity score,在各个分组内,ps相近的样本,视为类似的样本。然后对ps进行分桶,分不同桶来统计treatment的ATE(Average Treatment Effect)。这个思路本质其实也是消除X不同带来的影响(影响一部分来自X的差异,一部分来自Treatment。所以用propensity score相近的条件,来近似视为X相近。X为高维度向量,直接匹配X相近不现实,况且也不一定是X所有的维度都在分组上不均)。
- formulation很简单:
given X:covariate的情况下,treatment assignment:Z与potential outcomes 无关:
对于Propensity Score 的假设如下:
具体使用方法推荐stratification与matching:
前者按照ps分组即可(具体比如按实验组等人数划分【保证每个桶内实验组的人数是一样的,注:此时对照组的人数肯定是不一样的。】,还是其他更specific的分桶方法都可以,满足有一定的样本避免variance过大即可【数据量太少,可能会导致组内均值的diff的variance过大,Ttest也会得到较小的显著性校验结果】,分组会导致数据量减少,而数据量的减少本身也会降低statistical power,一定是propensity score做stratification 带来的提升大于数据量降低的负面作用才行,所以一般分组也不会太多。)具体步骤可以见:Stratification and Weighting Via the Propensity Score in Estimation of Causal Treatment Effects: A Comparative Study 中的2.3节
后者做matching,即按照propensity score对样本进行采样。(根据样本量选择,有无放回都可以)之后对采样后的样本进行检验即可。
PS0:当然也有IPW的方法,可以见Variance reduction in randomised trials by inverse probability weighting using the propensity score
PS1:在匹配过程中,也可能遇到无法匹配到的状态,譬如某些类型的用户只被分配到了A组,那么treatment=A的概率很高,在B组中可能找不到这样的样本。这时候也可以进行trim,直接截断去掉这些样本。(但是理论上这些问题应该尽力避免,因为这样你就无法捕捉
PS2:由于是小样本,很可能用以估计PS的样本量也很小,所以此处用的模型可能就不要(也不需要)太复杂以防overfitting。(在这里,当我们只用样本的抽样做估计的时候,会存在overfitting问题,如果是全量数据,其实不存在overfitting【本身就没有testing的过程】,这种情况,可能也不需要特别复杂的模型,因为可能再复杂的模型,也无法提升拟合程度)
PS3:关于covariate的选择,核心选择是confounder(即影响结果,又影响分组的变量【其实这里的causality定义也是模糊的,更多就是correlation】),当然,由于我们可能并不知道对outcome有影响的变量中,哪些变量是对treatment有影响的(单纯从correlation角度讲就是,分布不均),所以可以将所有与outcome相关的都加入。所以这里引入两个问题
第一:如果只对结果有影响,会怎样?这里其实不会造成特别的影响,因为该变量对预估treatment应该是无关的。
第二:能否引入只对treatment有影响的变量?这样其实没有意义,因为本质我们是想在AB组找到匹配的X,如果某变量只对treatment有影响的变量,则这个变量其实不需要match。
第三:本身无法匹配的变量怎么办,譬如uid?因为PSM本质是X的匹配,所以无法匹配的变量是不能加入模型的,因为这样会导致AB间没有可以匹配的分数。(加入uid,模型完全能直接准确预估分组,A组p=1,B组p=0)。更进一步,ABtest的假设本身也是:在个体间具有可比性:即个体1接受treatment后的指标与个体2不接受treatment的指标是可以比较的。而match本身的意义是控制变量,如果控制了uid这个变量,即认定个体间【不同uid】不可比,那实验本身的假设就不成立了。所以uid本身不能参与outcome的causality作为confounder。PS4:关于模型的验证:1、模型本身的metric。2、用该方法在AA实验中验证。3、验证类似分数下,X变量的相似性(不过这个方案感觉本身意义不大)。4、以及更直觉的方法评估,在真实实验中,验证这种方法能否用更小的样本(时间)作出正确的决策(ground truth正确的决策由更长时间,样本量的实验来给出)
- PS5:注,当我们研究的变量是总GMV等,其实metric是针对所有用户的GMV和,但是我们Propensity Score是在用户维度计算的,这里是不匹配的。所以一种方式是我们要将研究的目标变量替换成GMV均值,但是这里其实是有问题的,因为总gmv提升显著不一定人均提升显著。
能否参考Control Variate中的Variance计算?(TODO:这个方法假设实验组对照组的metic是独立的,这里似乎有点问题,因为做了matching后理论上就不是independent的了)
另外,paired test如何进行。
- TODO:此处显著性计算?Matching方法可以直接计算显著性,但是这个显著性本身其实是有问题的,因为只要你增大Matching的数量,显著性就会提升。对于Stratification方法,每个分组的显著性也可以直接计算。但总体差异的显著性如何计算?
[4]:variance reduction。
其实有很多思路,譬如在Monte-Carlo Simulation中的Stratified Sampling。
其中一个非常基本,非常直觉,也非常重要的推论是:降低单个分组(AB组)本身指标的variance,与降低Treatment effect的variance是等价的。
因为可以认为是独立的,所以:
方式1:stratification的方式有at-assignment,即进行stratified-sampling 进行分组。post-assignment,进行 post stratification。stratification通过剔除组间方差的方式降低variance。实现起来非常简单,找好分层参数X,根据X取值分为n层。得到新的差值
核心公式:
注:是组内均值的variance的加权和是每组的样本方差,除以样本量n可以理解为第k组的均值的方差。即组间均值被分组covariate解释掉了。因此在计算p-value时,这种方法能得到更显著的结果。方式2:Control Covariate:这种方法可以针对continuous variable进行修正。
用pre-experiment的特征covariate X来拟合我们的目标metric Y,拟合单位为每个样本(用户),此处用OLS直接拟合线性最优解即可。
核心公式:
注:
SSE:sum of squares of residual(Error)(unexplained variation)
SSR:sum of squares of Regression(explained variation)
SST:sum of squares of total(total variation)
满足
得:即可计算
注:在实验中,treatment 与 control组的参数需要一致,所以直接用两组的数据预估即可,与可以用以上相同的办法算出。根据上述等式,带入来求解。用sample variance作为总体variance的估计,注意,在未知总体均值的情况下,样本方差的自由度为
https://www.zhihu.com/question/36524138根据上述的reduced Variance,进行p-value计算:根据Z-statistics(数据量小时可以用T),能分别得到对照组:与实验组:的variance,整体实验的显著性校验如下:
见Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data以及Improving the Sensitivity of Online Controlled Experiments: Case Studies at Netflix
https://booking.ai/how-booking-com-increases-the-power-of-online-experiments-with-cuped-995d186fff1d
上述两种方法,本质我们都是用一些维度变量(covariate)上的信息来解释整体的variance:也类似ANCOVA。covariate选取的要点是,该变量必须是实验treatment无关的(不受实验影响)。可以证明的是,对于离散变量。使用stratification与Covariates Control是等价的。
[5]: statistical power and p-value : https://www.quora.com/What-is-the-relationship-between-statistical-power-and-the-p-value
[6]:anova and linear regression,其他ABtest相关,https://github.com/DSXiangLi/Paper_CausalInference_abtest
[7]上述两个问题解决方法的差异:
1、解决不均问题,调整了结论(通过PSM计算出来的均值diff,可能跟直接计算出的结论完全不同)
2、解决variance问题,用covariate解释了variance,但是没改变结论
[8]一些其他的思考:
我们每日实验统计,作为单独的对照,是否也是stratified by each day?
[9]关于检测对象的问题。
首先,针对上述方法,我们analysis unit都是用户,randomization unit也是用户。所以可以直接进行variance的计算,以及p-value的检验。但是当我们分析的对象不是用户时,比如是“每日总GMV”,此时需要作出一些修改。(这里相当于要将所有数据进行日级别的聚合,analysis unit是day)
本质就是:ATE本来是在用户级别算average的,现在要在天级别算average。
前提结论1,总体的指标(Total Treatment Effect)差异显著与均值(Average Treatment Effect)差异显著等价。
假设:,为我们感兴趣的目标变量,譬如用户的gmv,为用户总数,Totally Effect
下面我们进行假设检验的等价性的证明即:与是等价的,分别计算T-statistics:
即,两者是等价的。所以原则上,可以直接转变为检验ATE是否显著。前提结论2,我们之前按天算的 Daily Treatment Effect与Total(average) Treatment Effect在特定条件下等价:当一个组内,天与天之间的样本都是独立同分布时,DTE与ATE是等价的。
identical:即用户不同天的指标都来自于同一个随机变量【譬如来自于长尾分布,那么一天的样本即是对进行n次采样获得。但是当某天有活动时,很大概率,这也不是同分布了】。
independent:且天与天直接互不干涉【实际上某些情况下,这个假设过于强烈了。譬如购买gmv,当用户的总预算受限,其每天的值就并不是独立的】)
对于DTE的校验来说,我们将每日的diff记为随机变量,检测该随机变量在AB组的均值差异。我们形式化一下:分别为A组,B组第个用户,第天的,为天数,总用户数量
设两组的总差异:
DTE:
ATE:
所以两者的理论值等价。
当且仅当天与天的差值独立同时如下式子成立:
(即我们当前分天数据均值variance的计算方法)
当且近当个体的和互相独立时,如下式子成立:
(即我们当前用户指标均值的variance的计算方法)
所以,两者期望一致的一个充分条件是,所有个体分天数值独立同分布。
详细推导:-
- a) DTE做T test的理论值:
每天均值的diff:
(天与天之间独立同分布假设)
均值的variance:
(这里每天直接配对做了AB组的差,其实不需要假设AB独立)
(AB组独立假设,这个假设在任何AB实验中一致)
所以理论值
(带入上述的方差)
- a) DTE做T test的理论值:
-
- b) ATE进行T(Z)检验时:
(AB组独立假设)
- b) ATE进行T(Z)检验时:
可以看出,DTE与ATE在当前假设(个体的指标的分布与weekday无关)下,理论值是等价的。
- 相关推断1:当每天的数据不是独立同分布的时候,分天DTE与ATE是否等价?要分情况讨论
1、d是否满足正太性检验?
前提:原来在假设每天独立同分布的时候,根据中心极限定理,每个组的采样的均值是满足正太分布的,则其差也符合正太分布。
由AB组独立假设:
当每天方差不同时:,可以得到
即,差值每天理论的方差也是不同的,当天之间的方差差别很大的时候,则样本不满足正太性假设,所以理论上也不能用分天T检验。(这种情况理论上无法进行T检验,所以当然也不等价了)
2、当d满足正太性检验时
这种情况下,其实可以进行Ttest。实际在计算中,按照原来的计算方法,根据样本方差做Ttest。
所以这里算出来的
对DTE来说:
(每天差值独立同分布下成立)
对于ATE来说:
(这里只有当AB组相互独立的时候,才能等价)
由上面可知,只要AB组独立,ATE就与DTE是等价的。
由于:
所以其实DTE这种算法也没有消除不同天之间的差异性。当然,由于协方差的方向性(即项只和不一定会大于0),所以消除它们不一定能提升检验显著性。这里直觉上也很好理解,譬如:当用户的总预算一致的时候,直接求和的方差可能更小一点,而分天求再计算方差会更大。
- 前提结论3:关于分天匹配检验的逻辑:
由于不同weekday本身也带来了差异(每天的条件,活动),所以我们平时用的检验方法是,进行分天T配对样本检测,但这个方法并不是为了消除天之间的差异,而是为了保证在AB组不独立的情况下能进行检验。
这样每天本身的差异就消除了(比如其中某一天有统一优惠)。我们其实可以简单地检验下分天的均值方差是否相等,(目前看是差异比较大的)。要解决的方案也是比较简单地,即在后续降低Variance的方法中加入weekday作为Covariates。
原本计算ATE的variance时为直接计算用户粒度的
加入weekday后,注意计算的粒度发生了变化,计算Daily ATE:,分子也需要由总用户均值差转变为Daily 用户均值差(虽然就算直接均分解掉variance,理论比例就是,但是这里分子也,所以理论检验出的p值在weekday本身不能解释个体变化的情况下也是一致的【符合预期】)。
PS:注意,weekday并不一定能带来variance的降低,因为我们要解释的是用户间的差异(个体间的variance),而weekday这个变量对所有用户是相同的,如果所有的用户都经历了weekday1~weekdayn。可能需要与别的covariate交叉。
- 对于PSM stratification的方案:一种非常直觉的方案就是,不改变每日对照匹配的基本模式,引入人数的因子,将人均期望转换成总期望。(这个方式是合理的,因为PSM本身其实是一种修正bias的方式,总的期望与均值的期望都是经过矫正后的值。)
1、通过调整后的均值(每个stratum得到)通过(当前语境下对照组人均gmv)来计算“在与实验组treatment group相同人数的条件下,对照组的期望总GMV",分stratum进行计算后,即可汇总成当日的总GMV
2、依旧按照T-test的框架,研究对象为匹配样本(每天)gmv的差,
对于PSM Matching的方案:与上述方法类似,不改变每日对照匹配的基本模式,得到ATE后,将其转换为总GMV期望。然后后续检验方法一致。
对于Variance Reduction中Covariate Control的方案:
最直接的方式,我们修改我们DTE的目标变为ATE,理论上,这是一个更直接的指标,能够帮我们更好地决策。但是之前的问题是,由于成熟的产品中,实验的影响会非常的小,而用户购买的GMV本身的variance又非常的大,我们很难得到一个很显著的结果(这也是我们之前用DTE来评估的原因之一)。然而通过Variance Reduction的方案,我们可能可以极大地降低variacne,以此获得可靠的实验结果。
当然,这里其实还是有很多样本选择的问题,比如如果只选择购买的用户能降低整体variance?但是产生selection bias,导致影响购买与否的效果被忽略。对于Variance Reduction中Covariate Control的方案2:
见上述论文 4.4 Handling Non-User Metric,appendix b: GENERALIZATION TO OTHER ANAL- YSIS UNIT
我们用最基本的方式可以计算出后,便可以计算
[10]:Improving the Sensitivity of Online Controlled Experiments by Utilizing Pre-Experiment Data见,2.3semi-parametric method,2.2parametric method(ANCOVA)的问题是:使用了线性模型,且要求Covariate包含所有的confounder(residual与输入无关的必要条件,如果有一些实验的treatment assignment非完全随机,明显受到一些因素的影响时,会比较麻烦,需要把这些因素全部纳入。
[11] U statistics
https://en.wikipedia.org/wiki/Mann%E2%80%93Whitney_U_test以及
https://tech.ebayinc.com/engineering/significance-testing-for-ratio-metrics-in-experiments/
[12]A Decision Theoretic Approach to A/B Testing
[13]连续推断导致FDR提升,Always Valid Inference: Continuous Monitoring of
A/B Tests
[14]:Tests for Two Proportions
[15]多变量:Variance Reduction
Three Approaches to Control Variates 3.2 Multiple Control Variates
[16] 二分变量(比例)的test:### Hypothesis Testing for Means & Proportions