ABTest之最常见的八个错误


A/B testing是一切以数据为驱动的公司的常用工具和一大迭代开发利器,在此我们总结出最常见的十个错误,希望大家以后能够避免。

1. P-value给出了得出该实验结果的概率

P-value应该是A/B testing中最容易被误解的概念,而且错误的解释千奇百怪,其中最常见的一个就是“P-value告诉我们得出该实验结果的概率,比如P-value=0.1,说明我们有90%的概率拿到该实验结果”。实际上P-value描述的是随机性,指的是在虚无假设(Null hypothesis)为真的情况下,得到该结果的概率,即在treatment和control没有区别的情况下(A/A实验)得到该数据的概率。所以P-value=0.1,意味着有10%的A/A实验就可以得到该实验结果。P-value越高,实验结果由随机性得到的概率就越大。当P-value低于我们设置的显著性闸值(alpha value,常用0.05)时,我们认为由随机性得到该实验结果的概率较低,该实验结果主要由于treatment和control间差异导致,因此我们说该实验结果显著。显著性闸值可以根据业务自己设定,对于稳定性要求较高的业务,可以选择更低的P-value(比如0.01);对于希望更新迭代更快的业务,可以选择更高的闸值(比如0.1)。

2. 实验前无假设,想跑跑看看结果再说

实验前无假设是后面介绍的很多错误的直接原因。A/B testing本质上是一个假设检验的过程,如果没有实验假设就不应该跑实验。实验假设包括三个组成部分:

a. 因果假设:比如:预期改变xxx可以提高用户使用率,从而提高人均用户gmv;
b. 提升的指标及数值:比如:提升人均gmv 150美元,提升人均使用时长5%等;
c. 不会改变的指标:比如:此实验不会改变app闪退数,不会改变app首次打开的平均延迟等;

有这三个部分才是一个完整、合理的实验假设。其中最重要的是a,因为有了因果假设,才会在实验前做好埋点,从而拿到足够多的log来分析,以支持自己的结论。实践中我们见过太多的实验,拿到了正向的结果,却由于实验前无假设,找不到足够的log来分析、解释本次实验结果,导致实验无法上线需要后续重跑补log的情况。这三个部分中最难的是b,很多实验者反映实验前无法给出准确的指标提升数值的期望。这个需要和业务DS多沟通,因为任何新功能的上线、维护都有成本,我们都会有期望拿到的最小收益,而不会不计代价,即使是只要不跌就上线的情况(常见于第三方库版本升级的情况,此时我们给出一个最坏的负向期望,如-0.1%,并做单尾检测)。同时,随着做的实验越来越多,对业务认识越来越清晰,后续一个改变大概能拿到多少收益是可以估算的。

3. 时时刻刻关注实验结果,只要结果一显著,就结束实验并上线

这是一个典型的多比较(multi comparison)错误,叫P-value peaking。假设我们跑A/A实验,alpha-value设为0.05,因此每天有5%的可能实验达到显著,如果我们连续观测10天,任何一天都不显著的概率约只有59%,如果观测更长时间,意味着一定可以找到一天实验结果是显著的,按此方法,任何实验都能显著并上线。因此,正确的实验方法是根据实验假设,得到最小样本量,在实验达到最小样本量后再来分析数据和显著性,以决定是否上线。因为在实验达到最小样本量前,P-value往往在显著与不显著间反复跳跃,可以忽略。同时,为了防止假阳性,往往要求实验即使达到最小样本量,也要持续显著多天,再来决定是否上线。

4.实验整体不显著,但在部分城市显著,因此功能只在部分显著城市上线

这也是一个典型的由于纬度下钻导致的多比较错误,很常见。正如问题4所指出的,只要分析的维度足够多、分析的城市足够多,一定能找到一个显著的维度,所以不能据此就说实验在这个维度显著并上线。另外需要指出,下钻的维度往往尚未达到最小样本量的要求。比如有北京、上海、宜宾3个城市,北京、上海的用户数是宜宾的10倍,同时指标在三个城市的方差相同。如果在3个城市分别做实验,假设分别需要10天,10天,100天才能达到最小样本量,这时如果在3个城市一起做一个整体实验,则只需要5天就可达到最小样本量。但按城市维度分析时,3个城市明显均未达到最小样本量的要求,因此其显著性应被忽略。维度下钻分析只是有助于形成新的实验假设,正确的实验方法是在实验整体不显著后,按维度进行分析,在显著的维度(如城市)再进行一次实验,看假设是否得到验证

