10|常见误区及解决方法(上):多重检验问题和学习效应

你好,我是博伟。

上节课,我们讲了一个在做A/B测试时普遍存在的一个问题,那么接下来,我就根据自己这些年做A/B测试的经验,精选了一些在实际业务中会经常遭遇的误区,主要是多重检验问题、学习效应、辛普森悖论和实验/对照组的独立性这四大误区。

这四个误区,其实也可以被看作在实际业务中经常出现的几个问题。不过我在题目中之所以强调说这是误区,是因为你很可能会在这些问题的理解上产生一些偏差。

所以接下来我在讲这两节课时,会按照“问题阐述—问题解析—总结引申—课后思考”的范式来给你讲。也就是说,我会先带你深入剖析问题的成因,然后再举例分析这些问题在实践中的表现形式,最后给出对应的解决方法。

毕竟,在搞清楚问题原理的前提下,再学习问题的表现形式和解决方法,不仅你的学习效果会事半功倍,而且在实际应用时,你也能根据变化多端的业务场景,随机应变,灵活运用。

多重检验问题(Multiple Testing Problem)

多重检验问题,又叫多重测试问题或多重比较问题(Multiple Comparison Problem),指的是当同时比较多个检验时,第一类错误率α就会增大,而结果的准确性就会受到影响这个问题。我在基础篇讲A/B测试流程时就多次提到过它,比如第4节课讲OEC的好处时,还有第7节课讲什么时间才能查看测试结果时。

多重检验为什么会是一个问题?

要搞清楚多重检验为什么会是一个问题,我们还得先从第一类错误率α(又叫假阳性率,显著水平,是测试前的预设值,一般为5%)说起。我在第2节课也讲过,第一类错误率指的就是当事实上两组指标是相同的时候,假设检验推断出两组指标不同的概率,或者说由于偶然得到显著结果的概率。而且,它在统计上的约定俗成是5%。

5%看上去是个小概率事件,但是如果我们同时比较20个检验(测试)呢?你可以先思考一下,如果每个检验出现第一类错误的概率是5%,那么在这20个检验中至少出现一个第一类错误的概率是多少呢?

要直接求出这个事件的概率不太容易,我们可以先求出这个事件发生情况的反面,也就是在这20个检验中完全没有出现第一类错误的概率,然后再用100%减去这个反面事件的概率。

这里我们用P(A)来表示出现事件A的概率。P(每个检验出现第一类错误)=5%,那么P(每个检验不出现第一类错误) = (1-5%)=95%,所以P(20个检验中完全没有第一类错误)= 95%的20次方。

这样我们就可以求得这个概率:

这里的 P(至少出现一个第一类错误)的概率又叫做 FWER (Family-wise Error Rate)。
通过计算得出来的概率是64%。这就意味着当同时比较20个检验时,在这20个结果中,至少出现一个第一类错误的概率是64%。看看,这是不是个很大的概率了呢?事实上,随着检验次数的增加,这个概率会越来越大,你看看下面这个图就明白了。

图中的蓝线和橙线分别表示当α=5%和1%时,FWER的变化情况。根据这个图我们可以得出两个结论:

  1. 随着检验次数的增加,FWER,也就是出现第一类错误的概率会显著升高。

  2. 当α越小时,FWER会越小,上升的速度也越慢。

第一个结论讲的就是多重检验带来的问题。第二个结论其实为我们提供了一种潜在的解决方法:降低α。

这就意味着,当我们同时比较多个检验时,就增加了得到第一类错误的概率(FWER),这就变成了一个潜在的多重检验问题。

什么时候会遇到多重检验问题?

你可能会说我平时都是一个测试一个测试去跑,不会同时跑多个测试,是不是就不会遇到这个问题了呢?其实不是的,实践中出现多重检验问题比你想象的要普遍得多,它在实践中主要以4种形式出现。

第一种形式,当A/B测试有不止一个实验组时。

