【Python实战因果推断】7_元学习器2

目录

X-Learner


X-Learner

X-learner 在解释上要比前一个学习器复杂得多,但其实现却非常简单,所以如果你一开始不理解,也不用担心。X 学习器有两个阶段和一个倾向得分模型。第一个阶段与 T 学习器相同。首先,将样本分为治疗组和非治疗组,并为每组拟合一个模型:

\hat{\mu}_{0}(X)\approx E[Y|T=0,X]\\\hat{\mu}_{1}(X)\approx E[Y|T=1,X]

现在,事情开始有了转机。在第二阶段,您首先需要使用之前拟合的模型来估算缺失的潜在结果:

\hat{\tau}(X,T=0)=\hat{\mu}_{1}(X,T=0)-Y_{T=0}\\\hat{\tau}(X,T=1)=Y_{T=1}-\hat{\mu}_{0}(X,T=1)

在之前的示例数据中,\hat{\tau}(X,T=0)\hat{\tau}(X,T=1) 是第二幅图中的数据点。在下图中,我再现了同样的数据,以及预测模型 {\mu(X)}_{\tau0} 和 {\mu(X)}_{\tau1} 。请注意,即使您有更多的控制数据,\hat{\tau}(X,T=0) 还是错误的。这是因为它是使用 \widehat{\mu_{1}} 建立的,而\widehat{\mu_{1}} 是在非常小的样本中拟合的。因此,由于 \hat{\tau}(X,T=0) 是错误的,{\mu(X)}_{\tau0} 也会产生误导。相反,{\mu(X)}_{\tau1} 很可能是正确的,因为 \hat{\tau}(X,T=1) 也是正确的,因为它是使用 \widehat{\mu_{0}} 模型生成的:

总之,你有一个模型是错误的,因为你错误地估算了干预效果,而另一个模型是正确的,因为你正确地估算了这些值。现在,您需要一种方法将两者结合起来,使正确的模型具有更大的权重。为此,您可以使用倾向得分模型。使用该模型,您可以将两个第二阶段模型组合如下\widehat{\tau(x)}=\hat{\mu}(X)_{\tau0}\hat{e}(x)+\hat{\mu}(X)_{\tau1}\big(1-\hat{e}(x)\big)

在本例中,由于处理的单位很少,\hat{e}(x) 非常小,因此错误的 CATE 模型 \hat{\mu}(X)_{\tau0} 的权重非常小。 相反,1 - \hat{e}(x) 接近 1,因此正确的 CATE 模型 \hat{\mu}(X)_{\tau1} 的权重会更大。更一般地说,这种使用倾向得分的加权平均值将有利于从使用更多数据训练的  \widehat{\mu_{t}} 模型中得到的干预效果估计值。

下图显示了 X 学习器给出的 CATE 估计值,以及分配给每个数据点的权重。请注意,它实际上是如何抛弃错误数据的:

可以看出,与 T-learner 相比,X-learner 在纠正非线性估计的错误 CATE 方面做得更好。一般来说,当干预组的规模远大于其他组时,X-learner 的表现会更好。

我知道这可能需要消化很多东西,但希望您在查看代码时会更清楚。下图 总结了这个学习器。

你还可以试试领域适应学习器。它是 X 学习器,但使用倾向得分模型来估计 \hat{\mu}_{t}(X),权重设置为 1/\hat{P}(T=t)

让我们看看如何编写这些代码。这里是第一阶段,与 T-learner 完全相同。如果计划使用倾向得分进行领域适应,则需要对训练样本进行 1/{P}(T=t) 的重新加权,因此现在也是拟合倾向得分的时候:

 from sklearn.linear_model import LogisticRegression
 from lightgbm import LGBMRegressor
 # propensity score model
 ps_model = LogisticRegression(penalty='none')
 ps_model.fit(train[X], train[T])
 
 # first stage models
 train_t0 = train.query(f"{T}==0")
 train_t1 = train.query(f"{T}==1")
 m0 = LGBMRegressor()
 m1 = LGBMRegressor()
 np.random.seed(123)
 m0.fit(train_t0[X], train_t0[y],
 sample_weight=1/ps_model.predict_proba(train_t0[X])[:, 0])
 m1.fit(train_t1[X], train_t1[y],
 sample_weight=1/ps_model.predict_proba(train_t1[X])[:, 1]);

