Casual因果推断入门指南:从理论到Python实战

1次阅读
没有评论

共计 1985 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

从医疗案例看相关性≠因果性

假设我们观察到服用维生素 C 的人群感冒率更低,这是否证明维生素 C 能预防感冒?事实上,服用维生素 C 的人可能同时具备健康意识强、收入较高等特征(confounder/ 混淆变量)。这种虚假关联在观察性数据中极为常见,需通过因果推断方法剥离混杂效应。

Casual 因果推断入门指南:从理论到 Python 实战

随机实验与观察性研究的本质差异

  1. 随机对照试验 (RCT):通过随机分组确保处理组(treatment group) 和对照组 (control group) 除干预措施外其他特征分布相同,黄金标准但成本高
  2. 观察性研究:利用自然存在的数据(如医保记录),需借助统计方法模拟随机化过程,核心挑战是处理选择偏差(selection bias)

核心方法解析

双重差分法(Difference-in-Differences, DID)

适用于处理组和对照组在干预前存在自然差异的场景,通过比较两组在干预前后的变化差异来估计因果效应:

$$\hat{\delta}{DID} = (E[Y])$$}] – E[Y_{1,C}]) – (E[Y_{0,T}] – E[Y_{0,C

其中 T / C 分别表示处理组 / 对照组,1/ 0 表示干预后 / 前。

# 使用 causalml 实现 DID
from causalml.inference import DID
import pandas as pd

# 模拟数据:time=0/1(干预前后), treated=0/1(对照组 / 处理组)
data = pd.DataFrame({'y': [3,5,4,8],  # 结果变量
    'time': [0,0,1,1],
    'treated': [0,1,0,1]
})

did = DID(data, 'y', 'treated', 'time')
did.fit()
print(did.summary)  # 输出 ATE(平均处理效应)

工具变量法(Instrumental Variable, IV)

当存在未观测混淆变量时,寻找与处理变量相关但不直接影响结果变量的工具变量 Z:

$$\hat{\beta}_{IV} = \frac{Cov(Z,Y)}{Cov(Z,X)}$$

# 使用 linearmodels 进行 IV 回归
from linearmodels.iv import IV2SLS
import numpy as np

# 生成模拟数据
n = 1000
z = np.random.normal(size=n)  # 工具变量
u = np.random.normal(size=n)  # 未观测混淆变量
x = z + u + np.random.normal(scale=0.1, size=n)  # 内生处理变量
y = x + u + np.random.normal(scale=0.1, size=n)  # 结果变量

df = pd.DataFrame({'y':y, 'x':x, 'z':z})
mod = IV2SLS.from_formula('y ~ 1 + [x ~ z]', data=df)
res = mod.fit()
print(res.summary)  # 检查 x 系数是否接近真实值 1 

倾向得分匹配(Propensity Score Matching, PSM)

通过估计处理概率 (propensity score) 来平衡协变量分布:

$$e(X) = P(T=1|X)$$

# 使用 causalml 实现 PSM
from causalml.match import NearestNeighborMatch

# 生成含协变量的数据
np.random.seed(42)
X = np.random.normal(size=(100,3))
treatment = (X[:,0] + X[:,1] > 0).astype(int)
y = treatment + X[:,0] + np.random.normal(size=100)

matcher = NearestNeighborMatch()
matched_data = matcher.match(X, treatment, y)
print(matched_data.groupby('treatment').mean())  # 检查协变量平衡性

避坑指南

  1. 混淆变量识别
  2. 绘制因果图 (DAG) 标出所有可能路径
  3. 使用 do-calculus 规则验证可识别性

  4. 工具变量有效性检验

  5. 相关性:第一阶段回归 F 统计量 >10
  6. 排他性约束:工具变量不应通过处理变量外的路径影响结果

  7. 常见因果图误用

  8. 忽略中介变量 (mediator) 的调节作用
  9. 错误阻断对撞节点(collider)
  10. 未处理时间 -varying 混杂

思考与延伸

  1. 稳健性测试设计
  2. placebo test:在虚假干预时间检验效应
  3. 更换匹配方法验证结果一致性

  4. 工具变量缺失时的替代方案

  5. 断点回归设计(RDD)
  6. 双重机器学习(Double ML)
  7. 合成控制法(Synthetic Control)

因果推断是数据科学中的高级技能,需要理论理解与实践结合。建议从 RCT 数据开始练习,逐步过渡到复杂观察性研究。记住:没有完美的因果识别策略,关键在于评估估计结果对假设的敏感性。

正文完
 0
评论(没有评论)