当我们想要改变不止一个变量且样本量充足时,我们可以不必等测试完一个变量后再去测试下一个,而是可以同时测试这些变量,把它们分在不同的实验组当中。

每个实验组只变化一个变量,在分析结果时分别用每个实验组和共同的对照组进行比较,这种测试方法也叫做A/B/n测试。比如我想要改变广告来提升其效果,那么想要改变的变量包括内容、背景颜色、字体大小等等,这个时候我就要有相对应的3个实验组,然后把它们分别和对照组进行比较。

这就相当于同时进行了3个检验,就会出现多重检验问题。

第二种形式,当A/B测试有不止一个评价指标时。

这个很好理解,因为我们分析测试结果,其实就是比较实验组和对照组的评价指标。如果有多个评价指标的话,就会进行多次检验,产生多重检验问题。

第三种形式,当你在分析A/B测试结果,按照不同的维度去做细分分析(Segmentation Analysis)时。

当我们分析测试结果时,根据业务需求,有时我们并不满足于只把实验组和对照组进行总体比较。

比如对于一个跨国公司来说,很多A/B测试会在全球多个国家同时进行,这时候如果我们想要看A/B测试中的变化对于各个国家的具体影响时,就会以国家为维度来做细分的分析,会分别比较单个国家中的两组指标大小,那么此时分析每个国家的测试结果就是一个检验,多个国家则是多个检验。

第四种形式,当A/B测试在进行过程中,你不断去查看实验结果时。

这种情况我在第7节课中提到过,因为当测试还在进行中,所以每次查看的测试都和上一次的不一样,每查看一次结果都算是一次检验,这样也会产生多重检验问题。

了解了多重检验问题在实践中的表现形式,那么在实践中该如何解决它呢?

如何解决多重检验问题?

首先我要提前说明的是,接下来我介绍的解决方法,只适用于前3种表现形式。对于第4种表现形式的解决办法,我已经在第7节课介绍了,那就是不要在A/B测试还在进行时就过早地去查看结果,一定要等样本量达到要求后再去计算结果,所以这里就不再赘述。

鉴于多重检验问题的普遍性,在统计上有很多学者提出了自己的解决方法,大致分为两类:

  1. 保持每个检验的P值不变,调整α。

  2. 保持α不变,调整每个检验的P值。

为什么会做这两种调整呢?

第2节课,我们介绍了用P值来判断假设检验的结果是否显著时,是用检验中计算出的P值和α进行比较的。当P值<α时,我们才说结果显著。

所以,我们要么调整α,要么调整P值。前面我也说了,降低α是一种解决办法,最常用的调整α的方法是Bonferroni校正(Bonferroni Correction),其实很简单,就是把α变成α/n。

其中n是检验的个数。比如α=5%,那当我们比较20个检验时,校正之后的α=5%/20 = 0.25%,此时的FWER =$1-(1-0.25 \%)^{20}$ = 4.88% ,和我们最初设定的α=5%差不多。

Bonferroni校正由于操作简单,在A/B测试的实践中十分流行,但是这种方法只是调整了α,对于不同的P值都采取了一刀切的办法,所以显得有些保守,检测次数较少时还可以适用。

根据实践经验,在检测次数较大时(比如上百次,这种情况在A/B测试中出现的情况一般是做不同维度的细分分析时,比如对于跨国公司来说,有时会有上百个markets), Bonferroni校正会显著增加第二类错误率β,这时候一个比较好的解决办法就是去调整P值,常用的方法就是通过控制FDR(False Discovery Rate)来实现。

控制FDR的原理比较复杂,我就不展开讲了,你只需要记住它指的是一类方法,其中最常用的是BH法(Benjamini-Hochberg Procedure)就行了。BH法会考虑到每个P值的大小,然后做不同程度的调整。大致的调整方法就是把各个检验计算出的P值从小到大排序,然后根据排序来分别调整不同的P值,最后再用调整后的P值和α进行比较。

