第1章:概率论基础回顾
各位同学好,我是你们的老朋友。今天咱们开始《因果推断入门到数据分析实战》的第一课。说实话,每次讲因果推断,我都得先带大家过一遍概率论基础。为什么?因为因果推断的底层逻辑,说白了就是概率论的延伸。你想想看,我们说的「A导致B」,本质上就是在问「P(B|A)和P(B|¬A)的差异」。所以,这一章虽然基础,但绝对值得你认真看。
我个人习惯把概率论基础分成六个模块来复习:条件概率、贝叶斯定理、期望与方差、协方差与相关系数、大数定律、中心极限定理。这六个模块,就像六块积木,后面搭建因果推断模型时,你随时会用到它们。
本章知识体系总览
1. 条件概率:因果推断的起点
条件概率,记作P(A|B),意思是「在B发生的前提下,A发生的概率」。公式很简单:
P(A|B) = P(A∩B) / P(B)
我在项目中遇到过一个问题:分析用户点击广告后购买的概率。很多人直接算「点击后购买的用户数 / 点击用户数」,但忽略了用户本身就有购买倾向。这就是条件概率的典型应用——你得控制住「用户本身想买」这个条件。
小技巧: 条件概率的链式法则在因果推断中非常常用:P(A,B,C) = P(A)P(B|A)P(C|A,B)。我建议你把这个公式刻在脑子里,后面做因果图时会反复用到。
2. 贝叶斯定理:从结果反推原因
贝叶斯定理是条件概率的逆运算。说白了,就是已知结果,反推原因的概率:
P(A|B) = P(B|A) × P(A) / P(B)
嗯,这里要注意:P(A)叫「先验概率」,P(A|B)叫「后验概率」。贝叶斯定理的核心思想是——随着新证据的出现,不断更新我们对某个假设的信念。
我记得有一次做A/B测试分析,实验组和对照组的转化率差异很小,但样本量很大。用频率学派的方法,p值显著。但用贝叶斯方法一看,后验概率显示「实验组确实更好」的置信度只有65%。后来复盘发现,确实是实验设计有缺陷。所以,我个人习惯在做因果推断时,至少用贝叶斯方法验证一下。
贝叶斯定理在因果推断中的角色: 它帮助我们回答「观察到结果后,原因成立的概率有多大」。这在处理混淆变量、选择偏差时特别有用。
3. 期望与方差:数据的「中心」和「离散」
期望E[X]就是随机变量的加权平均。方差Var(X) = E[(X - E[X])²],衡量数据的波动程度。
你想想看,在因果推断中,我们经常要估计「处理组均值」和「对照组均值」的差异。这个差异的期望就是ATE(平均处理效应),而方差决定了我们估计的精度。
# 用Python计算期望和方差
import numpy as np
data = np.array([1, 2, 3, 4, 5])
mean = np.mean(data) # 期望
variance = np.var(data, ddof=1) # 样本方差
print(f"期望: {mean}, 方差: {variance}")
避坑指南: 我曾经在计算方差时忘了设置ddof=1(样本方差用n-1做分母),结果估计出来的置信区间偏窄,导致错误的显著性结论。记住:样本方差用n-1,总体方差用n。
4. 协方差与相关系数:变量之间的关系
协方差Cov(X,Y) = E[(X - E[X])(Y - E[Y])],衡量两个变量一起变化的趋势。相关系数ρ = Cov(X,Y) / (σX·σY),把协方差标准化到[-1, 1]之间。
在因果推断中,相关系数不等于因果关系——这个坑我踩过无数次。比如冰淇淋销量和溺水人数高度相关,但你不能说冰淇淋导致溺水。真正的原因是「夏天」这个混淆变量。
| 指标 | 公式 | 取值范围 | 含义 |
|---|---|---|---|
| 协方差 | Cov(X,Y) | (-∞, +∞) | 正负方向,但量纲依赖单位 |
| 相关系数 | ρ | [-1, 1] | 标准化后的线性相关强度 |
我的经验: 在做因果推断前,先算一下所有变量的相关系数矩阵。如果发现处理变量和结果变量相关系数很高,别急着下结论——先检查有没有混淆变量。
5. 大数定律:样本量越大,估计越准
大数定律说:当样本量n趋近无穷时,样本均值收敛到总体期望。说白了,你抛硬币的次数越多,正面比例越接近50%。
这个定律在因果推断中的意义是什么?它保证了当我们有足够多的样本时,处理组和对照组的均值差异能真实反映因果效应。但问题是——现实中我们永远没有「无穷样本」,所以需要置信区间和假设检验来量化不确定性。
6. 中心极限定理:正态分布无处不在
中心极限定理(CLT)说:无论原始数据是什么分布,只要样本量足够大,样本均值的分布就近似正态分布。
为什么会这样?嗯,数学上可以证明,但直观理解就是:多个独立随机变量相加,结果会趋向正态。这个定理太重要了——它让我们可以用正态分布的性质做假设检验、构造置信区间。
# 演示中心极限定理
import numpy as np
import matplotlib.pyplot as plt
# 从均匀分布中抽样
population = np.random.uniform(0, 10, 100000)
sample_means = []
for _ in range(1000):
sample = np.random.choice(population, size=30)
sample_means.append(np.mean(sample))
# 样本均值的分布近似正态
print(f"样本均值分布的标准差: {np.std(sample_means):.3f}")
print(f"理论标准误: {np.std(population)/np.sqrt(30):.3f}")
CLT在因果推断中的应用: 当我们估计ATE时,ATE估计量的分布近似正态,所以我们可以用Z检验或t检验来判断ATE是否显著不为零。
小结:这些基础怎么用?
好了,六个模块过了一遍。你可能会问:这些和因果推断到底有什么关系?
- 条件概率 → 定义因果效应(P(Y|do(X)) vs P(Y))
- 贝叶斯定理 → 处理混淆变量、做后验推断
- 期望与方差 → 估计ATE、计算置信区间
- 协方差与相关系数 → 识别变量关系、检测混淆
- 大数定律 → 保证估计的一致性
- 中心极限定理 → 做假设检验、构造置信区间
我个人习惯在开始任何因果推断项目前,先花10分钟回顾这些基础。别嫌麻烦,后面你会感谢自己的。