跳到主要内容

贝叶斯统计

问题

什么是贝叶斯统计?贝叶斯定理有哪些实际应用?频率学派和贝叶斯学派有什么区别?

答案

贝叶斯定理

P(AB)=P(BA)P(A)P(B)P(A|B) = \frac{P(B|A) \cdot P(A)}{P(B)}
术语含义说明
P(A)P(A)先验概率观测数据前对 A 的信念
P(BA)P(B\|A)似然假设 A 为真时观测到 B 的概率
P(AB)P(A\|B)后验概率观测到数据 B 后对 A 的更新信念
P(B)P(B)边际似然数据 B 在所有假设下的总概率
一句话理解

后验 ∝ 先验 × 似然 —— 根据新数据更新你的信念

经典例子:疾病检测

某疾病患病率 1%(先验),检测灵敏度 99%(真阳性率),假阳性率 5%。一个人检测阳性,实际患病的概率是多少?

贝叶斯疾病检测
# 先验
p_disease = 0.01
p_healthy = 0.99

# 似然
p_positive_given_disease = 0.99 # 灵敏度
p_positive_given_healthy = 0.05 # 假阳性率

# 边际似然 P(阳性)
p_positive = (p_positive_given_disease * p_disease +
p_positive_given_healthy * p_healthy)

# 后验 P(患病|阳性)
p_disease_given_positive = (p_positive_given_disease * p_disease) / p_positive

print(f"检测阳性时,实际患病概率: {p_disease_given_positive:.1%}")
# 结果约 16.7% — 远低于直觉上的 99%!
# 原因:先验概率(1%)太低,大量假阳性稀释了真阳性

频率学派 vs 贝叶斯学派

维度频率学派贝叶斯学派
概率的含义长期频率主观信念程度
参数观点固定但未知随机变量(有分布)
先验信息不使用明确纳入先验
核心输出p 值、置信区间后验分布、可信区间
样本量要求通常需要大样本小样本也可用(先验帮助)
可解释性"95% 的区间会包含真值""真值有 95% 概率在此区间"

贝叶斯在数据分析中的应用

1. A/B 测试的贝叶斯方法

贝叶斯 A/B 测试
import numpy as np

# A 组: 1000 人, 50 转化; B 组: 1000 人, 65 转化
np.random.seed(42)

# 用 Beta 分布作为转化率的后验
# Beta(α + 成功, β + 失败),先验 Beta(1,1) = 均匀分布
a_samples = np.random.beta(1 + 50, 1 + 950, size=100000)
b_samples = np.random.beta(1 + 65, 1 + 935, size=100000)

# B 优于 A 的概率
prob_b_better = (b_samples > a_samples).mean()
print(f"B 优于 A 的概率: {prob_b_better:.1%}")

# B 比 A 提升多少(相对提升)
lift = (b_samples - a_samples) / a_samples
print(f"平均提升: {lift.mean():.1%}")
print(f"提升 95% 可信区间: [{np.percentile(lift, 2.5):.1%}, {np.percentile(lift, 97.5):.1%}]")
贝叶斯 A/B 的优势
  • 结果更直观:直接给出 "B 比 A 好的概率"
  • 不需要提前确定样本量,可以随时查看结果
  • 天然集成先验信息(历史数据)

2. 用户生命周期价值预测

BG/NBD 模型(贝叶斯框架)用于预测用户未来购买次数:

用户 LTV 预测(概念示意)
# lifetimes 库实现了 BG/NBD 模型
from lifetimes import BetaGeoFitter

# 输入 RFM 数据
bgf = BetaGeoFitter()
bgf.fit(
frequency=data['frequency'], # 重复购买次数
recency=data['recency'], # 最近购买距首次的天数
T=data['T'] # 观测期长度
)

# 预测未来 30 天内的预期购买次数
data['predicted_purchases'] = bgf.conditional_expected_number_of_purchases_up_to_time(
30, data['frequency'], data['recency'], data['T']
)

3. 朴素贝叶斯分类

用于文本分类、垃圾邮件过滤等:

P(类别特征)P(类别)P(i类别)P(类别|特征) \propto P(类别) \prod P(特征_i|类别)
朴素贝叶斯文本分类
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import CountVectorizer

texts = ["优惠券免费领", "明天开会讨论Q2目标", "中奖了快来领取", "本周项目进度更新"]
labels = [1, 0, 1, 0] # 1=垃圾, 0=正常

vec = CountVectorizer()
X = vec.fit_transform(texts)
model = MultinomialNB()
model.fit(X, labels)

# 预测新文本
new = vec.transform(["恭喜获得大奖"])
print(f"垃圾邮件概率: {model.predict_proba(new)[0][1]:.1%}")

贝叶斯更新可视化

每次有新数据,上一轮的后验就变成新一轮的先验 → 持续学习


常见面试问题

Q1: 贝叶斯 A/B 测试和频率学派有什么区别?

答案

维度频率学派贝叶斯
输出p 值(是否显著)B 优于 A 的概率
样本量需提前确定可灵活停止
解读"如果没差异,看到这个结果的概率""给定数据,B 更好的概率"
先验不使用可纳入历史数据
可窥探性不可在中途查看(否则 α 膨胀)随时可查看

Q2: 先验概率怎么选?

答案

  • 无信息先验(不了解时):Beta(1,1) 均匀分布
  • 弱信息先验:Beta(2,2) 居中加权
  • 经验先验:根据历史数据设定(如上月转化率 5%±2%)
  • 样本量足够大时,先验影响很小(数据主导后验)

Q3: 什么是可信区间(Credible Interval)?

答案

  • 贝叶斯中的"可信区间" ≠ 频率学派的"置信区间"
  • 95% 可信区间:参数有 95% 的概率落在这个区间内(直接概率解释)
  • 这比频率学派的置信区间更直观易懂
  • 从后验分布的 2.5% 和 97.5% 分位数得到

Q4: 贝叶斯方法的局限性?

答案

  • 计算复杂:参数多时需 MCMC 等采样方法,耗时
  • 先验选择的主观性:不同先验可能得出不同结论
  • 学习曲线陡:概念和工具门槛较高
  • 沟通难度:业务方可能不习惯概率分布形式的结论

相关链接