实践中,我们一般会借助像Python这样的工具来计算,Python中的multipletests函数很强大,里面有各种校正多重检验的方法,其中就包括我们今天讲的Bonferroni校正和BH法,我们使用时只需要把不同的P值输入,选取校正方法,这个函数就会给我们输出校正后的P值。

这里我总结一下,虽然Bonferroni校正十分简单,但由于过于严格和保守,所以在实践中我会更推荐使用BH法来矫正P值。

聊完了多重检验问题,我们再聊一下A/B测试中另一个常见问题——学习效应。

学习效应(Learning Effect)

当我们想通过A/B测试检验非常明显的变化时,比如改变网站或者产品的交互界面和功能,那些网站或者产品的老客户往往适应了之前的交互界面和功能,而新的交互界面和功能对他们来说需要一段时间来适应和学习。所以往往老用户在学习适应阶段的行为会跟平时有些不同,这就是学习效应。

学习效应在实践中有哪些表现形式?

根据不同的改变,老用户在学习适应期的反应也不同,一般分为两种。

第一种是积极的反应,一般也叫做新奇效应(Novelty Effect),指的是老用户对于变化有很强的好奇心,愿意去尝试。

比如把点击按钮的颜色,由之前的冷色调变成了非常艳丽的大红色,在短期内可能会使诸如点击率之类的指标提升,但是当用户适应了新的大红色后,长期的指标也可能回归到之前的水平。

第二种是消极的反应,一般也叫做改变厌恶(Change Aversion)。指的是老用户对于变化比较困惑,甚至产生抵触心理。

比如你经常光顾的电商网站,之前的加入购物车功能是在屏幕的左上方,但是交互界面改变后加入购物车的位置变到了屏幕的右下方,这个时候你可能就需要在屏幕上找一阵子才能找到,甚至找了一圈没找到,因为烦躁就关掉了页面,那么这时候短期的指标就会下降。

可以想象,这些在学习适应期的不同反应一般是短期的,长期来看这些短期反应也是会慢慢消退的。但是要注意的是,这些短期的学习效应确实会给A/B测试的结果带来干扰,使结果变得过于好或者过于差。那么我们如何来及时发现学习效应,从而剔除学习效应带来的干扰呢?

学习效应该如何检测?

在实践中,主要有两种方法可以用来检测学习效应。

第一种方法是表征实验组的指标随着时间(以天为单位)的变化情况。

在没有学习效应的情况下,实验组的指标随着时间的变化是相对稳定的。

但是当有学习效应时,因为学习效应是短期的,长期来看慢慢会消退,那么实验组(有变化的组)的指标就会有一个随着时间慢慢变化的过程,直到稳定。

  • 如果是新奇效应,实验组的指标可能会由刚开始的迅速提升,到随着时间慢慢降低。
  • 如果是改变厌恶,实验组的指标可能会由刚开始的迅速降低,到随着时间慢慢回升。

当然我们在使用这个方法时需要注意:随着时间表征实验组的指标变化,但并不是让你每天去比较实验组和对照组的大小。如果每天都去比较,就会出现我们刚才讲的多重检验的问题。一定要记住,只有达到样本量之后才可以去比较两组大小,分析测试结果。

第二种方法是只比较实验组和对照组中的新用户。

学习效应是老用户为了学习适应新的变化产生的,所以对于新用户,也就是在实验期间才第一次登录的用户来说,并不存在“学习适应新的变化”这个问题,那么我们可以先在两组找出新用户(如果是随机分组的话,两组中新用户的比例应该是相似的),然后只在两组的新用户中分别计算我们的指标,最后再比较这两个指标。

如果我们在新用户的比较中没有得出显著结果(在新用户样本量充足的情况下),但是在总体的比较中得出了显著结果,那就说明这个变化对于新用户没有影响,但是对于老用户有影响,那么大概率是出现了学习效应。

