01 | 统计基础(上):系统掌握指标的统计属性

你好,我是博伟。

在学习、解决技术问题的时候,我们都知道有这么一句话“知其然知其所以然”。那么,A/B测试的“所以然”是什么呢?在我看来,就是A/B测试背后的计算原理,知道A/B测试为什么要这么设计,最佳实践中为什么要选择这样的指标、那样的检验方法。

那说到A/B测试背后的计算原理,我们首先得知道,A/B测试的理论基础是假设检验(Hypothesis Testing)。可以说,假设检验,贯穿了A/B测试从实验设计到分析测试结果的整个流程。

如果要一句话解释“假设检验”的话,就是选取一种合适的检验方法,去验证在A/B测试中我们提出的假设是否正确。现在,你只要知道“假设检验”中,最重要也最核心的是“检验”就可以了,因为选取哪种检验方法,取决于指标的统计属性。

也就是说,理解指标的统计属性,是我们掌握假设检验和A/B测试的前提,也是“知其所以然”的第一步。

而至于深入理解并用好“假设检验”的任务,我们就留着下一讲去完成吧。

指标的统计属性,指的是什么?

在实际业务中,我们常用的指标其实就是两类:

  • 均值类的指标,比如用户的平均使用时长、平均购买金额、平均购买频率,等等。
  • 概率类的指标,比如用户点击的概率(点击率)、转化的概率(转化率)、购买的概率(购买率),等等。

很明显,这些指标都是用来表征用户行为的。而用户的行为是非常随机的,这也就意味着这些指标是由一系列随机事件组成的变量,也就是统计学中的随机变量(Random Variable)。

“随机”就代表着可以取不同的数值。比如,一款社交App每天的使用时间,对轻度用户来说可能不到1小时,而对重度用户来说可能是4、5小时以上。那么问题来了,在统计学中,怎么表征呢?

没错,我们可以用概率分布(Probability Distribution),来表征随机变量取不同值的概率和范围。所以,A/B测试指标的统计属性,其实就是要看这些指标到底服从什么概率分布。

在这里,我可以先告诉你结论:在数量足够大时,均值类指标服从正态分布;概率类指标本质上服从二项分布,但当数量足够大时,也服从正态分布。

看到这两个结论你可能会有很多问题:

  • 什么是正态分布?什么是二项分布?
  • “数量足够大”具体是需要多大的数量?
  • 概率类指标,为什么可以既服从二项分布又服从正态分布?

不要着急,我这就来一一为你解答。

正态分布(Normal Distribution)

正态分布是A/B测试的指标中最主要的分布,是计算样本量大小和分析测试结果的前提。

在统计上,如果一个随机变量x的概率密度函数(Probability Density Function)是:

$$
f(x)=\frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^{2}}
$$

$$
\begin{aligned}
\mu &=\frac{x_{1}+x_{2}+\cdots+x_{n}}{n} \\\
\sigma &=\sqrt{\frac{\sum_{i}^{n}\left(x_{i}-\mu\right)^{2}}{n}}
\end{aligned}
$$

那么,x就服从正态分布。

其中 ,μ为x的平均值(Mean),σ为x的标准差(Standard Deviation),n为随机变量x的个数,xi为第i个x的值。

随机变量x服从正态分布时的直方图(Histogram)如下:

直方图是表征随机变量分布的图表,其中横轴为x可能的取值,纵轴为每个值出现的概率。通过直方图你可以看到,距离平均值μ越近的值出现的概率越高。

除了平均值μ,你还能在直方图和概率密度函数中看到另一个非常重要的参数:标准差σ。σ通过计算每个随机变量的值和平均值μ的差值,来表征随机变量的离散程度(偏离平均值的程度)。

接下来,我们就来看看标准差σ是怎么影响随机变量的分布的。

为了方便理解,我们用Python做一个简单的模拟,选取服从正态分布的随机变量x,其平均值μ=0;分别把x的标准差σ设置为1.0、2.0、3.0、4.0, 然后分别做出直方图。对应的Python代码和直方图如下:

from scipy.stats import norm
import numpy as np
import matplotlib.pyplot as plt

## 构建图表
fig, ax = plt.subplots()
x = np.linspace(-10,10,100)
sigma = [1.0, 2.0, 3.0, 4.0]
for s in sigma:
    ax.plot(x, norm.pdf(x,scale=s), label='σ=%.1f' % s)

