A/B Testing 与正态分布(下)

发布于:1/10/2024, 11:31:40 AM @孙博
技术分享 | AB测试,数学
许可协议:署名-非商业性使用(by-nc)

在上一章中,我们一起回顾了什么是分布,概率分布函数及概率密度函数的意义,并在最后给出了正态分布及标准正太分布的数学定义及其相关公式。但并没有涉及到如何利用正态分布进行计算,该篇会从应用的角度,通过几个具体案例与大家一起研究如何计算出我们想要得出的各种数值。

首先我们回顾一下正态分布及标准正态分布的相关的数学定义及相关公式。

假定随机变量 $X$ 服从一个位置参数为 $\mu$、尺度参数为 $\sigma$ 的概率分布,且其概率密度函数为 $ f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(x-\mu)^2}{2\sigma^2}} $,则这个随机变量就称为正态随机变量,正态随机变量服从的分布就称为正态分布,记做 $X\sim{N}(\mu, \sigma^2)$,读作 $X$ 服从 $N(\mu, \sigma^2)$,或 $X$ 服从正态分布。特别的,当 $\mu = 0$、$\sigma = 1$ 时,$f(x)=\frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}}$,我们将这种情况称为标准正态分布,记为 $X\sim{N}(0, 1)$。其概率密度函数可记为 $\phi(x)$。

正态分布函数 $F(x) = P(X\le{x}) = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{x}e^{-\frac{(t-\mu)^2}{2\sigma^2}}dt$,当 $\mu = 0$、$\sigma = 1$ 时,$F(x) = P(X\le{x}) = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{x}e^{-\frac{t^2}{2}}dt$,其概率分布函数可记为 $\Phi(x)$。

对于非数学专业的人来说,计算积分应该是一件令人讨厌且非常困难的事,起码对我来说是这样。好在我们在设计 A/B 平台的统计报表时,并不需要过多的了解其背后的各种运算过程及换算关系,只要知道如何进行计算并正确的运用就可以了。

在上一章中有提到,对于正态分布 $X\sim{N}(\mu, \sigma^2)$,为了简化计算,通常可通过将 $X$ 进行变换($X$ 的标准化)使其满足标准正态分布:$ Z =\frac{X-\mu}{\sigma}\sim{N(0, 1)}$。但是并没有说明为什么要做该转换,以及基于正态分布到底可以计算什么数据,所以本章将重点介绍有关计算过程。


看到一大堆公式,相信已经有朋友准备放弃了。但你千万先别放弃,如果我告诉你基于正态分布的计算仅需要计算两个极为简单的参数,再查一下现成的表格就行,你是不是立刻就想继续看下去了?

在正式开始介绍极为简单的计算过程前,再定义一个新概念——分位点

设随机变量 $Z\sim{N(0, 1)}$,若对 $\alpha\in{(0,1)}$,实数 $z_\alpha$ 满足 $P(Z>z_\alpha)=\alpha$,则称点 $z_\alpha$ 为标准正态分布上 $\alpha$ 分位点。

看到公式就头疼的小伙伴一定会说——抽象,太抽象了。不要担心,请看下图,一图胜千言。

上 α 分位点

图中 $f(z)$ 表示概率密度函数,根据此前我们掌握的定义,$z_\alpha$ 点右侧至无穷大区域的线下面积就代表 $P(Z > z_\alpha)$ —— 即变量 $Z > z_\alpha$ 时的概率。

上面我们介绍的分位点,用来表达 $P(Z>z_\alpha)=\alpha$,也就是图中 $z_\alpha$ 右侧的区域,它还可以被称为 上 $\alpha$ 分位点;与此相对,还存在 $P(Z<z_{1-\alpha})=\alpha $ 的情况,用来表达 $z_{1-\alpha}$ 左侧的区域,被称为 下 $\alpha$ 分位点