在实践中我们可以用以上方法检测出学习效应,不过要想真正排除学习效应的影响,得到准确的实验结果,还是要延长测试时间,等到实验组的学习效应消退再来比较两组的结果。

小结

今天这节课我们重点讲解了A/B测试中两个常见的实验误区:多重检验问题和学习效应。我把这两个问题出现的原理、在实践中的多种表现形式,以及相应的解决方法,都给你详细讲解了。

不过我还想特别强调一下多重检验问题。多重检验问题的表现形式多种多样,所以在A/B测试中尤为常见。我在刚接触A/B测试时就已经知道了这个问题的存在,不过当时了解到的是它会在A/B/n测试中出现,但后来才发现,原来在做细分分析时也会出现多重检验的问题。

幸好这个问题发现得及时,才没有让整个测试功亏一篑。现在再去复盘,主要还是因为当时只知道多重检验问题的存在,了解其中一两个表现形式。但对于为什么会出现多重检验问题,什么时候可能会出现多重检验问题,我都不清楚,所以在问题出现新的表现形式时就没有及时识别出来。

这也是我想要跟你强调的,知道为什么会出现这个问题,并且发现问题,和解决问题同样重要。

思考题

结合自己的经验,想一想过去有没有在A/B测试中遇到多重检验问题和学习效应?以及当时是如何处理的呢?

欢迎在评论区写下你学习本节课的收获和深度思考,如果今天的内容能帮你解答了一些困惑问题,也欢迎点击“请朋友读”,和他一起学习、成长。感谢你的收听,我们下节课再见。

