当前位置:   article > 正文

AB实验原理及案例实例(python代码实现)

ab实验原理

1.背景介绍:AB实验的由来

        在产品迭代过程中,每一个功能点的改进不是产品经理靠经验和拍脑袋想出来的,这就需要我们设置一个对照实验来分析功能点的改进对于我们所关注的核心指标是否有改进。运用 AB 实验,找到一部分小流量用户,并对于这部分用户提供改进的功能点,帮助我们去测试改进功能点的效果。例如:某社交APP增加了“看一看”功能,即用户之间可以查阅到对方所填写的一些基础信息,现在要分析该功能是否有效果。

2.AB实验及其原理:

    AB实验的本质就是同质样本组的对照实验。

    原理:有两个同质的样本组,对其中一个组做出某种改动,来观测这个改动对于所关注的核心指标是否有显著的影响。它的原假设是:这项改动并不会对所关注的核心指标有显著性影响。如果在做完实验后,发现p值足够小,则推翻原假设,证明这项改动会对原假设产生影响。

3.实验流程:

(1)确定实验目标和核心观测指标。

(2)确定零假设与备择假设:例如我们的核心指标为加好友率,零假设就是该功能无效果,即两个实验的加好友率无明显差异。备选假设则相反。

(3)分配实验流量:

      如果样本量太小,得出的结论容易受到偶然性因素的影响。如果样本量很大,会增加工作量,实验成本太高。 

   统计学里有最小样本量计算的公式:

   说明:1、n是每组所需样本量,因为A/B测试一般至少2组,所以整个实验所需样本量为2n;2、α和β分别称为第一类错误概率和第二类错误概率,一般分别取0.05和0.2;3、Z为正态分布的分位数函数;4、Δ为两组数值的差异,如注册转换率50%到60%,那么Δ就是10%;5、σ为标准差,是数值波动性的衡量,σ越大表示数值波动越厉害。

    可以通过 Sample Size Calculator (Evan’s Awesome A/B Tools) 这个网站得到预估的实验最少样本量。

 其中,Baseline rate是在开始实验之前,对照组的历史数据(即原来的加好友率是多少),Minimum detectable effect 是对于判断精度的最低要求,即想要提升的变化率。Statistical power =1−β,β是犯第二类错误的概率。Significance level=α,即显著性水平。

(4)小流量开启灰度实验:如果软件要推出一个新功能,或者要做一次比较大的改动,首先要进行一个小范围的测试,然后慢慢放量,直到这个功能覆盖到所有用户。灰度实验的目的是验证新模块不会造成什么特别极端的影响,可以保证整体系统的稳定。 AB实验是为了测试B版本的效果,效果好就进行,不好的话,新版本就不会上线。而灰度是为了上线,而不是为了测试效果,是为了让整个上线过程进行平稳的过渡。

(5)正式试验:确定实验周期,正式开启实验。

在设定测试时间时从以下三个维度进行考虑:

  • 最少样本量/每日可测试用户
  • 用户的行为周期:对部分行业的产品来说,用户的操作行为存在很大的周期性变化,例如电商用户的购买行为有较强的周次规律,周末流量和购买量与工作日会有显著差异,这时测试的周期应该能够覆盖一个完整的周期,也就是应该大于1周。
  • 用户适应期:如果进行的是UI改版一类影响用户体验的测试,新版本上线后用户通常需要有一个适应的过程,这时我们通常会在试验开始时给用户一个适应期让用户适应新的UI版本,然后再考察试验的结果。适应期的长短通常以足量用户流量参与试验后的2到3天为宜。

例如:某客户端当前大盘次日留存率45%,最近决定准备上线一个直播功能,预估至少提升0.2%留存率,每天只有10w的用户量可以做测试,问实验需要多久。

最少样本量为:98w,每天10w,至少需要10天
用户新鲜效应:3天
用户行为周期:周末与平时产品差异很大,需要覆盖一个周末

因此总共实验天数为10+3=13天,也就是测试大约2周

(6)采集数据,数据检验

        通过比较新实验版本和老版本是否存在显著差异(若P值小于5%,拒绝原假设,即产品功能有效果),以及计算实验结果指标的置信区间(通常选用指标的95%置信区间),从而判断新版本是否相对老版本存在显著提升或下降。

  • Z检验:一般用于大样本(即样本容量大于30)平均值差异性检验的方法。它是用标准正态分布的理论来推断差异发生的概率,从而比较两个平均数的差异是否显著。
  • T检验:主要用于样本含量较小(例如n < 30),总体标准差σ未知的正态分布。T检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。

统计显著性达到95%或以上并且维持一段时间,实验可以结束;如果在95%以下,则可能需要延长测试时间;如果很长时间统计显著性不能达到95%甚至90%,则需要决定是否中止试验。

以Z检验为例,显著性检验的步骤如下:

      1)提出假设

           原假设:Pb-Pa <=0 

           备择假设:Pb-Pa>0

 其中,P为你所设定的目标,比如转化率,以转化率的高低比较新版本的价值

     2)计算检验统计量

          由于每次实验结果要么转化成功(即样本落入B方案),要么失败(即样本落入A方案),所以A,B的分布可看作是n重伯努利分布,即二项分布:

