最近更新时间:2023.05.12 17:31:33
首次发布时间:2021.02.23 10:41:55
为了验证一个新策略的效果,准备原策略A和新策略B两种方案。 随后在总体用户中取出一小部分,将这部分用户完全随机地分在两个组中,使两组用户在统计角度无差别。将原策略A和新策略B分别展示给不同的用户组,一段时间后,结合统计方法分析数据,得到两种策略生效后指标的变化结果,并以此判断新策略B是否符合预期。
互联网行业的A/B实验中,流量通常用于描述产品所拥有的总体用户数量。
开A/B实验时,一般都会小流量测试,当看到某个实验组效果后,再大流量测试,最终再全量上线。
实验组和对照组是一组相对的概念,A/B实验通常是为了验证一个新策略的效果。假设在实验中,所抽取的用户被随机地分配到A组和B组中,A组用户在产品中体验到新策略,B组用户在实验中体验的仍旧是旧策略。在这一实验过程中,A组便为实验组,B组则为对照组。
互斥组,也称互斥层、实验层。 互斥实验,指的是互斥组中的所有实验都不会共享用户,开在同一实验层的多个实验中,流量只能命中其中一个,即同层实验的流量之间是相互排斥的。 如果一个用户/设备命中了实验A,就不会命中该互斥组中的其他实验。
假如现在有4个实验要进行,每一个实验要取用30%的流量才能够得出可信的实验结果。此时为了同时运行这4个实验就需要4*30%=120%的流量,这意味着100%的流量不够同时分配给这4个实验。
那么此时我们只能选择给实验排序,让几个实验先后完成,但是这样会造成实验效率低下。实验层技术就可以完美解决这个问题:
实验层技术是为了让多个实验能够并行不相互干扰,且都获得足够的流量而研发的流量分层技术。
我们把总体流量“复制”无数遍,形成无数个流量层,让总体流量可以被无数次复用,从而提高实验效率。各层之间的流量是正交的,可以简单理解为:在流量层选择正确的前提下,流量经过科学的分配,可以保证各实验的结果不会受到其他层实验的干扰。
互斥实验:互斥组中的所有实验都不会共享用户,如果一个用户/设备命中了实验A,就不会命中该互斥组中的其他实验。
- 举例,你要同时做按钮颜色和按钮形状的实验,就需要将两个实验加入到一个互斥组列表。
互斥组=互斥层=实验层
如何理解流量正交?
举个例子。假设我现在有2个实验。实验A(实验组标记为A1,对照组标记为A2)分布于实验层1,取用该层100%的流量;实验B(实验组标记为B1,对照组标记为B2)分布于实验层2,也取用该层100%的流量。(要注意,实验层1和实验层2实际上是同一批用户,实验层2只是复用了实验层1的流量)
如果把A1组的流量分成2半,一份放进B1组,一份放进B2组;再把A2组的流量也分成2半,一份放进B1组,一份放进B2组。那么两个实验对于流量的调用就会如下图所示。此时实验A和实验B之间,就形成了流量“正交”。
流量正交有什么意义呢?
在开一个实验时,你需要通过一个标识来区分对照组和实验组,我们用参数来解决标识的问题。在A/B测试的实验中,每一个对照组和实验组可以有1个参数也可以有多个参数,每个参数都会有参数类型(目前支持String、Number、Boolean),每个参数还会有参数值。
在开一个实验时,目的是对比对照组和实验组的某个或者某几个指标。
在实验中增加一些限制条件,规定被实验命中的用户必须符合(或不符合)这些条件,进而达到缩小用户集群、精准找到用户的目的,这种限制条件即“过滤条件”,亦称filter。
在实验正式开启之前,通常需要先选择几名用户进入测试阶段,观察实验是否能够正常获取想要收集的数据,或客户端是否有bug等。参与这一步的用户被称为“白名单用户”。
用户经过随机分配后,进入实验组或对照组,参与到实验之中,即称为用户被实验“命中”;反之则为“未命中”。
即A/B实验持续的时间长度,在「A/B 测试」产品中,时长的单位是“天”。
SDK 就是Software Development Kit的缩写,中文意思就是“软件开发工具包”。
辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”,我们可以把SDK理解成一个小型工具包,来实现指定的功能,帮助我们解决指定的问题,A/B测试SDK的主要作用就是帮助实验者进行分流。
WAU(Weekly Active Users),周活跃用户数,最近一周(含当日的7天)启动使用产品的用户数,一般按照自然周进行计算。
MAU(Monthly Active Users),月活跃用户数,最近一个月(含当日的30天)启动使用产品的用户数,一般按照自然月进行计算。
方差的计算公式:公式中 x̅ 为数据的平均数,N为数据的个数,s²为方差。
实验报告中的留存率指的是“按进组时间拆分的留存率”,是根据【用户首次进实验组的时间】作为起始,用户回到App作为回访,计算用户n日留存。
统计方式如下:
规则 | 处理逻辑 |
---|---|
分组方式 | 首次进入实验组的用户 |
归因方式 | 把留存用户按照进组时间划分,分别归因到首次进组的时间 |
回访规则 | 回到APP即视为回访。 |
举个例子说明:
- 第一天实验组A的用户数为:10000,第一天base_user为10000。
- 第二天实验组A的用户数为:10400,其中9200用户是第一天便已经在A中的用户,1200用户为当天新进组用户;第二天base_user为1200,第一天的次日留存为9200/10000=92%。
- 第三天实验组A的用户数为:10200,其中8000用户为第一天便已经在A中的用户,1100用户为第二天进入A中的用户,1100为第三天进入A的用户;第三天的base_user为1100, 第一天的2日留存为8000/10000=80%, 第二天的次日留存为1100/1200=91.67%。
- 然后分别把每个进入实验日期的指标用base_user进行加权平均,得到次日留存率、第2天留存率等。
当日"已进组用户" 表示当日曝光进组的总用户数,包括之前已进组的老用户和初次到访的"新进组用户"。
置信度区间就是用来对一组实验数据的总体参数进行估计的区间范围。
举个例子,我们现在开了一个实验来优化商品页面的用户购买率,其中采用了新策略B的实验组,购买率提升均值为5%,置信区间为[-3%,13%]。
怎么理解此处的置信区间呢?
由于在A/B实验中我们采取小流量抽样的方式,样本不能完全代表总体,那么实际上策略B如果在总体流量中生效,不见得会获得5%的增长。如果我们设策略B在总体流量中推行所导致的真实增长率为μ,那么在这个案例中,μ的真实取值会在[-3%,13%]之间。
值得注意的是,μ并不是100%概率落在这一区间里,在计算置信区间的过程中,我们会先取一个置信水平,计算这一置信水平下的置信区间是多少,A/B实验中我们通常计算95%置信度下的置信区间。回到刚刚的例子,我们就可以得知,μ的真实取值有95%的可能落在[-3%,13%]之间。
“多天累计指标”是所选实验日期范围内,对应指标多天合并的累计值。
举个例子,假如现在我们要看6月1日到6月3日,用户A、B、C的用户阅读数这一指标:
6月1日 6月2日 6月3日 多天累计指标 用户A 13 0 16 29 用户B 5 3 4 12 用户C 7 8 12 27 上表中的数字关系很清晰地展示了多天累计指标与单日指标之间的逻辑(即加在一起)。
在A/B实验中,如果我们所检测的指标支持多天累计指标,那么我们基本上应该以多天累计指标为准,而不要过多关注实验周期内的单日指标。
多天累积数据意味着,随着实验的进行,实验的总体样本不断增加,实验的检验灵敏度在不断提高。
开设A/B实验,顾名思义,我们至少需要一个A组和一个B组,那么究竟是什么决定了哪些用户被实验命中,以及哪些用户进入A组/B组呢?就是靠A/B实验分流服务。
A/B实验的核心统计学理论是(双样本)假设检验。假设检验,即首先做出假设,然后运用数据来检验假设是否成立。需要注意的是 ,我们在检验假设时,逻辑上采用了反证法。通过A/B实验,我们实际上要验证的是一对相互对立的假设:原假设和备择假设。
利用反证法来检验假设,意味着我们要利用现有的数据,通过一系列方法证明原假设是错误的(伪),并借此证明备择假设是正确的(真)。这一套方法在统计学上被称作原假设显著性检验 null hypothesis significance testing (NHST)。
举个例子:
我们要针对某页面的购买按钮做一个实验。我认为:将购买按钮的颜色从蓝色改为红色,可以提高购买率3%。在这个实验中,我们想通过统计学检验的“原假设”就是“购买按钮改成红色不能提升购买率”;“备择假设”就是“购买按钮改成红色能够提升购买率”。这是一对互斥的假设。也就是说,实际上我们要证明的就是“改成红色不能提升购买率”是错误的。
在统计学中,我们用显著性水平(α)来描述实验者犯第一类错误的概率。
当某个实验组的指标是显著的,说明这个实验结果大概率是可信的。这个概率是95%,也就是说,系统有95%的信心确认这个实验结果是准确的。
显著性水平存在的意义是什么?
一个按钮从蓝色改成红色,一个窗口从左边移到右边,到底用户体验会变好还是变差呢?我们并不确定,因此我们试图使用A/B实验的办法,帮助我们转化这种“不确定”——观察小流量实验中新旧策略的表现,从而确定新旧策略的优劣。
但是,这样就能完全消除不确定性了吗?答案是不能,因为存在抽样误差。
- 举个例子,假设瑞士人均收入为中国的十倍,那么随机抽三个瑞士人和三个中国人,能保证样本里这三个瑞士人的平均收入是三个中国人的十倍吗?万一这三个中国人是马云,王健林和一个小学生呢?
- 反过来想,假设在1%的流量下,组A(按钮呈红色)比组B(按钮呈现蓝色)购买率高,将流量扩大至100%,能保证策略A的表现仍旧比策略B出色吗?显然,我们还是不确定。
抽样误差带来的不确定性,使得我们在做小流量实验时,永远没法保证结论是完全正确的。幸运的是,对于抽样的不确定性,在统计学中,我们有一套方法来量化这种不确定性到底有多大,这便是显著性水平(α)存在的意义。
在统计学中,统计功效 = 1 - 第二类错误的概率,统计功效在现实中表现为:我的新策略是有效的,我有多大概率在实验中检测出来。
在实验的过程中,我们所抽取的样本流量实际上与总体流量会存在些许的差异,这些差异就决定了我们通过实验得出的结论或多或少会存在一些“误差”。
举个例子,实验中,我通过改变落地页的颜色让购买率提升了3%,但是因为样本流量并不能完全代表总体流量,有可能“我改变颜色这一策略其实没用,购买率提升3%是抽样结果导致的”。
那么发生这种“我的策略其实没用”事件的概率有多大呢?在统计学中,我们会用“显著性水平(α)”来描述发生这一事件的概率是多少。而置信度=1-α。
在「A/B 测试」产品上,根据业界标准,显著性水平α取0.05。在A/B实验中,如果发生“我的策略其实没用”这一事件的概率小于0.05,我们即称实验结论已经“统计显著/可置信”。这意味着你采取的新策略大概率(A/B实验中意味着大于95%)是有效的。相反,如果这一事件的概率大于0.05,则称实验结论“不显著/不可置信”。
显著性水平的理论依据便是中心极限定理。我们可以量化抽样误差的根基在于中心极限定理的存在。
什么是中心极限定理?
- 由于存在抽样误差,我们每次实验所得到的指标结果,都可能与我们期望得到的真正结果有误差。假设我们从总体中抽取样本,计算其指标的均值,每一次计算,样本均值都会受抽样误差影响。假如我们做无数多次实验,那么理论上,这无数多个样本均值中,总应该有一个是“真的”,不受抽样误差影响的,这个值在统计学里被称为“真值”。
- 中心极限定理定告诉我们,如果我们从总体流量里不断抽取样本,做无数次小流量实验,这无数次抽样所观测到的均值,近似呈现正态分布(就是下图这样的分布)。这个分布以真值为中心,均值越接近真值,出现的概率就越大;反之均值越偏离真值,出现的概率就越小。
PS:此处为了便于理解,放弃了阐述统计学概念,仅从A/B实验场景下出发,解释中心极限定理。
为什么样本均值越接近真值,出现的概率越大?
举个例子,如果从全中国人这个总体中,抽取很多很多次样本,计算很多很多次平均收入。
可以预见,我们会因为样本不同而得到很多个不同的平均收入值。这些数值确实有可能因为偶然抽到顶级富豪而偏高,或因为抽到极贫困的人口而偏低。但是,上述两种情况毕竟是少数(均值越偏离真值,出现的概率小)。随着抽样次数增多,我们会发现,平均收入落在大多数普通人收入范围内的次数,会显著增多(均值接近真值,出现的概率大)。并且,有了中心极限定理的帮助,我们可以知道每个均值出现的概率是多少。
假设您对某指标的预期目标提升率为1%
- 如果此时MDE=0.5%,MDE < 预期提升值,说明指标变化真的不显著,请结合业务ROI和其他维度里例如用户体验、长期战略价值等来综合判断是否值得上线;
- 如果那此时MDE=2%,MDE > 预期提升值,说明当前能检验出显著性的最小差异值是2%,由于灵敏度(也就是校验效力)不足未能检测出。这种情况下建议增大样本量,例如扩大流量、再观察一段时间积累更多进组用户,指标还有置信的可能。