精选留言

  • 四月. 🕊

    2021-01-07 13:39:14

    “第四种形式,当 A/B 测试在进行过程中,你不断去查看实验结果时。”
    对于第四种形式的多重检验错误,在日常实现的时候我们会每天给出昨天测试结果,累加到之前的结果上进行计算,这样p值的不准确是只是因为现在没到样本量导致的现在这个p值不准,还是会影响到最后达到样本量的p值也不准确呢?
    作者回复

    你好,“累加到之前的结果上进行计算”具体指的是什么呢?最准确的是到达样本量之后一次性计算。

    2021-01-16 07:08:18

  • 安和

    2021-01-02 22:04:51

    请问对于A/B/n 测试类的多重检验问题,若每个实验组都有个单独的对照组的情况和共用对照组的情况,都有相同的多重检验问题吗?
    作者回复

    你好,“每个实验组都有个单独的对照组”这种情况如果是有相同的指标或假设的话那还是会有多重检验问题的。

    2021-01-04 16:00:59

  • Geek_2ef9a5

    2021-09-06 09:42:42

    老师您好,关于多个指标的话也需要做p值的调整吗?比如我们主要研究转化率有没有因为某个改变而导致两组差异,次要要评价了比如点击率有没有差异。很多时候我都是直接使用0.05,去评价每个指标
  • 西西

    2021-08-13 11:12:32

    同样对多重检验问题有疑问,希望能够增加一些案例帮助说明。
    开头的举例:至少出现一个第一类错误的概率是 64% >> 5%,所以多重检验问题的关键是:至少出现一次第一类错误就得到整体是**显著差异**的结论?
    如果多次比较,每一次比较的结果都单独判断;或者如果样本量没到,没到之前只是看看,但并不影响得到最终结论,是不是就不是多重检验问题了?
    作者回复

    好问题,对于你说的第一种情况:‘如果多次比较,每一次比较的结果都单独判断’,我估计其实最终还是作为一个整体来得出结论嘛,又因为这些比较/test是同时发生的,其实还是会存在多重检验问题; 第二种情况你如果只是之前看看,但是不把这些结果带到最终的判断去,就没有关系。

    2021-08-31 08:09:47

  • 贤者时间

    2020-12-29 10:32:59

    关于多重检验我有两个观点想跟老师交流一下:
    1. 只要进行了多个AB测试(而不论是不是由文中提到的四种产生形式)就必然产生多重检验的问题,因为计算FWER的公式同样适用。举个例子,当公司有20个AB测试场景(对应着20个目标/假设),其中出现错误的概率就很大了。而文中提到的解决办法事实上针对的是同一个目标或者同一个对照组的情景。
    2. 基于1,我想到一个解决思路:条件允许的话,可以做相同的AB测试,每个测试犯弃真错误的概率是α,N个相同测试犯错的概率就是α的N次方了。可以极大减小犯错概率。而且适用于任何场景。不知老师怎么看?
    作者回复

    你好,1. 对于你的第一个观点我想用维基百科里的话来回答:Note that of course the multiple comparisons problem arises not in every situation where several hypotheses are empirically tested, be that sequentially or in parallel (concurrent); roughly speaking, the multiple comparisons problem arises whenever multiple hypotheses are tested on the same dataset (or datasets that are not independent) or whenever one and the same hypothesis is tested in several datasets. 多重检验其实并不是会在任何时候都会出现的,一般来说是出现在多个假设在相同或者相关联的数据上检测或者相同的建设在不同的数据集上检测;2. 这里你得出的α的N次方其实是N个相同的A/B测试同时犯错的概率,如果N次结果都一致的话那当然可行,不过如果N次结果不一致的话那就要根据具体情况重新计算概率啦,不过总体来说,实验结果的可重复性越高,确实也说明了实验结果的可靠性。

    2021-01-04 15:13:51

  • 那时刻

    2020-12-29 10:17:24

    老师提到的误区,感觉我们都曾遇到过,看着很有感触。

    多重检验里,我们想要看 A/B 测试中的变化对于各个国家的具体影响时,就会以国家为维度来做细分的分析。如果采用调整α的方法Bonferroni 校正,那么n的取值是什么?我的理解是,一般取top n的国家来看数据,n是top n的值。另外一种BH方法,设置不同的p值,是按照国家设置吗?
    作者回复

    你好,如果用Bonferroni 校正的话n的取值就等于你做细分分析的维度,比如10个国家n就等于10;对于BH法的话,你的情景就是p值就是按照国家来设置的。

    2021-01-04 11:40:49

  • Geek_7d7659

    2025-02-16 21:55:19

    比如7个实验组1个对照组,也是用T检验或者Z检验方法检验指标的显著性?
  • 崇世轩人

    2022-09-19 12:12:30

    真正消除学习效应,延长多长时间怎么判断
  • 9

    2022-07-12 12:09:21

    老师,如果我的ab测试会看总体的显著性,还会在多个维度上看显著性,比如在手机系统(ios android)分别看显著性,还会分别看TOP5国家的显著性情况。如果这样就会引起多重检验的问题了。 我想用Bonferroni 校正。 调整α时我的n,是考虑一共做了多少个实验(我一共做了8次显著性检验(总体一次,手机系统2次,国家5次),n=8),还是按照维度考虑呢,也就是做总体的显著性检验时 就用α;做手机系统的检验时 n=2; 做国家的检验时,n=5。
  • Geek_559df4

    2021-12-06 17:33:19

    老师,多重检验当样本量不够时,采用流量正交的方式有没有相关参考资料
  • 志林

    2021-09-11 20:11:10

    为什么要去改变P值呢,不能通过置信区间,同正同负判断吗,这样就能知道 在95% 置信水平下,实验组优于还是劣于 base。
  • 李哲

    2021-07-30 16:57:06

    多重检验错误的发生情况还是没有搞清楚。如果ab测试有多个实验组测试不同的指标,那么最终结果我只取某个指标对应的实验组和对照组进行分析,那还会存在多重检验的问题嘛
    作者回复

    当你取某个指标对应的实验组和对照组进行比较分析该特定指标时不会出现多重检验问题,因为你只是进行1V1的比较,但是你前面提到了多个实验组和不同的指标,也就是说你会进行多个1V1的比较,这时就会出现多重检验问题。

    2021-08-31 06:23:15