特别的,在正态分布、T 分布 等关于 $y$ 轴对称概率分布中,上 $\alpha$ 分位点与下 $\alpha$ 分位点关于原点对称,所以有:$z_\alpha + z_{1-\alpha} = 0$,因此:$z_{1-\alpha} = - z_\alpha$。

下 α 分位点

由于标准正态分布是沿 $y$ 轴对称的(双尾对称),该特性使得讨论尾部概率或极小概率的相关事件时只需知道右侧尾部概率即可,所以有 $P(|Z|>z_{\alpha/2}) =\alpha$ 用来表达两侧区域的 双侧 $\alpha$ 分位点。对标准的 A/B 测试来说,这个分位点是对我们最重要的分位点,后续的章节我们会继续向大家详细介绍。

双侧 α 分位点

关于分位点的概念也介绍完了,这个点位有什么用?


我们多次提到,为了简化计算,会把正态分布通过 X 的标准化转化为标准正态分布。让我们用一个具体的例子来看下是如何计算、以及简化在哪里的。

问题:已知某地有 1000 万人,现想调查该地人口身高情况,现通过随机抽样的方式获取到 1000 人的身高数据,经初步统计,计算得出其平均值为 170cm、方差为 1600,想以此数据估算身高超过 175cm 的有多少人。

根据中心极限定理,因为该地人口众多,其身高均值应当服从正态分布。以 H 代表身高因此有 $\overline{H}\sim{N(170, 1600)}$,计算身高超过 175cm 的人数百分比(即:概率)就变为解 $P(H > 175)$。因为我们有 $F(H\le{x}) = \int_{-\infty}^{x}f(x)dt$,因此 $P(H > 175) = 1 - P(H \le{175}) = 1 - F(175)$,代入参数 $\mu=170$、$\sigma=\sqrt{1600}=40$,有 $F(H\le{175}) = \frac{1}{\sqrt{2\pi}\times{40}}\int_{-\infty}^{175}e^{-\frac{(x-170)^2}{2\times{40^2}}}dx$,只要解开这个积分,结果不就可以轻轻松松计算出来了?

是不是点叉号关闭同时取消关注的心都有了?别急别急,再给我一次机会,我们做一次 X 的标准化看看结果会不会变得更简单一些。

令 $Z = \frac{H - 170}{40}$,则有 $F(175) = \Phi(0.125) = \frac{1}{\sqrt{2\pi}}\int_{-\infty}^{0.125}e^{-\frac{x^2}{2}}dx$。e 为底的函数是没有初等原函数的,自然也无法用牛顿-莱布尼兹公式快速计算。不过我们可以先尝试使用泰勒展开计算一下它的近似值。

已知指数函数泰勒级数展开式 $e^x=1+\frac{x}{1!}+\frac{x^2}{2!}+\frac{x^3}{3!}+\frac{x^4}{4!}+\dots$

则标准正态分布的概率密度函数:

$$
\begin{alignat}{2}
\phi(x)
&=\frac{1}{\sqrt{2\pi}}e^{-\frac{x^2}{2}} \\
&=\frac{1}{\sqrt{2\pi}}(1+\frac{(-\frac{x^2}{2})}{1!}+\frac{(-\frac{x^2}{2})^2}{2!}+\frac{(-\frac{x^2}{2})^3}{3!}+\frac{(-\frac{x^2}{2})^4}{4!}+\dots+\frac{(-\frac{x^2}{2})^n}{n!}+\dots) \\
&=\frac{1}{\sqrt{2\pi}}(1-\frac{x^2}{1!\times{2^1}}+\frac{x^4}{2!\times{2^2}}-\frac{x^6}{3!\times{2^3}}+\frac{x^8}{4!\times{2^4}}+\dots+(-1)^n\frac{x^{2n}}{n!\times{2^n}}+\dots)
\end{alignat}
$$

基于上述展开式,对标准正态分布的概率分布函数求定积分可变为求泰勒展开式的定积分:

$$
\begin{alignat}{2}
F(b)-F(a)
&=\frac{1}{\sqrt{2\pi}}\int_{a}^{b}e^{-\frac{x^2}{2}}dx \\
&=\frac{1}{\sqrt{2\pi}}\int_{a}^{b}(1-\frac{x^2}{1!\times{2^1}}+\frac{x^4}{2!\times{2^2}}-\frac{x^6}{3!\times{2^3}}+\frac{x^8}{4!\times{2^4}}+\dots+(-1)^n\frac{x^{2n}}{n!\times{2^n}}+\dots)dx \\
&=\frac{1}{\sqrt{2\pi}}(1\times{x}-\frac{x^{2+1}}{1!\times{2^1}\times{(2+1)}}+\frac{x^{(4+1)}}{2!\times{2^2}\times{(4+1)}}+\dots+(-1)^n\frac{x^{2n+1}}{n!\times{2^n}\times{(2n+1)}}+\dots)|_{a}^{b}
\end{alignat}
$$

由于标准正态分布的概率分布函数是关于 $y$ 轴对称的,且 $\int_{-\infty}^{+\infty}\phi(x)dx = 1$,因此 $\Phi(x) = \int_{-\infty}^{x}\phi(x)dx = 0.5 + \int_{0}^{x}\phi(x)dx$。

因为消除了 $e$,就表示我们可以使用牛顿-莱布尼兹公式了。因此,上述解 $\Phi(x)$ 的问题就变成了求

$$
\Phi(x) = 0.5+\frac{1}{\sqrt{2\pi}}(1\times{x}-\frac{x^{2+1}}{1!\times{2^1}\times{(2+1)}}+\frac{x^{(4+1)}}{2!\times{2^2}\times{(4+1)}}+\dots+(-1)^n\frac{x^{2n+1}}{n!\times{2^n}\times{(2n+1)}}+\dots)
$$

为了简化计算过程,我们令泰勒展开式 $n=5$,则 $\Phi(0.125)\approx0.5+0.39894\times{(0.125-\frac{0.125^3}{6}+\frac{0.125^5}{40}-\frac{0.125^7}{336}+\frac{0.125^9}{3456}-\frac{0.125^{11}}{42240})}=0.549738225$,可理解为:在该地,约有 54.97% 的人身高不超过 175cm。相应的可算出,有 $10000000*(1-0.549738225)=4502617$ 人的身高超过了 175cm。

真是令人酣(大)畅(汗)淋漓的计算过程,这根本也不简单嘛!


你别急,不出意外的话,意外就快出现了!

之所以有一个标准正态分布的概念,标准二字就代表了标准!(好一句废话)

事实上,为了让大家基于标准正态分布的计算更加容易,对于 $\Phi(x)$ 的计算完全可以通过查表来进行。

