在前面,我们一起回顾了中心极限定理,以及正态分布的定义、公式和相关计算。目前来说,想必大家都能够轻松地计算出大样本的边界值、或根据抽样得出的数据反推大样本的数据分布情况。但是回归到 A/B 测试来说,能够分别计算出实验组与对照组的数据范围,就可以得出那一组更好或更差的结论吗?
续上文数据,已知有实验组与对照组数据如下:
|
UV |
订单数 |
人均创单率 |
创单数方差 |
| 实验组 |
45180 |
3221 |
0.0712926073 |
0.1670067842 |
| 对照组 |
44904 |
3276 |
0.0729556387 |
0.1719890729 |
很容易就可以根据公式 X∼N(μ,nσ2) 计算出,在 95% 的置信度下,两组人均创单率范围分别如下:
|
人均创单率范围 (95% 置信度) |
| 实验组 |
0.067524268 ~ 0.075060947 |
| 对照组 |
0.069119768 ~ 0.076791510 |
由于对照组的数据上下限都比实验组高,是否意味着对照组一定会比实验组要好?
在开始计算之前,首先需要向大家介绍一个概念 —— 假设检验。
引用自国家统计局的定义如下:
假设检验(hypothesis testing)是指从对总体参数所做的一个假设开始,然后搜集样本数据,计算出样本统计量,进而运用这些数据测定假设的总体参数在多大程度上是可靠的,并做出承认还是拒绝该假设的判断。如果进行假设检验时总体的分布形式已知,需要对总体的未知参数进行假设检验,称其为参数假设检验;若对总体分布形式所知甚少,需要对未知分布函数的形式及其他特征进行假设检验,通常称之为非参数假设检验。此外,根据研究者感兴趣的备择假设的内容不同,假设检验还可分为单侧检验(单尾检验)和双侧检验(双尾检验),而单侧检验又分为左侧检验和右侧检验。
假设检验的基本思想是反证法思想和小概率事件原理。反证法的思想是首先提出假设(由于未经检验是否成立,所以称为零假设、原假设或无效假设),然后用适当的统计方法确定假设成立的可能性大小,如果可能性小,则认为假设不成立,拒绝它;如果可能性大,还不能认为它不成立。小概率事件原理,是指小概率事件在一次随机试验中几乎不可能发生,小概率事件发生的概率一般称之为“显著性水平”或“检验水平”,用 α 表示,而概率小于多少算小概率是相对的,在进行统计分析时要事先规定,通常取 α =0.01、0.05、0.10 等。
国家统计局《什么是假设检验》:https://www.stats.gov.cn/zs/tjll/csgj/202302/t20230215_1905713.html
上面的概念稍显抽象,我们来设计一个场景帮助理解:
我手里有一个袋子,我在里面放入了 100 个小球,其中有 95 个是白色的,另外 5 个是红色的。袋子完全密封,你并不知道里面的颜色分布情况。现在我告诉你,里面有 100 个球,但是红球比较少,你来猜猜看袋子里最多有几个红球?
你想了想,“我觉得袋子里红球不超过 5 个”,你做了这样的一个假设,即“原假设”。现在你准备抽一个球出来验证一下。怎么验证呢?根据统计学的定义,我们通常定义小概率指的是 5%,因此当一个事件的概率小于 5% 时,那么在一次实验中,可以认为该事件不会发生。所以,如果你的假设是正确的,那么本次抽取并不会抽到红球。现在你取出一个球,真巧,正好是白球,你验证了你的假设。这个过程,便是“假设检验” 。现在你通过这次抽取验证了假设的成立,所以可以称作是“不能拒绝原假设”。
相反,假如你抽到的是红球,那么就违背了“小概率事件在单一试验中不会发生”的设定,那么“袋子里红球不超过 5 个”的结论就被推翻了,这又被称为“拒绝原假设”。
现在站在上帝视角,我们来复盘一下你假设成立的正确性是多少。根据计算,你在一次抽取中,获得白球的概率高达 95%!也就是你会有 95% 的概率能获得正确的验证你的假设。可与此同时,你仍然有 5% 的几率可能会犯错,因为袋子里的球真的没有超过 5 个。对这个错误,也有一个专门的名词来定义它,因为你“错误的拒绝了原假设”,这种犯错被称为“第一类错误”。
现在我又掏出一个袋子,里面还是 100 个小球,但是只放了 90 个白球,剩下 10 个现在都是红球,还是让你来猜里面的红球最多有几个。
你沿用之前的思路做出了原假设 —— 红球还是不超过 5 个。你自信满满的取出一个球 —— 白的!好嘛,那就是“不能拒绝原假设”。现在我问你,如果你这个球是红色的,你的假设还成立吗?你信誓旦旦的说“拒绝原假设”。
当我把球全部倒出来给你看时,你傻眼了,这是怎么回事?真实情况和你的结论正好相反。站在上帝视角再次进行复盘,考虑到只有抽到红球才能拒绝错误的原假设,而这个符合真实情况的概率却只有区区 10%,相反,抽到白球导致判断错误的几率却高达 90%!针对这种判断错误的情况,在统计学中也有一个专门的名词,即——如果错误的接受了原假设,则这种情况被称之为“第二类错误”。
我们使用符号 H0 来表示“原假设”,根据事实的真实情况及是否通过计算拒绝了我们做出的原假设,进行组合后可能会存在四种结果:
|
H0 事实正确 |
H0 事实错误 |
| 拒绝 H0 |
I 类错误 |
判断正确 |
| 不能拒绝 H0 |
判断正确 |
II 类错误 |
由于第一类错误是拒绝了一个符合事实的正确假设,所以又被称为“弃真错误”;相应的,第二类错误是没有拒绝一个事实上存在错误的假设,所以还可以被称为“取伪错误”。
现在定义已经知道了,我们如何利用假设检验算法来验证我们的结论呢?
常见的检验方法一共有四种:t 检验、Z 检验(又称 U 检验)、卡方检验、F 检验。他们都是利用小概率反证法思想来进行设计的。也就是先做出一个假设,假定该假设大概率会成立,那么只有很小的概率假设才会不成立。在一次实验过程中,如果假定的实验结果与预期不一致,就说明不该发生的小概率事件发生了,此时就可以合理的对我们的假设做出怀疑,继而拒绝接受这一假设的结果。
由于本系列重点概述 A/B 测试领域,且通常情况下都是在检验大样本,故本章节将仅以 Z 检验为例展开说明。
无论是采用哪种检验方法,首先就是基于要检验的数值做出假设。既然我们采用的是“反证法”的思路,我们潜意识里就是设计一个不想成立的假设,即原假设,并通过计算结果来拒绝它。同时设计一个我们想要接受的结果,与原假设完全相反,用来表达拒绝原假设之后所接受的结果。使用数学符号表达如下:
- 原假设(H0):也叫零假设、虚无假设,条件通常设置为:等于 =、大于或等于 ≥、小于或等于 ≤。
- 备择假设(H1):当拒绝原假设后想要接受的结果,条件通常设置为:不等于 ≠、小于 <、大于 >。
假如我们要检测的值是 μ,目标值为 μ0。当想要校验两个数值之间是否存在统计学意义上的显著性差异时,通常可令 H0:μ=μ0,H1:μ=μ0,并按照一般的惯例,定义置信系数 α=0.05。基于这种假设设计,假如我们通过计算拒绝原假设,接受备择假设,这种场景是符合实际真实情况的概率可视为 95%,我们只有 5% 的概率可能会犯第一类错误。
但不拒绝原假设,是否意味着我们要接受原假设?从统计学意义上来说,不建议那么做,因为这有可能会使我们犯第二类错误,而第二类错误的概率我们无法通过公式或设定准确得知。
关于值的检测方向可参考下表:
|
双侧检验 |
左侧检验 |
右侧检验 |
| H0 |
μ=μ0 |
μ≥μ0 |
μ≤μ0 |
| H1 |
μ=μ0 |
μ<μ0 |
μ>μ0 |
Z 检验
Z 检验是用于大样本平均值差异性检验的方法。它是用标准正态分布的理论来推断差异发生的概率,以此来比较两个平均值的差异是否显著。
在已知总体标准差时,它可以用来比较样本的均值是否与某个特定值之间存在统计学上意义上的差异;也可以用来比较两组样本集的均值是否存在统计学意义上的差异。
Z 检验简而言之就是计算样本的 Z 值。设检测项为 X,根据中心极限定理,有 X∼N(μ,nσ2),对 X 做标准化则有 Z=σ/nX−μ∼N(0,1),当对样本计算得到的 Z 值落在拒绝域时,则拒绝原假设 H0。
|
双侧检验 |
左侧检验 |
右侧检验 |
| H0 |
μ=μ0 |
μ≥μ0 |
μ≤μ0 |
| H1 |
μ=μ0 |
μ<μ0 |
μ>μ0 |
| 拒绝域 |
∣Z∣>Zα/2 |
Z<−Zα |
Z>Zα |
下面将分别举例说明:
某校有 1000 名初三学生,会定期按月组织月考,在上一次月考中全体学生的平均分为 80 分,本次月考全体平均分为 79.2,标准差为 10.60458122,现想确定全体学生的整体成绩是否发生了明显的变化。
令 X 为学生成绩,学生数为 n,本次月考平均分为 μ、方差为 σ2,上次月考平均分为 μ0。
建立假设:
- 原假设(H0):两次考试平均分没有显著差异,即 μ=μ0。
- 备择假设(H1):两次考试平均分存在显著差异,即 μ=μ0。
计算 Z 值:
Z=σ/n∣μ−μ0∣=10.60458122/1000∣79.2−80∣=2.385593618
当 α=0.05 时,查正态分布 Z 分数表,得 Z0.05/2=1.96,因 2.385593618>1.96,故 Z 检查结果落在了拒绝域,因此可认为全体学生的整体成绩发生了明显的变化。
现在想知道学生成绩是不是明显低于 80 分。
建立假设:
- 原假设(H0):这次考试整体成绩明显不低于 80 分,即 μ≥μ0。
- 备择假设(H1):这次考试整体成绩明显低于 80 分,即 μ<μ0。
计算 Z 值:
Z=σ/nμ−μ0=10.60458122/100079.2−80=−2.385593618
当 α=0.05 时,查正态分布 Z 分数表,得 −Z0.05=−1.65,因 −2.385593618<−1.65,故 Z 检查结果落在了拒绝域,因此可认为全体学生的整体成绩明显低于 80 分。
那么学生成绩有没有普遍高于 75 分。
建立假设:
- 原假设(H0):这次考试整体成绩明显不高于 75 分,即 μ≤μ0。
- 备择假设(H1):这次考试整体成绩明显高于 75 分,即 μ>μ0。
计算 Z 值:
Z=σ/nμ−μ0=10.60458122/100079.2−75=12.5243665
当 α=0.05 时,查正态分布 Z 分数表,得 Z0.05=1.65,因 12.5243665>1.65,故 Z 检查结果落在了拒绝域,因此可认为全体学生的整体成绩明显高于 75 分。
现在觉得只与上一次的最终均值做比较不够科学,因为学生成绩的分布也是错综复杂的。现计划改变思路,引入上一次月考的方差 8.15410212 重新计算两次考试结果是否存在显著变化。
建立假设:
- 原假设(H0):两次考试平均分没有显著差异,即 μ=μ0。
- 备择假设(H1):两次考试平均分存在显著差异,即 μ=μ0。
计算 Z 值:怎么算?怎么才能用上另一个样本的方差?
在讲到如何计算 Z 值前,我们先尝试分析下,在单样本分析中,我们统计一个服从正态分布的变量与一个目标值的差异性是用的减法(或视为加一个负数),那么两个服从正态分布的变量如果进行相加会如何?
令 X1 为一个服从正态分布的变量 1,X2 为另一个服从正态分布的变量 2,μ1 为变量 1 的算数平均数,μ2 为变量 2 的算数平均数,σ1 为变量 1 的方差,σ2 为变量 2 的方差。可得:X1∼N(μ1,σ12),X2∼N(μ2,σ22)。令 Z=X1+X2,则 Z 服从什么分布?
分布说白了就是求概率分布函数。已知概率分布函数是对概率密度函数的积分,令 X1 的概率密度函数为 f1(x1),X2 的概率密度函数为 f2(x2),则对 Z 的概率密度函数 f(z) 就是求以下方程吗:f(z)=f1(z)+f2(z) ?
显然不是。我们来思考一种情况:如果我掷一枚硬币为正面的概率是 1/2,那么我同时掷出两枚硬币,出现正面的概率会是 1/2 + 1/2 = 1 吗?显然不会,因为多个独立事件合成的概率并不一定等于各个事件概率的和。
数据大佬马同学在介绍卷积的概念时写过一个非常容易理解的例子,我搬运加工一下向大家展示。注:原贴链接后附
假定我们同时掷出两枚骰子,其和为 4 的概率是多少?
令 f(x) 为第一枚骰子的结果的概率,g(x) 为第二枚骰子的结果的概率,则 f(1) 表示第一枚骰子掷出 1 的概率、 f(2) 表示掷出 2 的概率、g(5) 表示第二枚骰子掷出 5 的概率、以此类推。则两枚骰子结果只和为 4 的概率为:f(1)g(3)+f(2)g(2)+f(3)g(1)。可写成:(f∗g)(4)=∑m=13f(m)g(4−m) ,令期望的和表示为 z,则有 Z(z)=(f∗g)(z)=∑m=1z−1f(m)g(z−m)。
假定工厂在持续生产馒头,但每个馒头最多只有 24 小时的保质期,馒头生产速率为 f(t),馒头过期速率为 g(t),则第二天 0 点时,假定馒头只被生产而未被吃掉,则前一天生产馒头总的过期程度为 ∫024f(t)g(24−t)dt。
对于这种类型的计算,实际上可以看做是,有函数 f 及 g,有 z=x+y,Z(z) 为 f(x) 与 g(y) 即:g(z−x) 乘积的所有组合数,这种运算被称为卷积,记作 f∗g
对离散型变量,有 (f∗g)(x)=∑τ=0Nf(τ)g(x−τ)
对连续型变量,如 f、g 在实数域可积,有 (f∗g)(x)=∫−∞+∞f(τ)g(x−τ)dτ
卷积的概念稍微有些绕,但本质也只是一种针对函数的数学运算,与加减乘除无异。
了解更多清参考原贴:如何通俗易懂地解释卷积?
有了上面的介绍,相信大家可以理解,两个服从正态分布的变量叠加后的概率密度函数,可视为是两个正态分布概率密度函数的卷积,而不是和。
令 f(z) 为正态分布变量 X1+X2 的概率密度函数,f1(x) 为 正态分布变量 X1 的概率密度函数,f2(x) 为 正态分布变量 X2 的概率密度函数。则有:
f(z)=f1(x)∗f2(x)=∫−∞+∞f1(x)f2(z−x)dx=∫−∞+∞2πσ11exp[−2σ12(x−μ1)2]2πσ21exp[−2σ22(z−x−μ2)2]dx=∫−∞+∞2πσ1σ21exp[−(2σ12(x−μ1)2+2σ22(z−x−μ2)2)]dx=∫−∞+∞2πσ1σ21exp[−(2σ12⋅2σ222σ22(x−μ1)2+2σ12(z−x−μ2)2)]dx=∫−∞+∞2πσ1σ21exp[−(2σ12σ22σ22(x−μ1)2+σ12(z−x−μ2)2)]dx=∫−∞+∞2πσ1σ21exp[−(2σ12σ22σ22(x2+μ12−2xμ1)+σ12(z2+x2+μ22−2xz−2xμ2−2zμ2))]dx=∫−∞+∞2πσ1σ21exp[−(2σ12σ22σ12x2+σ12z2+σ12μ22−2σ12xz−2σ12xμ2−2σ12zμ2+σ22x2+σ22μ12−2σ22xμ1)]dx=∫−∞+∞2πσ1σ21exp[−(2σ12σ22x2(σ12+σ22)−2x(σ12(z−μ2)+σ22μ1)+σ12(z2+μ22−2zμ2)+σ22μ12)]dx=∫−∞+∞2πσ1σ21exp[−(2σ12σ22x2(σ12+σ22)−2x(σ12(z−μ2)+σ22μ1)+σ12(z−μ2)2+σ22μ12)]dx
令 σz=σ12+σ22,代入上式:
f(z)=∫−∞+∞2πσ1σ21exp[−(2σ12σ22x2(σ12+σ22)−2x(σ12(z−μ2)+σ22μ1)+σ12(z−μ2)2+σ22μ12)]dx=∫−∞+∞2π⋅2πσ1σ2⋅σz/σz1exp[−(2σ12σ22/σz2[x2(σ12+σ22)−2x(σ12(z−μ2)+σ22μ1)+σ12(z−μ2)2+σ22μ12]/σz2)]dx=∫−∞+∞2πσz1⋅2π⋅σ1σ2/σz1exp[−(2(σ1σ2/σz)2x2−2x(σ12(z−μ2)+σ22μ1)/σz2+(σ12(z−μ2)2+σ22μ12)/σz2)]dx
为简化公式推导过程,令 M=(σ12(z−μ2)+σ22μ1)/σz2,代入上式:
f(z)=∫−∞+∞2πσz1⋅2π⋅σ1σ2/σz1exp[−(2(σ1σ2/σz)2x2−2x(σ12(z−μ2)+σ22μ1)/σz2+(σ12(z−μ2)2+σ22μ12)/σz2)]dx=∫−∞+∞2πσz1⋅2π⋅σ1σ2/σz1exp[−(2(σ1σ2/σz)2x2−2x⋅M+M2−M2+(σ12(z−μ2)2+σ22μ12)/σz2)]dx=∫−∞+∞2πσz1⋅2π⋅σ1σ2/σz1exp[−(2(σ1σ2/σz)2(x−M)2−M2+(σ12(z−μ2)2+σ22μ12)/σz2)]dx=∫−∞+∞2πσz1exp[−(2(σ1σ2/σz)2(σ12(z−μ2)2+σ22μ12)/σz2−M2)]⋅2π⋅σ1σ2/σz1exp[−(2(σ1σ2/σz)2(x−M)2)]dx=2πσz1exp[−(2(σ1σ2/σz)2(σ12(z−μ2)2+σ22μ12)/σz2−M2)]⋅∫−∞+∞2π⋅σ1σ2/σz1exp[−(2(σ1σ2/σz)2(x−M)2)]dx
神奇的事情发生了!我们看到上述推导的最后一步好像出现了熟悉的内容。对啊,那不正是对均值为 M,标准差为 σ1σ2/σz 的正态分布变量的概率密度函数做积分吗!很显然,这个值是 1,功夫不负有心人,我们终于消掉了一大段的公式,只剩下化简最后的部分就完成了。
续上式:
f(z)=2πσz1exp[−(2(σ1σ2/σz)2(σ12(z−μ2)2+σ22μ12)/σz2−M2)]=2πσz1exp[−(2(σ1σ2/σz)2⋅σz4(σ12(z−μ2)2+σ22μ12)/σz2⋅σz4−M2⋅σz4)]=2πσz1exp[−(2σz2(σ1σ2)2σz2(σ12(z−μ2)2+σ22μ12)−(σ12(z−μ2)+σ22μ1)2)]=2πσz1exp[−(2σz2(σ1σ2)2σz2σ12(z−μ2)2+σz2σ22μ12−(σ12(z−μ2))2−(σ22μ1)2−2σ22μ1(σ12(z−μ2)))]=2πσz1exp[−(2σz2(σ1σ2)2 (σ12+σ22)σ12(z−μ2)2+(σ12+σ22)σ22μ12−σ14(z−μ2)2−σ24μ12−2σ12σ22μ1(z−μ2))]=2πσz1exp[−(2σz2(σ1σ2)2 σ14(z−μ2)2+σ12σ22(z−μ2)2+σ24μ12+σ12σ22μ12−σ14(z−μ2)2−σ24μ12−2σ12σ22μ1(z−μ2))]=2πσz1exp[−(2σz2(σ1σ2)2 σ12σ22(z−μ2)2+σ12σ22μ12−2σ12σ22μ1(z−μ2))]=2πσz1exp[−(2σz2 (z−μ2)2+μ12−2μ1(z−μ2))]=2πσz1exp[−(2σz2 (z−μ2−μ1)2)]=2πσz1exp[−(2σz2 (z−(μ1+μ2))2)]
这简直是太酷啦!经过这么艰辛的推导过程,这个函数就算化成灰我们也认识!它就是 均值为 μ1+μ2,方差为 σ12+σ22 的正态分布变量的概率密度函数!
因此,若有 X1∼N(μ1,σ12) 及 X2∼N(μ2,σ22),则有 X1+X2∼N(μ1+μ2,σ12+σ22)。
回到之前的问题,我们已经证明了两个正态分布变量相加后仍然服从正态分布,那么对均值来说肯定也是更加适用,我们重新代入公式可得:
根据:X1∼N(μ1,n1σ12), X2∼N(μ2,n2σ22),有 X1−X2∼N(μ1−μ2,n1σ12+n2σ22)。
因此,两个正态分布变量相减的 Z 值计算公式为:
Z=n1σ12+n2σ22(X1−X2)−(μ1−μ2)
代入题目相关参数:
Z=100010.604581222+100012.52436652(79.2−80)−(0)=−1.541552019
与之前类似,均值相等检测使用双侧检验,
当 α=0.05 时,查正态分布 Z 分数表,得 Z0.05/2=1.96,因 1.541552019<1.96,Z 检查结果未落在拒绝域,故不可推翻全体学生的整体成绩没有显著差异的假设。那是不是就意味着我们可以认为全体学生的整体成绩没有显著差异?答案与之前一样,仍然是否定的。
再次强调,为了避免出现第二类错误,请切记 —— 推翻原假设可以接受备择假设,但若未能推翻原假设,不代表就要接受原假设。 如何在不显著的情况下衡量数据指标或效果,我们将在未来的章节继续与大家一同进行分析。
可以看到,在将两份样本的方差数据均代入计算后,检验的结论就发生了变化。实际上,对于质检这种场合很可能是通过抽检样本与特定数值进行比较,但在比较两份本身就存在波动的样本集时,我们往往是需要引入双方的方差一同代入计算,只有这样的比较,才更能反映样本的状况。
回到我们文章的开始,现在我们是否能计算两份样本的显著性差异了?
|
UV |
订单数 |
人均创单率 |
创单数方差 |
| 实验组 |
45180 |
3221 |
0.0712926073 |
0.1670067842 |
| 对照组 |
44904 |
3276 |
0.0729556387 |
0.1719890729 |
建立假设:
- 原假设(H0):实验组与对照组的创单转化率没有显著差异,即 μ=μ0。
- 备择假设(H1):实验组与对照组的创单转化率存在显著差异,即 μ=μ0。
计算 Z 值:
Z=n1σ12+n2σ22(X1−X2)−(μ1−μ2)=451800.16700678422+449040.17198907292(0.0712926073−0.0729556387)=−1.472181649
当 α=0.05 时,查正态分布 Z 分数表,得 Z0.05/2=1.96,因 1.472181649<1.96,Z 检查结果未落在拒绝域,故不可推翻实验组与对照组的创单转化率没有显著差异的假设。
文末思考:
- 对 A/B 测试示例来说,实验组与对照组均属于一个样本集中的部分用户,它们各自的方差能代表整体用户的表现吗?
- Z 检验的公式中,σ2 通常是指总体方差,通过抽样得到的方差(样本方差)能直接代入公式吗?
- 除了 Z 检验之外,其他检验方法是如何使用的?
- 是否应该在进行 Z 检验前,检查样本的正态性?而不是简单假设其符合正态分布?
篇幅有限,我们在后续章节会继续展开分析。