## 加图例
ax.set_xlabel('x')
ax.set_ylabel('Density')
ax.set_title('Normal Distribution')
ax.legend(loc='best', frameon=True)
ax.set_ylim(0,0.45)
ax.grid(True)

通过这个直方图去看标准差σ对随机变量分布的影响,是不是就更直观了?σ越大,x偏离平均值μ的程度越大,x的取值范围越广,波动性越大,直方图越向两边分散。

咱们再举个生活中的例子来理解标准差。在一次期末考试中,有A和B两个班的平均分都是85分。其中,A班的成绩范围在70~100分,通过计算得到成绩的标准差是5分;B的成绩范围在50~100分,计算得到的成绩标准差是10分。你看,A班的成绩分布范围比较小,集中在85分左右,所以标准差也就更小。

说到标准差,你应该还会想到另一个用来表征随机变量离散程度的概念,就是方差(Variance)。其实,方差就是标准差的平方。所以,标准差σ和方差在表征离散程度上其实是可以互换的。

有了方差和标准差,我们就可以描述业务指标的离散程度了,但要计算出业务指标的波动范围(我会在第4讲展开具体的计算方法),我们还差一步。这一步就是z分数。

要解释z分数,就要引出一种特殊的正态分布,也就是标准正态分布(Standard Normal Distribution),其实就是平均值μ=0、标准差σ=1的正态分布。

标准正态分布的直方图如下所示:

这里的横轴就是z分数(Z Score),也叫做标准分数(Standard Score):

$$
\mathrm{z} \text { score }=\frac{x-\mu}{\sigma}
$$

事实上,任何一个正态分布都可以通过标准化(Standardization)变成标准正态分布。而标准化的过程,就是按照上面这个公式把随机变量x变为z分数。不同z分数的值,代表x的不同取值偏离平均值μ多少个标准差σ。比如,当z分数等于1时,说明该值偏离平均值1个标准差σ。

我们再用一个社交App业务指标的例子,来强化下对正态分布的理解。

现在有一个社交App,我们想要了解用户日均使用时间t的概率分布。根据现有的数据,1万个用户在一个月内每天使用App的时间,我们做出了一个直方图:

可以看出,这1万个用户的日均使用时间t,大约在3-5小时这个范围,而且是近似正态分布的钟形曲线,说明t的分布也可以近似为正态分布。

中心极限定理(Central Limit Theorem)

这其实是均值类变量的特性:当样本量足够大时,均值类变量会趋近于正态分布。这背后的理论基础,就是中心极限定理。

中心极限定理的数学证明和推理过程十分复杂,但不用害怕,我们只要能理解它的大致原理就可以了:不管随机变量的概率分布是什么,只要取样时的样本量足够大,那么这些样本的平均值的分布就会趋近于正态分布。

那么,这个足够大的样本量到底是多大呢?

统计上约定俗成的是,样本量大于30就属于足够大了。在现在的大数据时代,我们的样本量一般都能轻松超过30这个阈值,所以均值类指标可以近似为正态分布。

到这里,“数量足够大”具体是需要多大的数量,以及什么是正态分布,这两个问题我们就都明白了。接下来,我们再学习下什么是二项分布,之后我们就可以理解为什么概率类指标可以既服从二项分布又服从正态分布了。

二项分布(Binomial Distribution)

业务中的概率类指标,具体到用户行为时,结果只有两种:要么发生,要么不发生。比如点击率,就是用来表征用户在线上点击特定内容的概率,一个用户要么点击,要么不点击,不会有第三种结果发生。

这种只有两种结果的事件叫做二元事件(Binary Event)。二元事件在生活中很常见,比如掷硬币时只会出现正面或者反面这两种结果,所以统计学中有专门有一个描述二元事件概率分布的术语,也就是二项分布(Binomial Distribution)。

这里我们还是结合着社交App的例子,来学习下二元分布。

这款社交App在网上投放了广告,来吸引人们点击广告从而下载App。现在我们想通过数据看看App下载率的分布情况:

下载率 = 通过广告下载App的用户数量 / 看到广告的用户数量。

因为单个二元事件的结果,只能是发生或者不发生,发生的概率要么是100%要么是0%,所以我们要分析下载率就必须把数据进行一定程度的聚合。这里,我们就以分钟为单位来举例,先计算每分钟的下载率,再看它们的概率分布。