0.00 0.01 0.02 0.03 0.04 0.05 0.06 0.07 0.08 0.09
0.0 0.5000 0.5040 0.5080 0.5120 0.5160 0.5199 0.5239 0.5279 0.5319 0.5359
0.1 0.5398 0.5438 0.5478 0.5517 0.5557 0.5596 0.5636 0.5675 0.5714 0.5753
0.2 0.5793 0.5832 0.5871 0.5910 0.5948 0.5987 0.6026 0.6064 0.6103 0.6141
0.3 0.6179 0.6217 0.6255 0.6293 0.6331 0.6368 0.6406 0.6443 0.6480 0.6517
0.4 0.6554 0.6591 0.6628 0.6664 0.6700 0.6736 0.6772 0.6808 0.6844 0.6879
0.5 0.6915 0.6950 0.6985 0.7019 0.7054 0.7088 0.7123 0.7157 0.7190 0.7224
0.6 0.7257 0.7291 0.7324 0.7357 0.7389 0.7422 0.7454 0.7486 0.7517 0.7549
0.7 0.7580 0.7611 0.7642 0.7673 0.7704 0.7734 0.7764 0.7794 0.7823 0.7852
0.8 0.7881 0.7910 0.7939 0.7967 0.7995 0.8023 0.8051 0.8078 0.8106 0.8133
0.9 0.8159 0.8186 0.8212 0.8238 0.8264 0.8289 0.8315 0.8340 0.8365 0.8389
1.0 0.8413 0.8438 0.8461 0.8485 0.8508 0.8531 0.8554 0.8577 0.8599 0.8621
1.1 0.8643 0.8665 0.8686 0.8708 0.8729 0.8749 0.8770 0.8790 0.8810 0.8830
1.2 0.8849 0.8869 0.8888 0.8907 0.8925 0.8944 0.8962 0.8980 0.8997 0.9015
1.3 0.9032 0.9049 0.9066 0.9082 0.9099 0.9115 0.9131 0.9147 0.9162 0.9177
1.4 0.9192 0.9207 0.9222 0.9236 0.9251 0.9265 0.9279 0.9292 0.9306 0.9319
1.5 0.9332 0.9345 0.9357 0.9370 0.9382 0.9394 0.9406 0.9418 0.9429 0.9441
1.6 0.9452 0.9463 0.9474 0.9484 0.9495 0.9505 0.9515 0.9525 0.9535 0.9545
1.7 0.9554 0.9564 0.9573 0.9582 0.9591 0.9599 0.9608 0.9616 0.9625 0.9633
1.8 0.9641 0.9649 0.9656 0.9664 0.9671 0.9678 0.9686 0.9693 0.9699 0.9706
1.9 0.9713 0.9719 0.9726 0.9732 0.9738 0.9744 0.9750 0.9756 0.9761 0.9767
2.0 0.9772 0.9778 0.9783 0.9788 0.9793 0.9798 0.9803 0.9808 0.9812 0.9817
2.1 0.9821 0.9826 0.9830 0.9834 0.9838 0.9842 0.9846 0.9850 0.9854 0.9857
2.2 0.9861 0.9864 0.9868 0.9871 0.9875 0.9878 0.9881 0.9884 0.9887 0.9890
2.3 0.9893 0.9896 0.9898 0.9901 0.9904 0.9906 0.9909 0.9911 0.9913 0.9916
2.4 0.9918 0.9920 0.9922 0.9925 0.9927 0.9929 0.9931 0.9932 0.9934 0.9936
2.5 0.9938 0.9940 0.9941 0.9943 0.9945 0.9946 0.9948 0.9949 0.9951 0.9952
2.6 0.9953 0.9955 0.9956 0.9957 0.9959 0.9960 0.9961 0.9962 0.9963 0.9964
2.7 0.9965 0.9966 0.9967 0.9968 0.9969 0.9970 0.9971 0.9972 0.9973 0.9974
2.8 0.9974 0.9975 0.9976 0.9977 0.9977 0.9978 0.9979 0.9979 0.9980 0.9981
2.9 0.9981 0.9982 0.9982 0.9983 0.9984 0.9984 0.9985 0.9985 0.9986 0.9986
3.0 0.9987 0.9987 0.9987 0.9988 0.9988 0.9989 0.9989 0.9989 0.9990 0.9990

这个表的用法也非常简单,当我们求 $\Phi(x)$ 时,如 $\Phi(1.96)$,首先找到 1.9 那一行,再找 0.06 那一列,就可直接查到结果为 0.9750,其含义为:$P(X \le{1.96}) = 0.9750$ —— Z 值不大于 1.96 的概率为 97.5%。

有了这张表,我们就再也不用去解定积分了,所有的计算都将变为简单的加减乘除。

基于这张表,我们再尝试计算上文中的示例,求该地区 95% 的人身高范围(即:上下限)。

