跳到主要内容

假设检验

问题

什么是假设检验?p 值是什么意思?如何判断结果是否显著?

答案

假设检验是推断统计的核心,用于判断"观察到的差异是真实存在的,还是纯属随机波动"。这是 A/B 测试 的理论基础。

假设检验流程

核心概念

概念定义通俗解释
H₀(零假设)无差异/无效果"AB 两组没区别"
H₁(备择假设)有差异/有效果"AB 两组有区别"
p 值在 H₀ 成立时,观察到当前或更极端结果的概率"如果真没区别,出现这么大差异的概率"
α(显著性水平)拒绝 H₀ 的阈值,通常 0.05"我能接受 5% 的误判概率"
统计显著p < α"差异大到不太可能是巧合"
p 值的常见误解
  • ❌ "p = 0.03 说明 H₁ 成立的概率是 97%"
  • ✅ p = 0.03 的正确含义:"如果 H₀ 为真,出现这么大差异的概率只有 3%"
  • p 值不是效果大小,p < 0.05 只说明统计显著,不一定有业务显著性

两类错误

错误类型定义通俗解释严重程度
I 类错误(α)H₀ 对但拒绝了"没有效果却说有效果"(假阳性)浪费资源
II 类错误(β)H₁ 对但没拒绝"有效果却说没效果"(假阴性)错失机会
统计功效(1-β)正确拒绝错误 H₀ 的概率"有效果时能检测出来的概率"越高越好

常用检验方法

检验适用场景示例
z 检验比较均值,大样本(n>30),σ 已知比较两组转化率
t 检验比较均值,小样本或 σ 未知比较 AB 两组的用户消费额
卡方检验比较分类变量的分布不同渠道的用户构成是否有差异
ANOVA比较 3 组以上的均值3 个版本的设计哪个效果好
Mann-Whitney U比较两组,数据不符合正态两组用户的停留时长

t 检验

独立样本 t 检验
from scipy import stats
import numpy as np

# A 组和 B 组的付费金额
group_a = np.array([50, 55, 60, 45, 70, 65, 55, 50, 60, 55])
group_b = np.array([60, 65, 70, 55, 75, 80, 70, 65, 75, 60])

# 独立样本 t 检验
t_stat, p_value = stats.ttest_ind(group_a, group_b)
print(f"t 统计量: {t_stat:.3f}")
print(f"p 值: {p_value:.4f}")

if p_value < 0.05:
print("✅ 差异显著(p < 0.05),拒绝 H₀")
else:
print("❌ 差异不显著(p >= 0.05),不能拒绝 H₀")

卡方检验

卡方独立性检验
from scipy import stats
import pandas as pd

# 两个渠道的用户付费情况
data = pd.DataFrame({
'渠道': ['A', 'A', 'B', 'B'],
'是否付费': ['是', '否', '是', '否'],
'人数': [120, 880, 150, 850]
})

# 构建列联表
contingency = pd.crosstab(
pd.Series(['A']*1000 + ['B']*1000),
pd.Series(['付费']*120 + ['未付费']*880 + ['付费']*150 + ['未付费']*850)
)

chi2, p_value, dof, expected = stats.chi2_contingency(contingency)
print(f"卡方统计量: {chi2:.3f}, p 值: {p_value:.4f}")

比例检验(A/B 测试最常用)

两组比例检验
from statsmodels.stats.proportion import proportions_ztest

# A 组: 1000 人中 50 人转化; B 组: 1000 人中 65 人转化
count = np.array([50, 65])
nobs = np.array([1000, 1000])

z_stat, p_value = proportions_ztest(count, nobs, alternative='two-sided')
print(f"z 统计量: {z_stat:.3f}, p 值: {p_value:.4f}")

单侧检验 vs 双侧检验

类型H₁适用场景
双侧检验μ_A ≠ μ_B不确定方向,常用
单侧检验μ_A > μ_B 或 μ_A < μ_B明确预期方向
面试建议

除非明确知道方向,否则默认用双侧检验。单侧检验的 p 值是双侧的一半,更容易"显著",但假设更强。


常见面试问题

Q1: p 值是什么?p < 0.05 意味着什么?

答案

  • p 值 = 在零假设(无差异)成立时,观察到当前或更极端结果的概率
  • p < 0.05 意味着"如果真没区别,出现这种结果的概率小于 5%",我们认为差异不太可能是随机的,拒绝零假设
  • 注意:p 值不是"结论成立的概率",也不反映效果大小

Q2: 统计显著和业务显著的区别?

答案

  • 统计显著(p < 0.05):差异不太可能是随机的
  • 业务显著:差异大到值得采取行动
  • 例子:转化率从 5.00% 提升到 5.02%,有 10 万样本可能 p < 0.05,但 0.02% 的提升可能不值得投入资源
  • 看 p 值的同时,必须看效应量(effect size)

Q3: α = 0.05 的含义?为什么选 0.05?

答案

  • α = 0.05 表示我们接受 5% 的 I 类错误概率(把无效果误判为有效果)
  • 0.05 是惯例,不是铁律,可根据场景调整:
    • 医学试验通常 α = 0.01(误判代价高)
    • 探索性分析可以 α = 0.10(更宽松)
  • 有些公司要求同时满足 p < 0.05 效应量的最小阈值

Q4: 如何选择检验方法?

答案

Q5: 什么是统计功效?如何提高功效?

答案

  • 统计功效 = 1 - β = 当真实存在差异时,正确检测出来的概率
  • 通常要求功效 ≥ 80%
  • 提高功效的方法:(1) 增大样本量;(2) 增大效应量;(3) 提高 α(代价是更多假阳性);(4) 降低数据方差

相关链接