【Python实战因果推断】9_元学习器4

目录

Double/Debiased Machine Learning


Double/Debiased Machine Learning

Double/Debiased ML 或 R-learner 可以看作是 FrischWaugh-Lovell 定理的改进版。其思路非常简单--在构建结果和治疗残差时使用 ML 模型 结果和干预残差:

Y_i-\hat{\mu}_y\big(X_i\big)=\tau\cdot\big(T_i-\hat{\mu}_t\big(X_i\big)\big)+\epsilon_i,

 \hat{\mu}_y\big(X_i\big)预估E[Y|X]\hat{\mu}_t\big(X_i\big)预估E[T|X]

由于 ML 模型具有超强的灵活性,因此在估计 Y 和 T 残差时,它们更适合捕捉交互作用和非线性因素,同时仍能保持 FWL 式的正交化。这意味着您不必对协变量 X 和干预结果 Y 之间的关系,以及协变量和治疗之间的关系做出任何参数假设,就能得到正确的治疗效果。只要没有未观察到的混杂因素,就可以通过下面的正交化程序恢复 ATE:

1. 使用灵活的 ML 回归模型 μy 估计带有特征 X 的结果 Y。
2. 使用灵活的 ML 回归模型 μt 估计带有特征 X 的干预 T。
3. 获得残差 \tilde{Y}=Y-\mu_{y}(X)\tilde{T}=T-\mu_{t}(X)
4. 将干预结果的残差与处理方法的残差进行回归 \tilde{Y}=\alpha+\tau\tilde{T},其中 τ 是因果参数 ATE,您可以用 OLS 等方法对其进行估计。

ML 的强大之处在于灵活性。ML 功能强大,可以捕捉干扰关系中复杂的函数形式。但这种灵活性也带来了麻烦,因为这意味着你现在必须考虑到过拟合的可能性。切尔诺茹科夫等人的论文对过度拟合如何造成麻烦做了更深入、更严谨的解释,我强烈建议你去看看。但在这里,我将继续以直觉为基础进行解释。

要了解这个问题,假设你的 μy 模型正在过度拟合。其结果是,残差 Y 会比它应该得到的要小。这也意味着 μy 所捕捉的不仅仅是 X 和 Y 之间的关系,其中还有一部分是 T 和 Y 之间的关系,如果 μy 捕捉到了其中的一部分,那么残差回归将偏向于零。换句话说,μy 是在捕捉因果关系,而不是将其留给最终的残差回归。

现在,要想了解过度拟合 μt 的问题,请注意它对 T 方差的解释将超过其应有的解释因此,干预残差的方差将小于其应有的方差。如果干预的方差较小,最终估计值的方差就会很大。这就好比几乎每个人的干预都是一样的,或者说违反了实在性假设。如果每个人的干预水平几乎相同,就很难估计在不同的干预下会发生什么。

这就是使用 ML 模型时会遇到的问题。但如何才能解决这些问题呢?答案就在于交叉预测和折外残差。您可以将数据划分为 K 个折叠,在其中的 K-1 个折叠中估计模型,并在被忽略的折叠中获得残差,而不是在用于拟合模型的相同数据中获得残差。重复同样的过程 K 次,得到整个数据集的残差。采用这种方法,即使模型确实过拟合,也不会人为地将残差推向零。

这在理论上看起来很复杂,但实际上很容易编码。你可以使用 sklearn 中的 cross_val_predict 函数从任何机器学习模型中获取折外预测。下面就是如何通过几行代码获得这些残差:

 from sklearn.model_selection import cross_val_predict
 X = ["month", "weekday", "is_holiday", "competitors_price"]
 T = "discounts"
 y = "sales"
 debias_m = LGBMRegressor()
 denoise_m = LGBMRegressor()
 t_res = train[T] - cross_val_predict(debias_m,train[X],train[T],cv=5)
 y_res = train[y] - cross_val_predict(denoise_m,train[X],train[y],cv=5)

如果你只关心 ATE,你可以简单地将干预结果的残差与处理方法的残差进行回归(只是不要相信那些标准误差,因为它们没有考虑估计残差时的方差):

 import statsmodels.api as sm
 sm.OLS(y_res, t_res).fit().summary().tables[1]

但在本章中,我们的重点是 CATE。那么,究竟如何使用 Double-ML 获得 CATE 呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

水木流年追梦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值