你好,我是黄申,今天我们接着来聊显著性检验。

上一节,我介绍了差异显著性检验的概念,它是指从统计的角度来说,差异的产生有多大的概率、是不是足够可信。这点和数值差异的大小是有区别的。既然我们不能通过差异的大小来推断差异是否可信,那么有没有什么方法,可以帮助我们检验不同数据分布之间,是否存在显著差异呢?具体的方法有不少,比如方差分析(F 检验)、t 检验、卡方检验等等。我这里以方差分析为例,来讲这个方法是如何帮助我们解决 AB 测试中的问题。

方差分析

方差分析(Analysis of Variance, ANOVA),也叫F 检验。这种方法可以检验两组或者多组样本的均值是否具备显著性差异。它有四个前提假设,分别是:

  • 随机性:样本是随机采样的;
  • 独立性:来自不同组的样本是相互独立的;
  • 正态分布性:组内样本都来自一个正态分布;
  • 方差齐性:不同组的方差相等或相近。

根据第三个前提,我们假设数据是正态分布,那么分布就有两个参数,一个是平均数,一个是方差。如果我们仅仅知道两个分组的平均值,但并不知道它们的方差相差多大,那么我们所得出的两个分布是否有显著差异的结论就不可靠了。

为了突出重点,我们先假设咱们的数据都符合上述四个前提,然后我来详细讲解一下方差分析的主要思想。最后,我会通过 Python 语言来验证各个假设和最终的 F 检验结果。

这里,我使用之前提到的 A/B 测试案例,通过方差分析来检验多种算法所产生的用户转化率有没有显著性差异。我们把“转化率”称为“因变量”,把“算法”称为“因素”。这里我们只有算法一个因素,所以所进行的方差分析是单因素方差分析。在方差分析中,因素的取值是离散型的,我们称不同的算法取值为“水平”。如果我们比较算法 a 和 b,那么 a 和 b 就是算法这个因素的两个水平。

我们假设只有两种算法 a 和 b 参与了 A/B 测试。为了检验这些算法导致的转化率,是不是存在显著的差异,我们进行一个为期 10 天的测试,每天都为每种算法获取一个转化率。具体的数据我列在下面这张表格中。

我使用 YijYij