A∼B(n,Pa​);B∼B(n,Pb​)

那么E(A)=nPa,D(A)=nPa(1-Pa)

所以样本均值E(xˉ)=Pa,D(xˉ)=Pa(1-Pa)/n,

由于总体中的Pa是未知的,所以用样本的转化率Pa^来代替Pa,即A中的样本服从

同理B中的样本服从

(注:这里我找到的资料都是这样写的,但是我自己表示存疑:若样本足够大,那么样本均值分布服从正态分布,样本均值应该等于总体均值,样本方差等于D(A)/n,那应该是E(xˉ)=nPa,D(xˉ)=Pa(1-Pa),不知道是不是统计知识不扎实还是理解有偏差,如果大家有答案的话可以告诉我 :))

所以得到如下公式:

 3)因为是双侧检验,所以若Z>Z(1-α/2) ,那么P<0.05,拒绝原假设,认为两种方案有显著差异,则拒绝原假设即新版本的效率好于旧版本。

4.AB实验中应该注意的问题:

(1)AA测试:

      当测试结果显示两个版本没有区别时,我们不能完全确定这样的结果是因为方案本身的原因还是样本质量的原因。例如购物车复购的案例,假设样本数量足够多,但很不巧的是恰好实验组里大部分都是老王这样的土豪,那么结果依旧会产生偏差。这个时候我们还需要更进一步确定,实验组里究竟有没有这样的意外因素。解决这个问题的办法是AA测试:将原始版本的流量中分出两个和测试版本相同的流量也进入测试。例如:为测试一个新的功能,我们计划分配90%流量给老版本A,10%流量给新版本B;这时我们把老版本里的90%再次拆分成【A1】70%+【A2】10%+【A3】10%,生成两个10%流量的老版本【A2】和【A3】,【A2】和【A3】相互进行AA测试,并分别于【B】进行AB测试;在试验过程中通过考察【A2】和【A3】是否存在显著性差异,就可以确定试验的分流是否有效了。

A / A测试是在企业进行A/B测试之前完成的。运行A / A测试可以帮助他们:

  • 检查A / B测试工具的准确性:在A / A测试中,如果两个被测试的版本存在明显差异,那么原因可能是一下几种:工具未正确设置;测试没有正确进行;测试工具效率低下。
  • 设置以后A / B测试的基准转换率:在进行任何A / B测试之前,需要知道基准转换率。假设正在运行A / A测试,其中,A版本在10,000个访问者中产生303次转化,而版本B在10,000次转化中给出307次。当两个版本之间没有差异时,A的转化率为3.03%,而B的转化率为3.07%。因此,可以设置以后A / B测试的基转换率范围可为3.03-3.07%。如果以后运行A / B测试并且结果在此范围内,那么就意味着结果不显着。
  • 确定最小样本的大小:比较两个类似版本的问题包含“运气”因素。由于测试是在统计基础上制定的,因此存在一定的误差范围,通过执行A / A测试,可以“查看”测试解决方案在相同版本之间最接近“完美平等”的样本大小。简而言之,通过A / A测试,可以找到使“运气”因子最小化的样本数量;然后,可以将该样本量用于以后的A / B测试。

案例:某客户端当前大盘次日留存率45%,最近决定准备上线一个直播功能,预估至少提升0.2%留存率,最终也上线了一周的数据,发现实验组与对照组留存率一直差不多(或者提升太多),怀疑是不是实验组和对照组本身就有差异。

这种情况下:测试之前应该要做一个AA测试

实验组:10w
对照1组:10w
对照2组:10w

通过对比对照1组和对照2组的留存率指标看流量分配是否有问题。

(2)关注的核心指标有显著提升,该优化功能一定能上线吗?

           不一定,一个功能方面的优化可能会导致另一个方面的劣化,在做优化提升的时候有可能还会对广告部门、直播部门产生一些负向影响,这些负向影响可能会直接导致公司收益的下降。所以在进行ab实验时必须要综合评估所有指标的变动,同时对收益和损失做一个评估才能确认这个优化可以最终上线。

(3)实验结果在统计意义上是显著的,实际不显著,为什么?

        比如对于用户启动app的优化时间是0.00001秒,这个数字在统计意义来说可能p值很小,它是显著的,但在实际中用户是不可感知这个时间的,那这个优化其实就没有太大的实际意义。

5.AB实验实例

其中gate_30 代表旧版本实验A,gate_40代表新版本实验B,retention_1:次日留存,retention_7:7日留存率

对于次日留存率这个指标:

 对于7日留存率这个指标:

 对于次日留存率指标,p值为0.07,大于0.05,无法拒绝原假设,即新版本没有改进效果

 对于七日留存率指标,p值为0.0015,小于0.05,拒绝原假设,即A方案(gate_30)的效果好于B方案(gate_40)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/354072
推荐阅读
相关标签
  

闽ICP备14008679号