我们有一个月的用户及下载数据,一个月一共有43200分钟(60*24*30),因为我们关注的是每分钟的下载率,所以一共有43200个数据点。通过数据分析发现,每分钟平均有10个人会看到广告,下载率集中分布在0-30%之间。

下图是每分钟下载率的概率分布:

你可能会说,概率在某种程度上也是平均值,可以把这里的下载率理解为“看到广告的用户的平均下载量”,那我们已经有43200个数据点了,样本量远远大于30,但为什么下载率的分布没有像中心极限定理说的那样趋近于正态分布呢?

这是因为在二项分布中,中心极限定理说的样本量,指的是计算概率的样本量。在社交App的例子中,概率的样本量是10,因为平均每分钟有10人看到广告,还没有达到中心极限定理中说的30这个阈值。所以,我们现在要提高这个样本量,才能使下载率的分布趋近正态分布。

提高样本量的方法也很简单,可以计算每小时的下载率。因为每小时平均有600人看到广告,这样我们的样本量就从10提高到了600。下图是每小时下载率的概率分布:

现在再看这张直方图,每小时下载率的分布是不是就趋近于正态分布了!图中下载率的平均值大约为10%。

在二项分布中,有一个从实践中总结出的经验公式:min(np,n(1-p)) >= 5。其中,n为样本大小,p为概率的平均值。

这个公式的意思是说,np或者n(1-p)中相对较小的一方大于等于5,只有二项分布符合这个公式时,才可以近似于正态分布。这是中心极限定理在二项分布中的变体。

在我们的例子中,计算每分钟下载率的概率分布时,np=10*10%=1,小于5,所以不能近似成正态分布;计算每小时下载率的概率分布时,np=600*10%=60,大于等于5,所以可以近似成正态分布。

我们可以利用这个公式来快速判断概率类指标是不是可以近似成正态分布。不过你也可以想象在实践中的A/B测试,由于样本量比较大,一般都会符合以上公式的。

小结

今天这节课,我们主要学习了A/B测试和假设检验的前提,也就是指标的统计属性。我给你总结成了一个定理、两个分布和三个概念:

  1. 一个定理:中心极限定理。
  2. 两个分布:正态分布和二项分布。
  3. 三个概念:方差,标准差和z分数。

生活中随机变量的分布有很多种,今天我重点给你介绍了正态分布和二项分布,它们分别对应的是最普遍的两类业务指标:均值类和概率类。

而且你要知道,有了中心极限定理,我们就可以把业务中的大部分指标都近似成正态分布了。这一点非常重要,因为A/B测试中的很多重要步骤,比如计算样本量大小和分析测试结果,都是以指标为正态分布为前提的。

同时,你还可以用通过方差和标准差来了解业务指标的离散程度,再结合z分数就可以计算出业务指标的波动范围了。只有理解了指标的波动范围,才能够帮助我们得到更加准确的测试结果。

在下节课中,我们继续学习A/B测试的统计基础,也就是假设检验及其相关的统计概念。

思考题

我在刚开始接触概率类指标的二项分布时对于其如何能近似成正态分布很迷惑,大家可以在这里聊一聊在学习A/B测试的统计过程中有什么难理解的地方,以及是如何解决的?

欢迎在留言区写下你的思考和想法,我们可以一起交流讨论。如果你觉得有所收获,欢迎你把课程分享给你的同事或朋友,一起共同进步!