接下来,您需要预测治疗效果,并对这些预测效果拟合第二阶段的模型:

 # second stage
 tau_hat_0 = m1.predict(train_t0[X]) - train_t0[y]
 tau_hat_1 = train_t1[y] - m0.predict(train_t1[X])
 m_tau_0 = LGBMRegressor()
 m_tau_1 = LGBMRegressor()
 np.random.seed(123)
 m_tau_0.fit(train_t0[X], tau_hat_0)
 m_tau_1.fit(train_t1[X], tau_hat_1);

最后,一旦你拥有了所有这些,你就可以使用倾向得分模型来结合来自第二阶段模型的预测来获得CATE。所有这些都可以在测试集上进行估计:

 # estimate the CATE
 ps_test = ps_model.predict_proba(test[X])[:, 1]
 x_cate_test = test.assign(
 cate=(ps_test*m_tau_0.predict(test[X]) +
 (1-ps_test)*m_tau_1.predict(test[X])
 )
 )

让我们看看 X-learner 在累积收益方面的表现如何。在这组数据中,干预和对照的大小几乎相同,所以不要指望会有巨大的差异。X-learner 试图纠正的问题在这里可能并不明显:

不出所料,X-learner 的性能与 T-learner 相差不大。事实上,从曲线下的面积来看,X-learner 略逊于 T-learner。请记住,这些学习器的质量取决于具体情况。就像我前面说的,在这个特定的数据中,干预和对照的样本量都足够大,因此不会遇到 X 学习器试图解决的那种问题。这或许可以解释为什么这两种模型的表现相似。

贝叶斯因果推断是一种使用贝叶斯网络(Bayesian Network)进行因果关系推断的方法。贝叶斯网络是一种概率图模型,用于表示变量之间的依赖关系和因果关系。在贝叶斯网络中,节点表示变量,边表示变量之间的依赖关系。通过观察节点的状态,可以推断其他节点的状态。 在Python中,可以使用PyMC3库来构建贝叶斯网络模型。《Python贝叶斯分析》这本书从实际应用和编写程序的角度解释了贝叶斯统计的关键概念,并介绍了如何使用PyMC3来构建概率模型。这本书不要求读者具备生物学方面的基础知识,但需要读者具备使用Python编写程序的经验\[1\]。 贝叶斯因果推断的一个挑战是数据的结构与贝叶斯网络的独立性不一致。贝叶斯网络的推断算法旨在从概率中推断因果关系,与任何实验无关。因此,贝叶斯网络的推断是基于概率观察数据进行的。此外,贝叶斯网络的推断是从特定前提中得出一般性结论,与理论假设的表述无关。这是因为贝叶斯网络的推断是演绎的,而不是从因果假设的表述中得出的\[3\]。 因此,Python中的贝叶斯因果推断可以通过构建贝叶斯网络模型,并使用PyMC3库进行推断。这种方法可以帮助我们从观察数据中推断因果关系,并进行因果推断分析。 #### 引用[.reference_title] - *1* [Python贝叶斯分析 PDF 完整原版](https://blog.csdn.net/weixin_39850143/article/details/110996376)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [数学推导+纯Python实现机器学习算法12:贝叶斯网络](https://blog.csdn.net/weixin_37737254/article/details/102920363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [贝叶斯因果网络_因果关系和贝叶斯网络](https://blog.csdn.net/weixin_26752765/article/details/108132740)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水木流年追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值