AB测试里的统计学 PART 1 #
统计学在A/B测试中至关重要,它提供了评估测试结果可信度、确定显著性、计算样本量以及分析和解释数据的方法,从而帮助决策者做出基于数据的明智决策。本文将聚焦于出现在A/B测试中的统计学,为科学的实验过程,可靠的实验结论打下基础。
1. 效应大小 #
验证 A/B 测试效应大小通常是通过计算效应量(Effect Size)来实现的。效应量是描述两个群体之间差异大小的度量,它告诉我们实验效果的大小,而不仅仅是是否存在显著差异。常用的效应量包括 Cohen’s d、相对风险(Relative Risk)、Cohen’s h 等等。
一种常见的方法是使用 Cohen’s d,它表示两组均值之间的标准化差异。具体计算方法如下: $$ d = \frac{\bar{x}_B-\bar{x}_A}{s} $$ 其中: \(\bar{x}_B\) 和 \(\bar{x}_A\) 是两组的平均值;\(s\) 是两组合并后的标准差 \(s = \sqrt{\frac{(n_A-1)s_A^2+(n_B-1)s_B^2}{n_A+n_B-2}}\)
根据 Cohen 提出的标准,一般情况下,效应量 \(d\) 可以分为三个级别:
-
小效应:\(d=0.2\)
-
中等效应:\(d=0.5\)
-
大效应:\(d=0.8\)
-
通常情况下,效应量 \(d\) 的绝对值越大,表示两组之间的差异越大。
2. MDE #
MDE(Minimum Detectable Effect):最小可检测效应
- MDE 分为绝对值(Absolute)和相对值(Relative):
- Absolute:\(\theta_2-\theta_1\)
- Relative:\(\frac{\theta_2-\theta_1}{\theta_1}\)
- 例如:
- 绝对值:预计整体最小提升2pp (percent point),比如:之前是15%,新策略可能会提升到17%;
- 相对值:预计相对之前提升2pp,比如:之前是15%,新策略可能会提升到 \(15\%+15\%\times2\%=15.3\%\);
MDE越小,所需的样本量就越大。样本量的计算见下一篇文章。 可以通过效应大小和MDE来判断显著性,但是有一些局限性:
- 如果效应小于MDE,则推断没有显著性
- 如果效应大于MDE,则不能保证有显著性
3. 置信区间 #
置信度区间 就是用来对一组实验数据的总体参数进行估计的区间。
-
均值类 & 总体方差未知: $$ CI: (\mu_2 - \mu_1) \pm Z_{1-\frac{\alpha}{2}} SE $$
- 其中:
- \(SE = S_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}\)
- \(S_p = \sqrt{\frac{(n_1-1)S_1^2+(n_2-1)S_2^2}{n_1+n_2-2}}\)
- 其中:
-
均值类 & 总体方差已知: $$ CI: (\mu_2 - \mu_1) \pm Z_{1-\frac{\alpha}{2}} \sqrt{\frac{\sigma^2_2}{n_2} + \frac{\sigma^2_1}{n_1}} $$
-
比值类: $$ CI: (p_2-p_1) \pm Z_{1-\frac{\alpha}{2}} SE $$
- 其中 \(SE = \sqrt{\frac{p_1(1-p_1)}{n_1} + \frac{p_2(1-p_2)}{n_2}}\)
由上面的公式我们可以发现,计算的置信区间公式是以两组数据的平均值或者比值为基础的。也就是说当区间内不包含0时,我们可以得出A和B两个版本有明显的差异。
当置信区间包含0时,两个版本的差异是不显著的。因为等于0时,代表两个版本没有任何区别。
当置信区间都为正的时候,可以说在95%的置信水平下,新版本是要优于旧版本的。
在实际的业务场景中,可以设定一个“最小重要变化”,例如1%或者5%。只有当置信区间的最小值大于它时,才会决定发布新版本。
4. 假设检验 #
假设检验(Hypothesis testing) 是统计学中用来检验关于总体参数的一种假设方法。它通常用于确定样本数据是否提供足够的证据来支持或反驳对总体参数的某种假设。
A/B测试通常使用双样本的假设检验。从逻辑上来讲,假设检验法借用了反证法的思想。
- 假设检验的基本步骤如下:
- 建立假设: 在假设检验中,通常会提出两种假设:原假设(null hypothesis)记为\(H_0\)和备择假设(alternative hypothesis)记为\(H_1\)。
原假设通常是默认的假设,表示我们要进行检验的假设,而备择假设则是对原假设的补充或否定。 - 选择检验统计量:检验统计量是一个用于根据样本数据对假设进行检验的统计量。选择适当的检验统计量取决于所研究的问题和所提出的假设。
- 选择显著性水平:显著性水平\(\alpha\) (significance level)通常表示拒绝原假设的阈值。常用的显著性水平包括0.05和0.01。
- 计算 \(P\) 值: \(P\)值是假设 null hypothesis 成立的情况下,观察到样本数据或更极端情况发生的概率。它表示了观察到的数据对原假设的支持程度。\(P\) 值越小,意味着观察到的数据与原假设的一致性越小。
- 当 \(P\) 值小于显著性水平 \(\alpha\) :有证据表明我们可以拒绝 \(H_0\)接受 \(H_1\)
- 当 \(P\) 值大于显著性水平 \(\alpha\):我们没有足够的证据去拒绝 \(H_0\)(直接说“\(H_0\)是对的”是非常不严谨的,因为仍然存在\(H_0\)是错的概率)
- 做出决策: 将计算得到的P值与显著性水平进行比较。如果P值小于显著性水平,则拒绝原假设,否则接受原假设。如果拒绝了原假设,则可以得出备择假设成立的结论。
- 建立假设: 在假设检验中,通常会提出两种假设:原假设(null hypothesis)记为\(H_0\)和备择假设(alternative hypothesis)记为\(H_1\)。
单尾检验 VS. 双尾检验 #
- 单双尾检验需要在实验设计时确定下来,两者区别在于备择假设的符号,单位是大于或者小于,而双尾是不等于。
- 两者计算出来的统计值是一样的,但是计算p值是不一样的。
- 与\(\alpha\)比较时,双尾的统计值需要与\(\frac{\alpha}{2}\)比较,单尾与\(\alpha\) 比较
- 优先选择双尾实验,两者p值不一样,可能会有结论冲突的情况:
- 单尾得出B比A好的结论,但是双尾得出两者没有显著性区别
- 因为双尾实验会考虑到 B 组比 A 组是否更好, 更坏或者存在显著差异三种情况,但是单尾不会区分是否更坏和存在显著性差异的情况。
- 如果双尾检验结果是显著的,无法得出哪个方案更好的结论
- 可以通过计算置信区间和效应大小来判断哪个方案更好
- 计算p值需要用到统计工具包:
from scipy import stats # 双尾 t_statistic, p_value_two_tailed = stats.ttest_ind(data1, data2) # 单尾 < t_statistic, p_value_left_tailed = stats.ttest_ind(data1, data2, alternative='less') # 单尾 > t_statistic, p_value_right_tailed = stats.ttest_ind(data1, data2, alternative='greater')
第一类错误和第二类错误 #
第一类错误:
- 定义:第一类错误是指在原假设为真的情况下,错误地拒绝了原假设的概率。换句话说,是错误地认为存在效应或差异,但实际上并不存在。
- 相关指标:
- 显著性水平(Significance Level):通常用符号 \(\alpha\) 表示,是指在进行假设检验时所能接受的第一类错误的最大概率。常见的显著性水平为 0.05 或 0.01。
第二类错误:
- 定义:第二类错误是指在备择假设为真的情况下,未能拒绝原假设的概率。换句话说,是未能发现真实存在的效应或差异。
- 相关指标:
- 统计功效(Statistical Power):通常用符号 \(1-\beta\) 表示,是指在备择假设为真时,正确地拒绝原假设的概率。换句话说,统计功效衡量的是我们能够检测到真实效应的能力。
\(\chi^2\) - Test (卡方检验) #
$$ \chi^2_o = \sum_{i=1}^r \sum_{j=1}^c \frac{(O_{ij}-E_{ij})^2}{E_{ij}} $$
-
其中:
- \(E_{ij} = \frac{\sum_{k=1}^rO_{kj}\sum_{k=1}^cO_{ik}}{N}\)
- \(O_{ij}\) 是第 \(ij\) 个观察值
- \(E_{ij}\) 是第 \(ij\) 个期望值
-
卡方检验的自由度:\(df = (r-1)(c-1)\)
-
结论:如果 \(\chi_o^2 > \chi_{\alpha, df}^2\) 或者 \(P-value < \alpha\) , 那么可以拒绝原假设。
-
可以参考下面的例子:
未点击 | 点击 | Marginal Rows | |
---|---|---|---|
对照组 | 90(87.5) | 10(12.5) | 100 |
实验组 | 85(87.5) | 15(12.5) | 100 |
Marginal Column | 175 | 25 | 200 |
-
表中括号里的值为当前情况下计算出来的期望值,比如计算第一格期望值的过程:\(E_{11} = 100 \times \frac{175}{200} = 87.5\)。
-
\(E_{11} = E_{21}\) 是因为当前例子中两组数据有相等的样本大小。
-
\(H_o\): 两组CTR一样; \(H_a\): 两组CTR不同
-
\(\chi_o^2 = \frac{(90-87.5)^2}{87.5} + \frac{(10-12.5)^2}{12.5} + \frac{(85-87.5)^2}{87.5} + \frac{(15-12.5)^2}{12.5} = 1.1429\)
-
\(\chi_{\alpha=0.05, df=1}^2 = 3.84\)
-
\(\chi_o^2 < \chi_{\alpha=0.05, df=1}^2 \) => 没有足够的证据表明我们可以拒绝原假设
-
什么时候使用卡方检验:
- 在AB测试中检验两组 proportion 相关的(也可以用Z-Test)
- 卡方检验的前提假设:(2和3在AB测试中基本上都是满足的)
- 样本中的观测值必须相互独立(independent)
- 每个类别的期望频数应至少为5
- 总样本量不应该少于20
- 如果需要计算所需最小样本量,则无法通过卡方检验来实现
- 卡方检验也无法计算置信区间,如果需要计算置信区间,则无法使用卡方检验
t - Test #
在 A/B 实验中一般使用到的是独立样本t检验。独立样本 t 检验:用于比较两个独立样本(如实验组和对照组)的均值是否有显著差异。
其他的 t 检验还有:单样本t检验、配对样本 t 检验
- 假设条件:
- 正态性假设:两组样本的数据应该是来自于正态分布的总体。尤其是在样本量较小时,正态性假设更为重要。通常情况下,如果样本量足够大(通常为30以上),即使数据不符合正态分布,t检验也可以适用,因为根据中心极限定理,样本均值的分布将近似于正态分布。
- 独立性假设:两组样本之间应该是相互独立的,即一个样本的观测值不应该受到另一个样本的影响。这意味着两组样本来自于不同的个体或实验对象,并且样本之间的选择是随机的。
- 方差齐性假设:两组样本的方差应该是相等的。如果两组样本的方差不相等,t检验的结果可能不可靠。如果方差不齐,则可以考虑使用Welch’s t检验(unequal variances t-test)。
- \(H_o: \bar{x}_1 - \bar{x}_2 = 0 \)
- \(H_a: \bar{x}_1 - \bar{x}_2 \neq 0 \)
Student’s t-Test (pooled) |
Welch’s t-Test (unpooled) |
|
---|---|---|
Variance | Equal Variance | Unequal Variance |
Test Statistics | \(T_o = \frac{\mu_1-\mu_2}{S_p \sqrt{\frac{1}{n_1} + \frac{1}{n_2}}}\) 其中:\(S_p = \sqrt{\frac{(n_1-1)S_1^2 + (n_2-1)S_2^2}{n_1+n_2-2}}\) |
\(T_o = \frac{\mu_1-\mu_2}{\sqrt{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}}}\) |
自由度 | \(df = n_1 + n_2 -2\) | \(df = \frac{\frac{S_1^2}{n_1} + \frac{S_2^2}{n_2}}{\frac{(\frac{S_1}{n_1})^2}{n_1-1}+\frac{(\frac{S_2}{n_2})^2}{n_2-1}}\) |
-
其中:
- \(s_1^2\) 和 \(s_2^2\) 分别为两个样本的方差
- 样本方差公式:\(s^2_k = \frac{\sum_i^n (x_i - \bar{x}_k)^2}{n_k-1}\), k代表具体的哪个组(k = 1 或者 k = 2)
- \(n_1\) 和 \(n_2\) 分别为两个样本的大小。
-
如果下面这个公式成立,则代表两组数据满足方差齐性的假设条件:
- \(4 \times min(S^2_1, S^2_2) > max(S^2_1, S^2_2)\)
- 如果不满足,则用 Welch’s t-Test
-
在大部分AB测试情况下,我们都是用Student’s t-Test,因为大部分情况是满足方差齐性的。
Z - Test #
假设条件:在 t-Test 假设条件基础上,总体方差已知,以及 n 至少大于30。
Two Sample Mean Z Test $$ Z = \frac{\bar{x}_1-\bar{x}_2}{\sqrt{\frac{\sigma^2_1}{n_1}+\frac{\sigma^2_2}{n_2}}} $$
其中:
- \(\bar{x}_1\) 和 \(\bar{x}_2\) 分别是两个样本的均值
- \(\sigma^2_1\) 和 \(\sigma^2_2\) 分别是两个总体的方差
- \(n_1\) 和 \(n_2\) 分别是两个样本的样本量
Two Sample Proportion Z Test:
与上面的卡方检验十分相似,两者可以替换使用。(具体查看卡方检验里的 “什么时候使用卡方检验”)
\(H_o: p_1-p_2 = 0\)
\(H_a: p_1-p2 \neq 0\)
$$ Z_o = \frac{\hat{p}_1-\hat{p}_2}{\sqrt{\hat{p}(1-\hat{p})(\frac{1}{n_1}+\frac{1}{n_2})}} $$
- 其中:
- \(\hat{p}_1\) 和 \(\hat{p}_2\) 是两个版本的点击率(或者其他比率值类数据)
- \(n_1\) 和 \(n_2\) 分别是两个样本的样本量
- \(\hat{p}_1=\frac{x_1}{n_1}\)
- \(\hat{p}_2=\frac{x_2}{n_2}\)
- \(\hat{p}=\frac{x_1+x_2}{n_1+n_2}\), (当假设两组数据有相等的方差时可以使用pooled proportion)
- 结论:如果 \(Z_o > |Z_{1-\frac{\alpha}{2}}|\) 或者 \(P-value < \frac{\alpha}{2}\) , 那么可以拒绝原假设。