This commit is contained in:
louzefeng
2024-07-09 18:38:56 +00:00
parent 8bafaef34d
commit bf99793fd0
6071 changed files with 1017944 additions and 0 deletions

View File

@@ -0,0 +1,195 @@
<audio id="audio" title="01 | 统计基础(上):系统掌握指标的统计属性" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/eb/4c/eb296624f77085b7b03809c04efdda4c.mp3"></audio>
你好,我是博伟。
在学习、解决技术问题的时候我们都知道有这么一句话“知其然知其所以然”。那么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
$$<br>
f(x)=\frac{1}{\sigma \sqrt{2 \pi}} e^{-\frac{1}{2}\left(\frac{x-\mu}{\sigma}\right)^{2}}<br>
$$
$$<br>
\begin{aligned}<br>
\mu &amp;=\frac{x_{1}+x_{2}+\cdots+x_{n}}{n} \\\<br>
\sigma &amp;=\sqrt{\frac{\sum_{i}^{n}\left(x_{i}-\mu\right)^{2}}{n}}<br>
\end{aligned}<br>
$$
那么x就服从正态分布。
其中 μ为x的平均值Meanσ为x的**标准差**Standard Deviationn为随机变量x的个数xi为第i个x的值。
随机变量x服从正态分布时的直方图Histogram如下
<img src="https://static001.geekbang.org/resource/image/6e/20/6e074f64708841dcf94dd81bf95d7520.png" alt="">
直方图是表征随机变量分布的图表其中横轴为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)
```
<img src="https://static001.geekbang.org/resource/image/90/39/9096e03d08e2f6c249f74676b69fc439.jpeg" alt="">
通过这个直方图去看标准差σ对随机变量分布的影响是不是就更直观了σ越大x偏离平均值μ的程度越大x的取值范围越广波动性越大直方图越向两边分散。
咱们再举个生活中的例子来理解标准差。在一次期末考试中有A和B两个班的平均分都是85分。其中A班的成绩范围在70~100分通过计算得到成绩的标准差是5分B的成绩范围在50~100分计算得到的成绩标准差是10分。你看A班的成绩分布范围比较小集中在85分左右所以标准差也就更小。
说到标准差,你应该还会想到另一个用来表征随机变量离散程度的概念,就是**方差**Variance。其实方差就是标准差的平方。所以标准差σ和方差在表征离散程度上其实是可以互换的。
有了方差和标准差我们就可以描述业务指标的离散程度了但要计算出业务指标的波动范围我会在第4讲展开具体的计算方法我们还差一步。这一步就是z分数。
要解释z分数就要引出一种特殊的正态分布也就是标准正态分布Standard Normal Distribution其实就是平均值μ=0、标准差σ=1的正态分布。
标准正态分布的直方图如下所示:
<img src="https://static001.geekbang.org/resource/image/12/63/1226ea7777e38098a5yye506cb196d63.jpg" alt="">
这里的横轴就是z分数Z Score也叫做标准分数Standard Score
$$<br>
\mathrm{z} \text { score }=\frac{x-\mu}{\sigma}<br>
$$
事实上任何一个正态分布都可以通过标准化Standardization变成标准正态分布。而标准化的过程就是按照上面这个公式把随机变量x变为z分数。不同z分数的值代表x的不同取值偏离平均值μ多少个标准差σ。比如当z分数等于1时说明该值偏离平均值1个标准差σ
我们再用一个社交App业务指标的例子来强化下对正态分布的理解。
现在有一个社交App我们想要了解用户日均使用时间t的概率分布。根据现有的数据1万个用户在一个月内每天使用App的时间我们做出了一个直方图
<img src="https://static001.geekbang.org/resource/image/2c/c5/2c53064d4f4306a2383b8b5e1ba180c5.png" alt="">
可以看出这1万个用户的日均使用时间t大约在3-5小时这个范围而且是近似正态分布的钟形曲线说明t的分布也可以近似为正态分布。
### 中心极限定理Central Limit Theorem
这其实是均值类变量的特性:当样本量足够大时,均值类变量会趋近于正态分布。这背后的理论基础,就是中心极限定理。
[中心极限定理](https://en.wikipedia.org/wiki/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%之间。
下图是每分钟下载率的概率分布:
<img src="https://static001.geekbang.org/resource/image/81/20/8119d8c26b655c9ba806f68fc63e5e20.png" alt="">
你可能会说概率在某种程度上也是平均值可以把这里的下载率理解为“看到广告的用户的平均下载量”那我们已经有43200个数据点了样本量远远大于30但为什么下载率的分布没有像中心极限定理说的那样趋近于正态分布呢
这是因为在二项分布中中心极限定理说的样本量指的是计算概率的样本量。在社交App的例子中概率的样本量是10因为平均每分钟有10人看到广告还没有达到中心极限定理中说的30这个阈值。所以我们现在要提高这个样本量才能使下载率的分布趋近正态分布。
提高样本量的方法也很简单可以计算每小时的下载率。因为每小时平均有600人看到广告这样我们的样本量就从10提高到了600。下图是每小时下载率的概率分布
<img src="https://static001.geekbang.org/resource/image/2c/37/2c1f1e08aacc5dec5eb9e55e8a55fd37.png" alt="">
现在再看这张直方图每小时下载率的分布是不是就趋近于正态分布了图中下载率的平均值大约为10%。
在二项分布中有一个从实践中总结出的经验公式min(np,n(1-p)) &gt;= 5。其中n为样本大小p为概率的平均值。
这个公式的意思是说np或者n(1-p)中相对较小的一方大于等于5只有二项分布符合这个公式时才可以近似于正态分布。这是中心极限定理在二项分布中的变体。
在我们的例子中计算每分钟下载率的概率分布时np=10*10%=1小于5所以不能近似成正态分布计算每小时下载率的概率分布时np=600*10%=60大于等于5所以可以近似成正态分布。
我们可以利用这个公式来快速判断概率类指标是不是可以近似成正态分布。不过你也可以想象在实践中的A/B测试由于样本量比较大一般都会符合以上公式的。
## 小结
今天这节课我们主要学习了A/B测试和假设检验的前提也就是指标的统计属性。我给你总结成了一个定理、两个分布和三个概念
1. 一个定理:中心极限定理。
1. 两个分布:正态分布和二项分布。
1. 三个概念方差标准差和z分数。
生活中随机变量的分布有很多种,今天我重点给你介绍了正态分布和二项分布,它们分别对应的是最普遍的两类业务指标:均值类和概率类。
而且你要知道有了中心极限定理我们就可以把业务中的大部分指标都近似成正态分布了。这一点非常重要因为A/B测试中的很多重要步骤比如计算样本量大小和分析测试结果都是以指标为正态分布为前提的。
同时你还可以用通过方差和标准差来了解业务指标的离散程度再结合z分数就可以计算出业务指标的波动范围了。只有理解了指标的波动范围才能够帮助我们得到更加准确的测试结果。
在下节课中我们继续学习A/B测试的统计基础也就是假设检验及其相关的统计概念。
## 思考题
我在刚开始接触概率类指标的二项分布时对于其如何能近似成正态分布很迷惑大家可以在这里聊一聊在学习A/B测试的统计过程中有什么难理解的地方以及是如何解决的
欢迎在留言区写下你的思考和想法,我们可以一起交流讨论。如果你觉得有所收获,欢迎你把课程分享给你的同事或朋友,一起共同进步!

View File

@@ -0,0 +1,212 @@
<audio id="audio" title="02统计基础深入理解A/B测试中的假设检验" controls="" preload="none"><source id="mp3" src="https://static001.geekbang.org/resource/audio/5a/b4/5a0de1db605d4678d4df888cc45da8b4.mp3"></audio>
你好,我是博伟。
在上节课学习A/B测试指标的统计属性时我用一句话给你简单解释了下假设检验选取一种合适的检验方法去验证在A/B测试中我们提出的假设是否正确。
这句话其实很抽象,所以今天这一讲,我们就具体展开下,看看假设检验是什么,以及如何利用假设检验来做出推断。
## 假设检验(Hypothesis Testing)是什么?
假设检验,顾名思义,就是要检验我们提出的假设是不是正确的,在事实上能否成立。
在统计中我们很难获取总体数据Population。不过我们可以取得样本数据Sample然后根据样本数据的情况产生对总体数据的假设。所以我们所说的假设检验其实就是检测通过样本数据产生的假设在总体数据即事实上是否成立。
在A/B测试的语境中假设一般是指**关于实验组和对照组指标的大小的推断。**
为了更加形象地帮你理解假设检验,这节课我就从一个推荐系统的案例出发,从中抽象出假设检验的基本原理和相关概念,让你在实践中学习理论,同时把理论应用到实践中去。
新闻App中的推荐系统是重要的组成部分可以根据用户过往的浏览记录来推荐用户喜欢的内容。最近工程团队改进了推荐系统的算法就想通过A/B测试来验证改进的效果。
实验组中使用新算法,对照组中使用旧算法,然后通过点击率来表征算法的效果:推荐效果越好,点击率越高。那么,我们提出的假设就是:实验组(新算法)的点击率比对照组(旧算法)的点击率高。
你可能会有些疑惑,我们提出的“假设”,和假设检验中的“假设”是相同的吗?
其实不完全相同。
## 假设检验中的“假设”是什么?
为什么这么说呢因为在假设检验中的“假设”是一对零假设Null Hypothesis和备择假设Alternative Hypothesis它们是完全相反的。在A/B测试的语境下零假设指的是实验组和对照组的指标是相同的备择假设指的是实验组和对照组的指标是不同的。
为了更好地理解零假设和备择假设,我们可以回到推荐系统的案例中,把最开始提出的假设转化成假设检验中的零假设和备择假设:
- 零假设是,实验组和对照组的点击率是相同的。
- 备择假设是,实验组和对照组的点击率是不同的。
你可能会问,我们最开始提出的假设不是“实验组的点击率比对照组的点击率高”吗?为什么备择假设中仅仅说两组的点击率不同,却没说谁大谁小呢?
要回答这个问题我们就得先了解单尾检验One-tailed Test和双尾检验Two-tailed Test这两个概念。
- 单尾检验又叫单边检验One-sided Test它不仅在假设中说明了两个比较对象不同并且还明确了谁大谁小比如实验组的指标比对照组的指标大。
- 双尾检验又叫双边检验Two-sided Test指的是仅仅在假设中说明了两个比较对象不同但是并没有明确谁大谁小。
回到推荐系统案例中的最初假设,我们已经明确了实验组的点击率比对照组的高,那就应该选用单尾检验。但是,我们的备择假设却变成了两组的点击率不同,这是双尾检验的假设,为什么呢?
这就是理论和实践的不同之处也是为什么我们觉得A/B测试的理论好掌握但实践总出问题的原因。这里我先告诉你结论再给你说明为什么。结论是**在A/B测试的实践中更推荐使用双尾检验。**
更推荐你使用双尾检验的原因,主要有两个。
第一个原因是,双尾检验可以让数据自身在决策中发挥更大的作用。
我们在实践中使用A/B测试就是希望能够通过数据来驱动决策。我们要尽量减少在使用数据前产生的任何主观想法来干扰数据发挥作用。所以双尾检验这种不需要我们明确谁大谁小的检验更能发挥数据的作用。
第二个原因是,双尾检验可以帮助我们全面考虑变化带来的正、负面结果。
在实践中,我们期望改变可以使指标朝着好的方向变化,但是万一指标实际的变化与期望的正好相反呢?这就可以体现双尾检验的优势了。双尾检验可以同时照顾到正面和负面的结果,更接近多变的现实情况。但是单尾检验只会适用于其中一种,而且通常是我们期望的正面效果。
所以正因为我们选择双尾测试,在备择假设中我们才只说了两组不同,并没有说谁大谁小。
## 假设检验中的“检验”都有哪些,该怎么选取?
现在,我们知道了假设检验中的“假设”包括零假设和备择假设两种,那么“检验”都包括什么呢?
其实检验有很多种单尾检验和双尾检验是从“假设”的角度来分类的。除此之外常见的“检验”还可以根据比较样本的个数进行分类包括单样本检验One-Sample Test、 双样本检验Two-Sample Test和配对检验Paired Test。那么问题来了在测试中到底该选择哪种检验方法呢
答案是:**在A/B测试中使用双样本检验**。
其中的原因其实很简单,我给你解释下它们各自的适用范围,你就知道了。
- 当两组样本数据进行比较时就用双样本检验。比如A/B测试中实验组和对照组的比较。
- 当一组样本数据和一个具体数值进行比较时就用单样本检验。比如我想比较极客时间用户的日均使用时间有没有达到15分钟这个时候我就可以把一组样本数据抽样所得的极客时间用户的每日使用时间和一个具体数值15来进行比较。
- 当比较同一组样本数据发生变化前和发生变化后时就用配对检验。比如我现在随机抽取1000个极客时间的用户给他们“全场专栏一律1折”这个优惠然后在这1000个人中我们会比较他们在收到优惠前一个月的日均使用时间和收到优惠后一个月的日均使用时间。
看到这里,你可能会问,我还听说过**T检验**T Test和**Z检验**Z Test那这两个检验在A/B测试中该怎么选择呢
选择T检验还是Z检验主要看样本量的大小和是否知道总体方差Population Variance
- 当我们不知道总体方差时使用T检验。
- 当我们已知总体方差且样本量大于30时使用Z检验。
我还给你画了张图,你一看就明白了。
<img src="https://static001.geekbang.org/resource/image/a9/04/a96d2d6ddeb4100b4d595d863693yy04.png" alt="">
那么这些理论具体到A/B测试实践中一个经验就是**均值类指标一般用T检验概率类指标一般用Z检验比例检验。**
为什么会有这样的经验呢?
因为上节课我讲了样本量大的情况下均值类指标是正态分布正态分布的总体方差的计算需要知道总体中各个数据的值这在现实中几乎做不到因为我们能获取的只是样本数据。所以总体方差不可知选用T检验。
那么概率类指标是二项分布二项分布的总体方差的计算不需要知道总体中各个数据的值可以通过样本数据求得总体方差。而且现实中A/B测试的样本量一般都远大于30所以选用Z检验。这里的**比例检验**Proportion Test)是专指用于检验概率类指标的Z检验。
讲了这么多检验,我现在来总结一下:**对于A/B测试来说要选用双尾、双样本的比例检验概率类指标或T检验均值类指标。**
再次回到我们的案例中来,由于点击率为概率类指标,所以这里选用双尾、双样本的比例检验。
## 如何利用假设检验做出推断?
选取了正确的假设和检验方法接下来就要检验我们的假设是不是正确了这在A/B测试中就是分析测试结果这一步啦。
### A/B测试可能出现的结果
假设检验会推断出两种结果:
<li>
接受零假设,拒绝备择假设,也就是说实验组和对照组的指标是相同的。
</li>
<li>
接受备择假设,拒绝零假设,也就是说实验组和对照组的指标是不同的。
</li>
但是请注意,这两个结果只是假设检验根据样本数据,通过一系列统计计算推断出的结果,并不代表事实情况(总体数据情况)。如果考虑到事实情况的话,结合假设检验的推断结果会有四种可能:
<img src="https://static001.geekbang.org/resource/image/a8/f3/a831c6b06fede368102b38c7af6f45f3.png" alt="">
可以看出,只有当假设检验推断的情况和事实完全相符时,推断才正确,否则就会出现两类错误。
**第一类错误Type I Error)**统计上的定义是拒绝了事实上是正确的零假设。在A/B测试中零假设是两组的指标是相同的当假设检验推断出两组指标不同但事实上两组指标相同时就是第一类错误。我们把两组指标不同称作阳性Positive。所以第一类错误又叫假阳性False Positive
发生第一类错误的概率用α表示,也被称为**显著水平**Significance Level。“显著”是指错误发生的概率大统计上把发生率小于5%的事件称为小概率事件代表这类事件不容易发生。因此显著水平一般也为5%。
**第二类错误Type II Error)**统计上的定义是接受了事实上是错误的零假设。在A/B测试中当假设检验推断出两组指标相同但事实上两组指标是不同时就是第二类错误。我们把两组指标相同称作阴性Negative所以第二类错误又叫假阴性False Negative。发生第二类错误的概率用β表示统计上一般定义为20%。
这两种错误的概念读起来可能比较拗口,也不太容易理解,那么我就举一个新冠病毒核酸检测的例子来给你具体解释一下。
我们在这里的零假设是:被测试者是健康的,没有携带新冠病毒。
把携带新冠病毒作为阳性,没有携带作为阴性。如果一个健康的人去检测,结果检测结果说此人携带新冠病毒,这就犯了第一类错误,拒绝了事实上正确的零假设,是假阳性。如果一个新冠肺炎患者去检测,结果检测结果说此人没有携带新冠病毒,这就犯了第二类错误,接受了事实上错误的零假设,是假阴性。
现在我们了解了假设检验推断的可能结果,那么,如何通过假设检验得到测试结果呢?
实践中常用的有两种方法P值P Value法和置信区间Confidence Interval法。
### P值法
在统计上P值就是当零假设成立时我们所观测到的样本数据出现的概率。在A/B测试的语境下P值就是当对照组和实验组指标事实上是相同时在A/B测试中用样本数据所观测到的“实验组和对照组指标不同”出现的概率。
如果我们在A/B测试中观测到“实验组和对照组指标不同”的概率P值很小比如小于5%,是个小概率事件,虽然这在零假设成立时不太可能发生,但是确实被我们观测到了,所以肯定是我们的零假设出了问题。那么,这个时候就应该拒绝零假设,接受备择假设,即两组指标是不同的。
与此相反的是当我们在A/B测试中观测到“实验组和对照组指标不同”的概率P值很大比如70%,那么在零假设成立时,我们观测到这个事件还是很有可能的。所以这个时候我们接受零假设,拒绝备择假设,即两组指标是相同的。
在统计中我们会用P值和显著水平α进行比较又因为α一般取5%所以就用P值和5%进行比较,就可以得出假设检验的结果了:
- 当P值小于5%时,我们拒绝零假设,接受备择假设,得出两组指标是不同的结论,又叫做结果显著。
- 当P值大于5%时,我们接受零假设,拒绝备择假设,得出两组指标是相同的结论,又叫做结果不显著。
至于P值具体的计算我推荐你用工具来完成比如Python或者R
- 比例检验可以用Python的[proportions_ztest](https://www.statsmodels.org/stable/generated/statsmodels.stats.proportion.proportions_ztest.html)函数、R的[prop.test](https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/prop.test)函数。
- T检验可以用Python的[ttest_ind](https://www.statsmodels.org/stable/generated/statsmodels.stats.weightstats.ttest_ind.html)函数、R的[t.test](https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/t.test)函数。
### 置信区间法
置信区间是一个范围一般前面会跟着一个百分数最常见的是95%的置信区间。这是什么意思呢在统计上对于一个随机变量来说有95%的概率包含总体平均值Population mean的范围就叫做95%的**置信区间**。
置信区间的统计定义其实不是特别好懂,其实你可以直接把它理解为**随机变量的波动范围**95%的置信区间就是包含了整个波动范围的95%的区间。
**A/B测试本质上就是要判断对照组和实验组的指标是否相等那怎么判断呢**答案就是计算实验组和对照组指标的差值δ。因为指标是随机变量,所以它们的差值δ也会是随机变量,具有一定的波动性。
这就意味着我们就要计算出δ的置信区间然后看看这个置信区间是否包括0。如果包括0的话则说明δ有可能为0意味着两组指标有可能相同如果不包括0则说明两组指标不同。
至于置信区间的具体的计算我也推荐你使用Python或者R等工具完成
- 比例检验可以使用Python的[proportion_confint](https://www.statsmodels.org/stable/generated/statsmodels.stats.proportion.proportion_confint.html)函数、R的[prop.test](https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/prop.test)函数。
- T检验可以使用Python的[tconfint_diff](https://www.statsmodels.org/stable/generated/statsmodels.stats.weightstats.CompareMeans.tconfint_diff.html#statsmodels.stats.weightstats.CompareMeans.tconfint_diff)函数、R的[t.test](https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/t.test)函数。
现在回到推荐系统的案例中我会分别用P值法和置信区间法来根据A/B测试的结果进行判断。
- 实验组新推荐算法样本量为43578其中有2440个点击点击率为5.6%。
- 对照组旧推荐算法样本量为43524其中有2089个点击点击率为4.8%。
这时候我用R中的比例检验函数[prop.test](https://www.rdocumentation.org/packages/stats/versions/3.6.2/topics/prop.test)来计算P值和置信区间。
```
prop.test(x = c(2440, 2089), n = c(43578, 43524), alternative = &quot;two.sided&quot;, conf.level = 0.95)
```
得到了如下结果:
<img src="https://static001.geekbang.org/resource/image/75/03/75c56fdd59dee61dea812c26c187aa03.png" alt="">
可以得出P值=$1.167 e^{-7}$ 远远小于5%且接近于0所以我们拒绝零假设接受备择假设并且推断出实验组和对照组指标显著不同。
同时我们也可以得出两组指标差值δ的95%置信区间为[0.005,0.011]不包含0也可以推断出两组指标显著不同。
## 小结
今天这节课我们针对A/B测试的理论基础—假设检验学习了假设、检验以及相关的统计概念。你只要记住以下两个知识点就可以了。
第一对于A/B测试来说要选用双尾、双样本的比例检验概率类指标或T检验均值类指标。这决定了你在计算分析A/B测试结果时如何选取检验的参数所以很重要。
第二在A/B测试实践中计算样本量大小、指标波动性和分析测试结果的时候会用到这些统计概念。
- 计算样本量大小时,会用到: 第一类/第二类错误及其概率α和β。
- 计算指标波动性时,会用到:方差和置信区间。
- 分析A/B测试结果时会用到各类检验、置信区间、P值。
本节课中的关于假设检验的概念和知识点比较琐碎,为了方便你日后理解记忆,我也给你准备了下面的导图:
<img src="https://static001.geekbang.org/resource/image/6d/41/6dd0059d264833ce89f7acdc11b25b41.png" alt="">
到这里我们的统计篇就告一段落了现在你应该已经掌握了A/B测试所需的基本统计知识啦。其实前两节的内容比较偏理论会不太好理解。不过理论知识的学习如果只是填鸭式地讲效果可能并不好。那该怎么掌握这些理论知识呢在我这些年做A/B测试的实践中发现要想真正把理论知识理解透化为己用还是需要自己多思考多实践。等你有了一些实战后自然就能自己体悟到理论学习的好处了。而且这时候再回过头来看理论就会非常容易看懂。
所以在今天的内容中如果有哪些地方你还不能理解那也没关系不要给自己设置心理障碍可以先放一放。之后的课程中我都会运用今天讲到的理论去解决在A/B测试中遇到的问题。你可以在学习的过程中不断回顾这些理论或者发挥主观能动性多查阅一些资料。等你学完整个课程再回头看这两节理论知识一定会发现理论原来如此简单。
那么接下来我们就进入“基础篇”模块去详细学习A/B测试的主要流程吧
## 思考题
这节课涉及的统计概念都是虽然经常听到,但是难理解的,你们在学习统计中有没有对这些概念的理解有独特的心得?可以拿出来分享给大家。
欢迎在留言区写下你的思考和想法,我们可以一起交流讨论。如果你觉得有所收获,欢迎你把课程分享给你的同事或朋友,一起共同进步!