求上下限即为双尾检验,我们令 $\alpha=0.05$ 表示身高范围超出大部人上下限的场景,那么钟形曲线下方中央位置就是我们所求 $1-\alpha=0.95$ —— 大部分人的身高范围,其两侧边界值即为上下限值。我们基于双侧 $\alpha$ 分位点的定义,$P(|Z|>z_{\alpha/2}) =\alpha$,可得出 $P(|Z|\le{z_{1-\alpha/2}}) =1-\alpha = 0.95$,因此,$|Z|\le{z_{0.975}}$ 处就是范围上限的点位。根据前面介绍的查表方法,可查到 $\Phi(1.96)=0.975$。因为标准正态分布的对称性,可知 95% 的上下限应当在 $\Phi(-1.96)=0.025$ ~ $\Phi(1.96)=0.975$ 之间。即 $-1.96\le{\frac{X-\mu}{\sigma}}\le{1.96}$,因 $\mu=170$、$\alpha=40$,故上下限范围是 $[91.6, 248.4]$。

这个例子数据设计的不是太好,虽然可以正确的计算数据,但 248cm 的身高还是超出了很多人的认知范围,下面我们换个例子。


产品经理为了提升创单率,将创单按钮的颜色由蓝色改为了更醒目的红色,为了能够准确的量化迭代的效果,该变动是通过 A/B 测试实现的。经过一段时间的运行,收集到的数据如下:

共计有 45180 位用户被分配到实验组,他们看到的创单按钮是红色的,在统计周期内,共计产生订单 3221 个,经计算,人均创单率为 0.0712926073,方差为 0.1670067842;
同时期共有 44904 位用户被分配到对照组,他们看到的仍然是之前的蓝色创单按钮,在同样的统计周期内,一共产生订单 3276 个,人均创单率为 0.0729556387,方差为 0.1719890729。

由于同一时期一个用户要么是实验组,要么是对照组,身份不会交换,所以两组用户都是各自独立,且都不可能包含全部的来访用户,因此,这两组数据都可以视作是全部采纳为实验组、或全部采纳为对照组的抽样样本。现在我们希望能计算出,假如两组策略分别覆盖到全量用户,假定我们的统计有 95% 的准确度,那么创单转化率最有可能的范围分别是多少?

已知样本数据量够大,根据中心极限定理我们视为每个用户的平均创单数服从正态分布。根据标准正态分布 Z 值表查表可知,有 95% 的概率,统计数值的上下限为 $[\mu-1.96\sigma, \mu+1.96\sigma]$。分别代入实验组与对照组的数据可得:

UV 订单数 人均创单率 创单数方差 创单数标准差 全量时人均创单率-下限 全量时人均创单率-上限
实验组 45180 3221 0.0712926073 0.1670067842 0.4086646354 -0.729690078084 0.872275292684
对照组 44904 3276 0.0729556387 0.1719890729 0.4147156531 -0.739887041376 0.885798318776

等等,不太对吧? 人均创单率怎么可能会是个负数?


让我们重新仔细地回顾一下中心极限定理 —— 当我们拥有一个足够大的样本集合时,基于中心极限定理的特性,该样本的均值一定是服从正态分布的。

原来是这样!我们本以为 $X\sim{N}(\mu, \sigma^2)$,实际上应该是 $\overline{X}\sim{N}(\mu, \frac{\sigma^2}{n})$。重新代入 X 的标准化可得,$\frac{\overline{X}-\mu}{\sigma/\sqrt{n}}\sim{N(0, 1)}$,因此统计数值均值的上下限应该改为 $[\mu-\frac{1.96\sigma}{\sqrt{n}}, \mu+\frac{1.96\sigma}{\sqrt{n}}]$,过程就不赘述了,重新计算可得:

UV 订单数 人均创单率 创单数方差 创单数标准差 全量时人均创单率-下限 全量时人均创单率-上限
实验组 45180 3221 0.0712926073 0.1670067842 0.4086646354 0.067524268 0.075060947
对照组 44904 3276 0.0729556387 0.1719890729 0.4147156531 0.069119768 0.07679151

现在计算得出的值看起来合理多了。


尽管我们成功的“预测”了各个分组在开启全量时的表现,但如何评估他们的差异性呢?如上文中的数值,是否意味着对照组一定比实验组的效果要好?

篇幅有限,敬请期待下一篇 —— A/B Testing 与假设检验算法。