使用 CausalPy 进行因果推理

f01f644594f0076c805fc2038d6e136b.png

来源:DeepHub IMBA
本文约1600字,建议阅读8分钟
本文通过一个实际的例子简要介绍了因果推理,这个例子来自于《The Brave and True》一书,我们使用 CausalPy 来实现。

8297fc40c549d886612e1463667de459.png

因果推理是从观察数据中估计因果效应的过程。对于任何给定的个体,我们只能观察到一种结果。另一种结果对我们来说是隐藏的。这就是所谓的反事实(即与事实相反)。例如,我们可以干预或不干预病人,但我们只能在一种情况下得到结果。另一种结果是我们没有观察到的,因此被称为潜在结果。如果我们有一个没有接受干预但与接受干预的组非常相似的对照组,就可以估计潜在的影响。这里就要求必须确保两组在干预前没有任何差异。

合成控制法:Synthetic Control

在许多情况下,我们没有对照组来比较。比如我们向一定比例的用户展示广告。在广告曝光(即处理)之前和之后,我们记录到网站的流量。根据因果效应的定义,我们需要知道如果用户没有接触到该广告,会发生什么。在广告中,我们可以曝光一定比例的用户,而将其余用户作为对照组。

但是在下面的示例中,这是不可能的。

比如说,我们想知道限制吸烟的政策对香烟销售的影响。在这种情况下没有自然对照组,这就带来了一个问题,很难验证该政策是否真的对销售产生了影响。

这正是合成控制进入阶段的地方。这个想法是这样的:因为没有一个自然的对照组,所以只能尝试构建一个尽可能与干预组相似的对照组。在上面的例子中,我们可以使用其他类似省的数据。‍

 
 
import causalpy as cp
 import pandas as pd


 cigar = (pd.read_csv("data/smoking.csv")
          .drop(columns=["lnincome","beer", "age15to24", "california", "after_treatment"]))

7a11da6e74ee62e1d9fe849f375cc2c6.png

我们导入CausalPy Python包,加载数据并删除一些我们不需要的列。从美国39个不同的州获得了31年的数据。干预(政策开始)发生在1989年。加州是第一个州。在将数据传递给CausalPy之前,我们必须进行一些预处理工作,最还要把数据变成宽表的格式。

 
 
piv = cigar.pivot(index="year", columns="state", values="cigsale")
 treatment_time = 1989
 unit = "s3"


 piv.columns = ["s" + str(i) for i in list(piv.columns)]


 piv = piv.rename(columns={unit: "actual"})


05ce8deada9e085b88eb602a67a78a71.png

这样每个州就变成一列,每年一行。

 
 
formula = "actual ~ 0 + " + " ".join(list(piv.columns.drop("actual")))

上面我们构建了一个公式,表示我们想用其他州的香烟销售来解释“实际”变量(即加州的香烟销售)。这里必须重命名列,因为不能使用整数。第一个0仅仅表示我们不想在模型中包含截距。

 
 
result = cp.pymc_experiments.SyntheticControl(
    piv,
    treatment_time,
    formula=formula,
    model=cp.pymc_models.WeightedSumFitter(
        sample_kwargs={"target_accept": 0.95}
    ),
 )

上面的代码创建了模型并进行适配。我们只需要将数据连同干预时间和公式一起传递给CausalPy。上面该公式描述了我们想要如何构建合成控制组(即哪些变量)。除了使用SyntheticControl作为我们的实验类型外,我们还告诉CausalPy想要使用WeightedSumFitter作为我们的模型。

结果

CausalPy在运行时将启动一个马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法,算法通过从后验分布中提取样本来执行推理。我们在这里不深入贝叶斯推理的细节,因为以前已经有文章直观地解释了这个概念。

1db88d5530c9a84dbef0464ec7420a83.jpeg

这是我们在拟合模型后得到的主要图形。首先要确保我们有一个好的模型,也就是说要构建一个好的合成组。上面的结果实现了~82%的R2,可以说效果还不错。CausalPy在第一个小图中用橙色显示了加州在没有干预的情况下的情况。黑点表示实际观测结果。另外两个子图显示了合成对照组和干预组之间的(累积)差异。最主要的石我们还得到了与因果效应相关的可信区间。

dd1a8fc449ded056242893c4551a81fc.png

还可以查看WeightedSumFitter的系数。这再次表明合成的加州是其他州的组合。在这种情况下,s8和s4构成了合成加州的很大一部分。


总结

因果推理是一种推理过程,通过观察事件或现象之间的关系,推断出一个事件或现象是另一个事件或现象的结果或原因。它是从一个或多个前提中得出结论的过程,其中前提描述了可能的原因和结果之间的联系。

因果推理是统计学中一个经常被忽视的领域。它允许我们超越单纯的联想和相关性,并回答“假设”类型的问题。回答这些类型的问题对于实际做出基于数据的决策至关重要。

CausalPy 可以使用不同类型的模型用于准实验的因果推理,他的地址如下:

https://causalpy.readthedocs.io/en/latest/

另外《The Brave and True》的在线地址如下:

https://www.nber.org/system/files/working_papers/t0335/t0335.pdf

作者:Brechterlaurin

编辑:黄继彦

75f68afc2523c64fd32972fa5cce1bb7.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值