5. 实验不显著,延长实验时间即可

这是很多实验者在实验达到最小样本量很长时间后,还不愿结束实验的主要原因。实际上在绝大多数情况下,延长实验时间对实验结果不会产生任何改变,实验只要达到最小样本量即可。但是有如下情况确实延长实验时间会有帮助:

a. 指标方差估算有误,因此最小样本量计算错误;
b. 发现实验存在明显的周期效应(周末和平时),延长实验时间获得更多周期的数据,从而更好的帮助分析实验;
c. 实验假设调整,比如开始假设可以提高某指标5%,在达到最小样本量后发现只提高了4%,但尚不显著,讨论后调整假设到4%,重新计算最小样本量后并延长实验时间;

上述c较常见,但是一定注意,如果频繁调整实验假设,会犯多比较错误。因此我们还是如2所建议的那样,在较难估计实验收益的情况下,按本次试验所能接受的最小收益来估算样本量;

6. 将90%的流量给treatment,10%给control,或者做A/B/n实验(一个control多个treatment)能够更省样本,实验周期更短

对于常规的A/B实验,根据计算公式,想让最小样本量尽量小,需要让综合方差(variance of pooled control)尽量小。因此流量分配应该按control/treatment方差比例来分,比如control的方差是treatment两倍,则control流量应该占66.67%,treatment占33.33%。在不知道treatment方差的情况下,一般假设方差不变,因此50%-50%的流量分配情况下所需最小样本量最小。对于A/B/n的情况,看似合并control省了很多流量,其实由于为了避免多比较问题(一个control用了多次),A/B/n实验需要做P-value校正,因此所需样本量反而更多。另外,非均衡流量(unbalanced)实验往往会引起资源分配不均、训练数据量不等等其他潜在问题,对实验结果正确性有较大影响。因此,对于实验我们建议50%-50%的流量分配方案,对于验证treatment上线结果是否符合预期,我们建议90%-10%的方案

7.认为实验前A/A不平则本次实验结果不可信

实践中我们收到很多客服问题,说实验前A/A已经显著,怀疑分组不均、要求调平并放弃本次实验结果。其实这是不正确的,因为只有在很少的情况下才需要A/A调平或重新分组。首先,衡量A/A是否不平不能只看某一次A/A的实验结果,需要大量的A/A实验,看是否有5%(若alpha value设为0.05)的实验结果显著,一次A/A实验的一个指标显著不能说明问题(至少需要看看一次A/A实验是否有5%的时间是显著,或关注的指标中是否5%是显著的)。这个工作由Apollo团队进行。其次,在没有系统性问题的前提下,A/A显著主要是随机性所致,而随机性是无法消除的,当前A/A结果显著,不代表明天依然显著(如4所述,P-value的值一般是显著与非显著间反复跳跃的),同样在重新随机后不显著,不代表明天依然不显著。也就是说重新分组重新跑实验并无法解决随机性的问题,与之前分组效果本质上一样。因此,我们建议实验者相信Apollo系统,不用自己跑A/A实验,整个系统的正确性由Apollo保证。但另一方面,在某些情况下,重新分组确实能够解决问题:

a. 系统bug,随机分组不是每次都随机
b. 某个维度下样本量过小,导致A/B组分配不均

8. 实验设计不考虑延迟效应(carry over effect)问题

carry over effect是指进入过某次实验的用户,会对该类实验效果有期望效应,从而影响实验结果。这是一个实验设计问题,在用户做系列实验时很容易忽略。比如,我们设计实验,在页面上某个按钮加个放大动画,点击后有优惠券领取。实验效果很好。后来,我们认为按钮换个动画效果,提升更大,因此想马上再做一个实验。但是这个时候,进入第一次实验treatment的用户拿到优惠券后,部分人群会有期望效应,一看到按钮动画就假设还有优惠券,从而会增加愿意点击意愿,因此会推高第二个实验的实验效果。正确的做法是,第二个实验需要将所有进入过第一个实验的用户都过滤掉(等同于同一层同时做两个互斥实验),再来看实际效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值