精选留言

  • 2021-02-08 16:20:18

    老师,如果一个AB实验的评价指标为用户日均app使用时长,AB两组各1w个用户,实验时长一个月。
    假设检验的目的是验证AB两组最终的差异delta是实验本身带来的差异,而不是抽样造成的差异。基于这个场景,我有两个问题:
    1. 两组的差异delta理论上有可能来源于3个地方:用户抽样误差(只抽取了1w个用户,而没有抽取无限多用户);实验本身带来的差异;实验日期抽样误差(只实验了30天,而没有实验无限多天)。一般的AB实验中我们只考虑了前两个因素,那么对于实验日期抽样误差这个因素应该如何考虑?
    2. 假设我把全国所有的用户分成AB两组做实验,是否可以将一组内所有用户一天的平均值当作一个样本进行检验?也就是说,如果实验持续30天,那么最终A组有30个样本,B组有30个样本
    作者回复

    你好,对于你的第一个问题:
    总结的很好!
    对于你说的第三个差异来源:时间,如果真的想严谨的考虑,实践中也是有办法的,就是设置一个长时间的Holdback组,假设通过A/B测试我们发现实验组效果好,在之后做决策时,可以给绝大部分的用户(比如99%)实验组的体验(而不是全部100%用户),这时候一直留一个1%的holdback组(控制组的体验),这样的就可以看出随着时间的推移两者的差异如何变化。

    对于你的第二个问题:如果将一组内所有用户一天的平均值当作一个样本,会出现几个问题:
    1. 样本量会急剧减小,使得中心极限定理那以满足,统计计算难以展开;
    2. 以天为单位可能会出现波动性,比如周中和周末的用户行为不同,给A/B测试造成额外的干扰;
    3. 实验单位也不再是用户,这样话没有办法来衡量用户反应相关的指标。

    2021-03-02 09:56:52

  • Kaye

    2020-12-03 21:43:20

    希望老师推荐一些AB测试的论文
    作者回复

    这两篇KDD的文章不错:
    https://exp-platform.com/Documents/2014%20experimentersRulesOfThumb.pdf
    https://exp-platform.com/Documents/2009-ExPpitfalls.pdf

    2020-12-04 12:30:53

  • 何涛(Louis)

    2020-12-03 09:28:20

    想问问张老师有没有推荐的参考读物或者网站?多谢!
    作者回复

    这里有一些比较好的英文书籍推荐:
    https://www.alexbirkett.com/ab-testing-books/

    2020-12-03 13:58:37

  • 牛奶

    2021-05-18 15:42:16

    这其实是均值类变量的特性:当样本量足够大时,均值类变量会趋近于正态分布。这背后的理论基础,就是中心极限定理———这个“样本量”足够大的标准是30个,如果用上面的那个例子,一万个用户一个月内每日的平均使用app时长,这个30指的是要有一万个用户(抽样超过30个)还是说每个用户的数据要超过30个(一个月每天的使用时长,刚好30个)?
    作者回复

    你好,这里指的是每个用户的数据要超过30个,因为我们要算每个用户每日的平均使用时长。

    2021-08-30 13:58:42

  • Geek_8c33f8

    2021-03-22 19:18:28

    老师好,
    关于“概率类指标,能否使用t检验?”这个问题,
    如果核心指标是比例,能都用这个比例指标(A除以B计算后的指标值)再去计算整体的均值?这样理解是不是概率类/比例类指标是不是也可以使用T检验呢
    作者回复

    先说结论:概率类指标在数据量大的情况下也可以使用t检验。
    再说原因:
    在大样本量的情况下(统计上定义为大于30,现在的大数据时代让我们的数据远远大于这个数值),t检验和z检验几乎是等价的,没有太大区别,所以大数据时代不要太纠结t或者是z。而且根据中心极限定理,这些指标都是近似服从正态分布的。

    2021-04-29 04:38:27

  • 蚂蚁内推+v

    2020-12-26 22:18:15

    老师,直观理解,下载率不应该是一个连续型随机变量吗?为什么会服从二项分布?
    作者回复

    你好,下载率这个指标表征的其实是在大样本量下人们下载的概率,对于单个用户来说下载不下载是一个二元事件,那么对于多个用户来说就是二项分布,因为二项分布的定义就是”n个独立的是/非试验中成功的次数的离散概率分布“。

    2020-12-29 13:19:54

  • Jabin

    2020-12-06 22:36:56

    老师,之后的实战课程是会把源数据及代码贴出来的吧
    作者回复

    你好,最后一节的实战课程会把代码贴出的,中间的课程会通过案例重点讲解流程和经验。

    2020-12-08 13:25:47

  • Tasty Joy

    2021-02-05 18:57:55

    在案例中,NP=样本大小*百分之10,为什么是10%呢?案例中哪里可以看出来。P不是代表概率的平均值吗?那么概率的平均值怎么算?
    作者回复

    你好,由下载率的直方图可以看出其为正态分布,并且分布的中心在10%左右,因为正态分布时左右对称的,所以可以得出下载率的平均值为10%.

    2021-03-02 09:04:29

  • 贤者时间

    2020-12-22 17:05:39

    请问老师:
    均值类指标服从正态分布的例子是不是有点问题呢?
    “我们再用一个社交 App 业务指标的例子,来强化下对正态分布的理解。现在有一个社交 App,我们想要了解用户日均使用时间 t 的概率分布。”
    按照我对中心极限定理的理解,这个例子似乎应该这么解释:该APP的全量用户的平均日均使用时长是t,当对全量用户抽样出N个用户,再求其均值T,这个T才符合正态分布,其均值是t。
    根据我的经验,app的用户使用时长通常来说不可能是正态分布,通常是幂律分布。。所以想跟老师探讨一下,这个例子的阐述是不是有些问题呢?
    作者回复

    你好,你对中心极限定理的理解没有错,这个例子中的直方图我是用了1万名用户一个月的使用数据画出的,这里面因为是算用户的日均使用时间,所以你可以把每个用户每天的使用时间当做一个数据点,那么现在我们从这些样本中抽样,每个用户其实有30个数据点(一个月),相当于一次抽样,那么一万个用户就相当于抽样1万次,那这一万个用户(抽样)的均值t,也就是用户的日均使用时间,就符合中心极限定理定理了嘛。

    2020-12-24 14:32:09

  • 牛奶

    2021-05-19 10:14:59

    通过数据分析发现,每分钟平均有 10 个人会看到广告,下载率集中分布在 0-30% 之间。-----这部分内容有些没有明白。虽然说“单个二元事件的结果,只能是发生或者不发生”,然后为了分析需要把数据进行一定程度的聚合,这次分析选择按分钟聚合;然后实际拥有“一个月的用户及下载数据,一个月一共有 43200 分钟,所以一共有 43200 个数据点”,是如何计算出来“每分钟平均有 10 个人会看到广告,下载率集中分布在 0-30% 之间”?尤其是集中在0-30%?不是很懂,希望老师可以辛苦解答
    作者回复

    你好,关于你的几个问题:1. ‘每分钟平均有 10 个人会看到广告’是我在这里直接告诉了结论而省去了数据分析(因为这里重点讲AB测试相关内容,我会省去一些不相关的数据分析),你可以认为是应用题的一个给定条件;2. ‘下载率集中分布在 0-30% 之间’这个是看直方图的横坐标得来的。

    2021-08-30 13:45:48

  • really_z

    2025-04-26 21:46:08

    老师好,计算每分钟下载率的概率分布时,np=10*10%=1,这个10%是怎么计算出来的呀?
  • nice鳖鳖

    2025-03-04 16:06:30

    现在有一个社交 App,我们想要了解用户日均使用时间 t 的概率分布。根据现有的数据,1 万个用户在一个月内每天使用 App 的时间,我们做出了一个直方图:
    这个例子中,如何保证这一万个用户在一个月内每天都使用APP呢,可能用户有些用户只使用了10天,这个用户日均使用时间是/10还是30呢
  • nice鳖鳖

    2025-03-04 16:05:00

    现在有一个社交 App,我们想要了解用户日均使用时间 t 的概率分布。根据现有的数据,1 万个用户在一个月内每天使用 App 的时间,我们做出了一个直方图:
  • Geek4329

    2024-01-17 09:42:14

    老师,卡方检验的应用场景是怎样的?率指标是否可以使用?
  • WS

    2024-01-06 17:49:46

    老师你好,中心极限定理其中例子的图没有理解。【我们有一个月的用户及下载数据,一个月一共有 43200 分钟(60*24*30),因为我们关注的是每分钟的下载率,所以一共有 43200 个数据点。通过数据分析发现,每分钟平均有 10 个人会看到广告,下载率集中分布在 0-30% 之间】每分钟下载率的概率分布这里,y轴代理具体什么的频率呢,条形图和折线图代表什么,这一个图是指一分钟的下载情况还是一个月43200数据的?
  • skSprint

    2023-10-10 11:44:12

    老师,想问下,在点击率的实验中,比如实验执行了15天,做分析的时候是用15天各实验组的 (15天总点击量人数)/总访问人数;还是(每天的总点击率之和)/15 来计算对比;
    如果是按15天的总点击率,那各个实验组就只有一个点击率指标,只有一个点击率指标无法构建正态分布呀
  • Adam twe

    2023-03-09 17:51:57

    老师请问t分布那个图纵轴的频率是啥意思
  • really_z

    2022-12-07 00:19:36

    老师,想知道app下载量的例子中,为什么np中的p是10%?
  • 泰迪熊

    2022-08-22 15:41:38

    复制了Python代码到Pycharm CE中没出现图表呢
  • 约瀚哥(John)

    2022-05-22 14:50:21

    老师,我是刚学A/B测试的菜鸡,请问画正态分布图,二项分布图,用什么软件?thank u