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

1次阅读
没有评论

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

image.webp

为什么相关性不等于因果性?

想象一个医疗场景:统计发现喝红酒的人群心血管疾病发病率更低。这是否意味着红酒能预防心脏病?实际上,喝红酒的人群可能整体收入更高、饮食更健康(confounder/ 混淆变量)。这种虚假关联就是典型的「相关性≠因果性」问题。

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

随机实验 vs 观察性研究

  1. 随机对照试验(RCT):通过随机分组隔离混淆因素,如药物测试中的安慰剂组
  2. 观察性研究:现实中的数据往往存在选择偏差,例如教育程度与收入的关系
  3. 核心挑战:$E[Y(1)-Y(0)|T=1] \neq E[Y(1)-Y(0)]$
  4. 因果推断目标:估计反事实结果(counterfactual)

核心方法解析

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

适用于政策效果评估,需满足平行趋势假设:

$$ DID = (Y_{post}^{treat} – Y_{pre}^{treat}) – (Y_{post}^{control} – Y_{pre}^{control}) $$

Python 实现示例:

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

# 模拟数据:时间点 / 组别 / 结果变量
data = pd.DataFrame({'time': [0,0,1,1,0,0,1,1],
    'group': [1,1,1,1,0,0,0,0],  # 1= 实验组
    'y': [5,6,8,9,4,5,5,6]       # 结果变量
})

did = DID()
# 关键参数:时间标识、组别标识、结果变量
ess = did.estimate_ATE(data, 'time', 'group', 'y')
print(f"DID 估计效果: {ess['ATE']:.2f}")

工具变量法(Instrumental Variable)

当存在未观测混淆时,需寻找满足条件的工具变量 Z:
1. 相关性:$Z$ 与 $T$ 相关
2. 外生性:$Z$ 只能通过 $T$ 影响 $Y$

from linearmodels.iv import IV2SLS
import numpy as np

# 生成模拟数据
n = 1000
z = np.random.normal(size=n)  # 工具变量
confounder = np.random.normal(size=n)  # 未观测混淆变量
t = 0.5*z + confounder + np.random.normal(0,1,n)
y = 2*t + confounder + np.random.normal(0,1,n)

data = pd.DataFrame({'y':y, 't':t, 'z':z})

# 两阶段最小二乘法
iv_model = IV2SLS.from_formula('y ~ 1 + [t ~ z]',  # 公式语法
    data=data
)
results = iv_model.fit()
print(results.summary)

倾向得分匹配(Propensity Score Matching)

通过构建「可比」的对照组减少偏差:

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

from sklearn.linear_model import LogisticRegression
from causalinference import CausalModel

# 计算倾向得分
ps_model = LogisticRegression().fit(X, treatment)
ps_score = ps_model.predict_proba(X)[:,1]

# 进行匹配
caliper = 0.2  # 最大允许得分差异
matched = CausalModel(Y, treatment, ps_score)
matched.est_via_matching(bias_adj=True)
print(matched.estimates)

避坑指南

  1. 混淆变量识别
  2. 绘制因果图 (DAG) 明确变量关系
  3. 使用 do-calculus 验证可识别性

  4. 工具变量检验

  5. 弱工具变量测试:F 统计量 >10
  6. 过度识别检验(Sargan test)

  7. 常见误用

  8. 忽略中介变量偏差(mediator bias)
  9. 匹配后未检查平衡性
  10. DID 平行趋势不成立

延伸思考

  1. 稳健性测试设计:
  2. 安慰剂测试(placebo test)
  3. 不同方法交叉验证

  4. 无工具变量时的替代方案:

  5. 断点回归设计(RDD)
  6. 自然实验场景挖掘

因果推断就像数据科学的「侦探工作」,需要不断质疑:这个关系真的经得起推敲吗?通过本文的方法框架,希望你能更自信地应对这个挑战。

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