3.4 假设检验
本节将详细介绍为什么在AB实验中需要采用假设检验的方法来评估实验效果,而不是简单地进行大小比较,以及在实验中,假设检验是如何工作的。
3.4.1 为什么需要假设检验
AB实验和假设检验有什么关系呢?假设有一个AB实验是从总体用户中随机抽样A、B两组进行实验,每组10000个用户。A组用户作用了新策略,B组用户保持原有策略不变,作为对比的基线,即对照组。通过实验,分别收集A、B两组用户所关心的指标,假设实验最关键的指标是人均时长,得到A组的人均时长为20min,方差为4min;B组的人均时长为19.95min,方差为4min。基于这些实验数据,想要知道作用了新策略的A组用户的人均时长tA,是不是比B组用户的人均时长tB更长。
首先能想到的直观又简单的方法是直接比较tA和tB的大小。然而不能这样做。如果只是通过简单的均值比较,就判断出A组效果比B组效果好,这和真实的情况是存在偏差的。抽样样本可以构造出一个区间,这个区间以一定的概率(置信度)包含总体均值。实验组A和对照组B现在可以各自构造出一个95%的置信区间,意味着A、B两组样本的总体落在这两个区间的概率是95%。
A组总体人均时长95%的置信区间如下。
B组总体人均时长95%的置信区间如下。
不难发现,A组的置信区间和B组的置信区间是交织在一起的,这说明在95%的置信度下,A组总体均值既可能大于B组,也可能等于B组,还可能小于B组。而且这两个区间重合比例越高,就越难断定tA和tB的大小。比如两个双胞胎,体重很接近,哥哥可能早上多吃一点就比弟弟重,晚上弟弟多吃一点就比哥哥重,我们很难用一个时刻的体重作为判断他们谁轻谁重的依据。模棱两可的结果大家都很难接受,还是希望尽量得到一个相对明确且可信的结果。这个时候就需要用到假设检验。
3.4.2 如何进行假设检验
假设检验的核心思想是小概率事件在一次实验中几乎不可能发生。假设检验就是利用这个小概率事件的发生进行反证。
假设检验的基本过程如下。
1)做出一个假设H0,以及它的备择假设H1(H0的对立假设)。
2)在H0成立的情况下,根据置信度构造出一个小概率事件。
根据抽样的结果,观察小概率事件是否发生,如果发生了,那么我们就可以拒绝原假设H0,接受H1;如果没有发生,这个时候就不能拒绝原假设H0。需要特别注意的是,不能拒绝原假设不等于接受原假设,只能说差异还不够显著,不能达到拒绝H0的程度。下面我们通过几个生活实例来理解假设检验的过程。
1.抽签游戏
有4个同学,小明、小军、小兰和小美,抽签决定放学后谁留下来扫地。盒子里面有4张纸条,其中3张白纸和1张写着“扫地”的纸。每个人抽签,如果没有抽中,就把纸条放回盒子中。
1)作出原假设H0:小明没作弊;其备择假设H1:小明作弊了。
2)基于小明没有作弊的假设H0,构造小概率事件——小明没有抽中的概率如下。
●P(小明抽1次没有抽中)=3/4=0.75
●P(小明抽3次没有抽中)=3/4×3/4×3/4≈0.42
●P(小明抽12次没有抽中)=3/4×3/4×…×3/4≈0.032
小明抽12次都没有抽中的概率约为3.2%,是一个小概率事件,如果真实发生了,那我们就可以拒绝H0,接受H1,认为小明作弊了。
这从现实生活中也不难理解,一个人抽了12次都没有抽中,这肯定不符合常理,作弊的可能性更大。当然也不排除小明确实运气太好了,抽了12次都没有抽到,而这样的好运气发生的概率是非常小的。
2.扔骰子游戏
小明和小红玩扔骰子的游戏,每次扔到6点的概率是1/6。
1)作出原假设H0:小明没作弊;其备择假设H1:小明作弊了。
2)基于小明没有作弊的假设H0,构造小概率事件——小明连续3次都扔到6点的概率是1/6×1/6×1/6≈0.46%,这是一个概率很低的事件,也就是一个小概率事件。
现在观察小概率事件是否发生,如果观察到小明扔3次都扔到6点,小概率事件发生了,这就证明原假设H0不成立,即小明没有作弊不成立,也就是说小明作弊了。如果只观察了1次,小明扔到6点这个事件在H0为真的情况下,发生的概率是1/6≈16.67%,这就不算一个一般意义上的小概率事件。这个时候我们就不能拒绝原假设H0,不能说小明作弊了,同时我们也不能说小明没有作弊,只能说判断的条件还不够,实验还需要继续观察,直到小概率事件发生。
上面两个例子在进行假设检验的过程中有一个共同的关键点——关于小概率事件的界定。究竟多小的概率算小概率事件,这主要取决于实际的业务场景,可以理解为能容忍犯第一类错误的概率。第一类错误的含义是虽然H0假设成立,但是拒绝了H0假设的概率(详见3.4.3节),也是通常所说的显著性水平。一定要明确的是,显著性水平是人为定义出来的概率值,和实际实验观察是没有关系的。显著性水平不是一个固定不变的数字,值越大,原假设被拒绝的可能性就越大。显著性水平应根据所研究问题的性质和对结论准确性的需求而定。一般来说,在实际的AB实验中,显著性水平取5%是比较常见的。
以扔骰子为例,假设给定的显著性水平是5%,也就是说,如果观察到一个发生概率小于5%(显著性水平α)的小概率事件发生了,比如小明连续扔3次都是6点这件发生概率为0.46%的小概率事件发生了,我们就拒绝原假设H0,接受它的备择假设H1,认为小明作弊了。做出这个决策的时候,犯第一类错误的可能性就是0.46%。也就是说,在小明没有作弊的情况下,这件事发生的概率是0.46%,因为我们认为只要犯错误的概率低于5%(显著性水平α)就可以接受,那么就可以采用这个决策。
如果犯错误的概率只接受低于0.1%,这时拒绝H0犯错误的概率为0.46%,还不能做出拒绝H0的决策。怎么办呢?我们可以让小明继续扔一次骰子,如果观察到此时仍然是6点,那么这件事情发生的概率就是1/6×1/6×1/6×1/6≈0.077%,低于显著性水平0.1%,这个时候就可以在显著性水平为0.1%下做出决策——小明作弊了。
一般来说,常见的显著性水平设置为5%,即如果一个发生概率低于5%的事情发生了,就拒绝原假设H0。如果希望降低犯错误的概率,就要把显著性水平设置得更低一些。比如在一些医学实验上,这个阈值可能会调整为1%,甚至0.1%。有一些场景,对于犯第一类错误的容忍度比较高,则会把显著性水平调得更高,比如10%。
下面我们用一个“产品新策略对产品人均时长是否有影响”的AB实验来看一下假设检验的过程。实验基本假定是,实验分为实验组A和对照组B,实验组A在新策略作用下人均时长为tA,对照组B在老策略作用下人均时长为tB。实验设计者想知道新策略对比老策略,人均时长究竟有没有提升。下面尝试用假设检验的方法来解答。
首先给出原假设H0:A组相对B组的用户,人均时长没有显著差异。
原假设H0:tA=tB,等价于ΔtAB=tA-tB=0。
然后给出备择假设H1:A组相对B组的用户,人均时长有显著差异。
备择假设H1:tA≠tB,等价于ΔtAB=tA-tB≠0。
注意,这里时长tA、tB指的是总体用户,而实际得到的是做实验时抽样样本的数据指标、,→tA、→tB,于是问题转变为
从直观上来讲,如果Δt非常小,接近于0,那么几乎可以认为原假设H0为真。如果Δt非常大,就有理由拒绝原假设。现在的问题是,Δt究竟需要多大,才足够认为A、B两组有差异;需要多小,才足够认为A、B两组没有差异呢?如果我们在一次实验中观察到Δt=0.2,能不能拒绝原假设H0呢?
假设检验的步骤如下。
第一步,给出原假设H0,即A组和B组人均时长没有显著差异:Δt=tA-tB=0,其备择假设H1,即A组和B组人均时长有显著差异:Δt=tA-tB≠0。
第二步,在假设H0成立的情况下,将没有差异的两组进行AA实验(见第7章),只有3%的情况发生了|Δt|≥0.2。假设我们设定事情发生的概率低于5%,就是一个小概率事件,那么说明这是一个小概率事件,一般很难发生的事情发生了,可以推论大概率原假设H0不成立。
在这个过程中,我们注意到有两个关键的数据——3%和5%。5%的意义在于人为定义了一个显著性水平5%,用于判断小概率事件。3%就是在H0为真的情况下,小概率事件发生的真实概率。3%是通过实验获得的样本均值和方差,再利用其符合正态分布,通过构造分布曲线计算出来的。
显著性水平α和P值是假设检验中关键的两个概念。显著性水平α是人为定义的用于判断是否为小概率事件的阈值,如果低于该阈值,则认为是小概率事件,也是可以接受判断发生错误的概率。P值是小概率事件发生的实际概率,如果P值<显著性水平,则认为小概率事件发生了,拒绝原假设H0。
用假设检验的方法进行判断就变得简单多了,方式如下。
P值<α时,就可以拒绝H0,接受H1。
以产品新策略对产品人均时长是否有影响的实验为例:拒绝H0,接受H1,就是认为备择假设H1:tA≠tB成立,即实验组A和对照组B的指标有显著差异,新策略有显著效果。
因为α是人为规定的,所以假设检验问题就可以简化为如何计算P值。在正态分布时,P值和t值有一个对应关系,求P值可以转化为求检验统计量t值,对于双总体,方差未知的抽样问题有如下计算。
当α=0.05时,对于双侧检验tα/2=t0.025=1.96,如果t≤-1.96或者t≥1.96就会拒绝H0,这时就可以拒绝H0,认为A组与B组有显著差异。
到这里,自然会进一步想到,如果实验中观测到Δt<0.2,能说明两组没有差异吗?或者说观测到Δt小于多少的时候,能认为两组数据没有差异呢?
如果Δt=0.15,这时t=2.66,t>t0.025=1.96,此时可以拒绝H0,认为A、B有差异。
如果Δt=0.1,这时t=1.77,t<t0.025=1.96,此时无法拒绝H0。需要特别注意的是,这时也没有办法接受H0,说A、B没有差异。为什么呢?因为这个时候,我们不知道是由于检验精度不够导致结果不显著,还是确实没有效果。怎么办呢?还需要另外一个指标——功效一起作出判断。
重点关注
P值是H0为真的时候,观察到实验数据出现的概率,本质是关于H0为真的一个条件概率。
如果P值<显著性水平,则认为小概率事件发生了,拒绝原假设H0。
P值的取值范围是[0,1],一般来说,P值越小越能反映A、B之间是有差异的。当P值比显著性水平大时,却不可以说A、B没有差异,即不能得出任何结论。
P值经常被曲解,常见的关于P值的错误陈述和理解如下。
误解1:如果P值=0.05,则H0假设只有5%的可能性为真。
更正:P值是在假设H0为真的情况下计算的,而不是H0假设为真的可能性。
误解2:差异不显著(如P值>0.05)表示组间无差异。
更正:当AB实验的置信区间包含0时,并不意味着0比置信区间内的其他值更有可能。没有差异很可能是实验的功效不足导致的。
误解3:P值=0.05表示我们观察到的数据在H0假设下只有5%的概率会出现。
更正:根据P值的定义可知,这个说法是不正确的,P值包括与观察到的值相等或更多的极值。
误解4:P=0.05意味着如果拒绝H0假设,则误报的概率仅为5%。
更正:发生误报的概率和P值没有关系。
显著性水平是当原假设H0为真时,可以容忍的第一类错误发生的概率,是人为定义的小概率事件发生的最大概率值。
3.4.3 第一类错误、第二类错误和功效
通过抽签和扔骰子的例子不难理解,虽然是小概率事件,但也有可能是真实发生的。如果小明没有作弊,我们却判定他作弊了,这就是第一类错误;如果小明作弊了,我们却判断他没有作弊,这就是第二类错误,如表3-3所示。
表3-3 第一类错误和第二类错误
假设检验的过程中,理想的情况是H0为真的时候接受H0,H1为真的时候拒绝H0。统计推断不可能保证完全正确,根据假设检验做出的决策当然也存在犯错误的可能,总结起来为以下4种情况,如表3-4所示。
表3-4 假设检验的第一类错误和第二类错误
在AB实验中,原假设H0一般都是假设实验组和对照组无差异,也就是实验没有效果。第一类错误是H0为真但是被拒绝了,即虽然实验没有效果,但是被判断为有效果。第二类错误是H0为假但是接受了,即虽然实验有效果,但是被判断为无效果。一般来说,第一类错误的危害更大,要重点控制发生的概率。同时,我们也需要关注第二类错误,虽然第二类错误不会直接对产品和用户造成损失,但是对于公司而言,进行任何一项实验的开发都是有成本的,如果第二类错误发生的概率过高,会导致团队的成绩无法被客观证实,提升产品效果的策略无法上线,错失产品发展的机会。
除了第一类和第二类错误,还有第三类错误,就是虽然实验组和对照组有差异,系统也检测出来了,但是差异的方向反了,也就是本来实验组是好于(或者差于)对照组的,系统给出的结果却是对照组差于(好于)实验组。这种情况理论上是存在的,因为实际发生的概率较低,所以应重点关注的还是第一类和第二类错误。
为了控制第二类错误,引入一个概念——功效(power)。功效是指当H0不成立时,做出拒绝H0的结论正确的概率。功效=1-第二类错误发生的概率β,即功效越大,第二类错误发生的概率越小。功效越大,第三类错误发生的概率也越小,基本会趋近于0。
结合P值,基本判断流程如下。
如果P值<α,则拒绝原假设H0,认为策略有效。
如果P值≥α,不能拒绝原假设H0,也不能接受H1,此时不能说策略有效,但是也不能说策略无效。需要进一步观察功效,如果功效>80%(一般选择80%),说明犯第二类错误的概率也很低了,即策略有效却被判断为无效的概率很低,此时策略大概率就是无效的。如果功效<80%,此时策略有效却被判断为无效的概率还是比较大的。策略有可能是真的没效果,那么怎么办呢?这就需要我们继续观察实验,直到P值或者功效达到可以判断。
根据这个思路可以绘制基本的判断流程如图3-6所示。
图3-6中继续观察这一步,本质上就是希望通过一些手段(如增加样本容量等)增加Z值,进而达到某个可以作出拒绝原假设H0的临界值。Z值的计算中,只有两个变量可以操作,一个是样本数量n,另一个是方差σ。可以通过增加n或者减少方差σ去增加z,从而拒绝H0。这个过程就是通过增加样本量或者降低方差来提升检验精度,在第8章会详细介绍如何提高实验精度。
图3-6 根据P值、显著性水平、功效进行判断
3.4.4 如何计算功效
本节通过一个实例来说明如何计算功效。
根据上面的公式,当显著性水平α=0.05时,对于双侧检验tα/2=t0.025=1.96,如果t≤-1.96或者t≥1.96,可以反推出一个可以拒绝H0假设的Δt=-。
当Δt>0.11,或者Δt<-0.11时,就可以拒绝原假设H0,认为tA≠tB。
第二类错误是我们做出接受H0:tA=tB,即Δt=0的假设,但实际上tA≠tB。要满足这个条件,需要选择一个-0.11<Δt<0.11的u值。现在我们选择u=0.05,认为真实人均时长差值的均值为0.05,此时如果接受H0:Δt=0,犯第二类错误的概率是多大呢?转化问题为当真实差值的均值为0.05时,求样本均值-0.11<<0.11的概率,如图3-7所示。
图3-7 当u=0.05时发生第二类错误的概率
当样本均值为0.11和-0.11时,分别对应的概率为0.8554、0.0023,对应样本均值在-0.11到0.11之间的概率为
表示此时发生第二类错误β的概率为0.8531,此时功效=1-0.8531=0.1469。
同理,如果假设接受u=0.02,则计算公式如下。
当样本均值为0.11和-0.11时,分别对应的概率为0.9441、0.0107,对应样本均值在-0.11到0.11之间的概率为
表示此时发生第二类错误β的概率为0.9334,此时功效=1-0.9334=0.0666。
我们发现如果u逐渐向假设的均值u0=0靠近,发生第二类错误的概率会逐渐变高。为什么u越接近原假设值u0时,犯第二类错误的概率越高;远离原假设值u0时,犯第二类错误的概率逐渐降低?其实u越大时,越靠近拒绝H0的区域,也就是H0越可能为假,此时接受H0的可能性也就变低了,犯第二类错误的概率变低了。当u变成u0,即u=0时,此时z=1.96,接受H0的概率为(0.975-0.5)×2=0.95,达到第二类错误的概率上限95%。因为我们设定的置信度是95%,从图3-7中可以看到,一旦进入其余5%的区间,我们会拒绝H0;只有在95%的区间内,我们可能会接受H0,所以第二类错误的最大概率为95%。