跳到主要内容

显著性检验

问题

如何判断 A/B 实验结果是否「统计显著」?p 值和置信区间怎么解读?

答案

检验流程

比例指标检验(Z 检验)

适用于转化率、点击率等 0/1 指标:

Z=pTpCp^(1p^)(1nT+1nC)Z = \frac{p_T - p_C}{\sqrt{\hat{p}(1-\hat{p})(\frac{1}{n_T} + \frac{1}{n_C})}}

其中 p^=xT+xCnT+nC\hat{p} = \frac{x_T + x_C}{n_T + n_C}(合并比例)

import numpy as np
from scipy import stats

def z_test_proportions(n_c, x_c, n_t, x_t):
"""双比例 Z 检验"""
p_c = x_c / n_c # 对照组转化率
p_t = x_t / n_t # 实验组转化率
p_pool = (x_c + x_t) / (n_c + n_t) # 合并比例

# 标准误
se = np.sqrt(p_pool * (1 - p_pool) * (1/n_c + 1/n_t))

# Z 统计量
z = (p_t - p_c) / se

# 双尾 p 值
p_value = 2 * (1 - stats.norm.cdf(abs(z)))

# 95% 置信区间(差值)
se_diff = np.sqrt(p_c*(1-p_c)/n_c + p_t*(1-p_t)/n_t)
ci = (p_t - p_c - 1.96*se_diff, p_t - p_c + 1.96*se_diff)

return {
"p_control": p_c,
"p_treatment": p_t,
"lift": (p_t - p_c) / p_c,
"z_stat": z,
"p_value": p_value,
"ci_95": ci
}

# 示例
result = z_test_proportions(
n_c=10000, x_c=500, # 对照组 10000 人,500 转化
n_t=10000, x_t=550 # 实验组 10000 人,550 转化
)
print(f"转化率提升: {result['lift']:.1%}")
print(f"p 值: {result['p_value']:.4f}")
print(f"95% CI: [{result['ci_95'][0]:.4f}, {result['ci_95'][1]:.4f}]")

均值指标检验(t 检验)

适用于客单价、时长等连续指标:

from scipy.stats import ttest_ind

# Welch's t 检验(不假设等方差)
t_stat, p_value = ttest_ind(
treatment_values,
control_values,
equal_var=False # Welch's t(推荐)
)

p 值正确解读

p 值的常见误解
错误说法正确理解
p=0.03 说明有 3% 概率 H₀ 为真p 值不是 H₀ 为真的概率
p=0.03 说明效应有 97% 概率存在p 值不是效应存在的概率
p<0.05 说明效果很大p 值不反映效应大小
p>0.05 说明没有效果只能说"没有足够证据拒绝 H₀"

正确定义:p 值 = 假设 H₀ 为真时,观测到当前或更极端结果的概率。

置信区间

置信区间比 p 值提供更多信息

信息p 值置信区间
效果方向需看统计量符号直接看正负
效果大小✅ 点估计
不确定性✅ 区间宽度
显著性p < 0.05区间不包含 0
示例:购买转化率提升 = 0.5%, 95% CI = [0.1%, 0.9%]

解读:
- 实验组比对照组高 0.5 个百分点
- 真实提升大概率在 0.1% ~ 0.9% 之间
- 区间不包含 0 → 统计显著(p < 0.05)

效应量(Effect Size)

指标公式解读
Cohen's d(μTμC)/σpool(μ_T - μ_C) / σ_{pool}0.2 小 / 0.5 中 / 0.8 大
相对提升(Lift)(pTpC)/pC(p_T - p_C) / p_C业务最关心的
绝对差异pTpCp_T - p_C直观的百分点差异
统计显著 ≠ 业务显著
  • 大样本量下,微小差异(如 0.01%)也可能 p < 0.05
  • 需同时报告效应量置信区间
  • 决策标准:统计显著 AND 业务有意义

常见面试问题

Q1: 实验结果 p=0.06,该怎么决策?

答案

  1. 不能简单判为"不显著就放弃"
  2. 看置信区间:如果 CI 接近但未排除 0(如 [-0.001, 0.012]),说明效应可能存在但证据不足
  3. 看效应量:业务上有意义吗?
  4. 考虑 Power:样本量是否足够?可能是 Type II Error(漏检)
  5. 选择:继续积累数据、或设计更灵敏的实验

Q2: 实验做了多个指标,其中一个 p<0.05,能算显著吗?

答案不能。这是多重比较问题

  • 测 20 个指标,期望有 1 个偶然显著(5% × 20 = 1)
  • 需要做校正:
    • Bonferroni:α' = 0.05 / 指标数(保守)
    • BH(Benjamini-Hochberg):控制 FDR(推荐)
  • 或者预先注册主指标,其他作为探索性分析

Q3: 如何向非技术人员解释 p 值?

答案

假设新功能其实没有效果,我们做这个实验看到这么大差异的可能性只有 3%。这个概率非常小,所以我们有信心认为新功能确实有效。

核心要点:

  • 把 p 值翻译成"在巧合的可能性"
  • 避免说"有 X% 概率有效"
  • 用具体数字(如 95% 的信心水平)帮助理解

Q4: Z 检验和 t 检验怎么选?

答案

场景选择
比例指标(转化率)Z 检验
均值指标,大样本Z 检验或 t 检验(结果几乎一样)
均值指标,小样本t 检验(更保守)
两组方差不等Welch's t 检验(不假设等方差)

实践中,样本量通常足够大,两种检验差异不大。Welch's t 是最保险的选择。


相关链接