[因果推断] Double Machine Learning-DML介绍(四)

一 Double Machine Learning——一种去偏方法

DML是一种处理基于观测数据进行因果建模的方法。

大家已知的是,观测数据是有偏的,即存在特征X既影响目标outcome Y,又影响Treatment T。那么在进行因果建模之前,我们需要进行去偏处理,使得Treatment Y独立于特征X,此时的观测数据近似相当于RCT数据,之后我们就可以使用因果模型进行CATE评估了。

HTE旨在量化Treatment对不同人群的差异影响,进而通过人群定向/数值策略的方式进行差异化处理。Double Machine Learning--DML是在研究HTE (Heterogenous Treatment Effect)过程中,通过残差估计矩(服从Neyman orthogonality),即使W(nuisance parameter)估计有偏,依旧可以得到无偏ATE估计的算法框架

构建模拟数据

在介绍DML之前,我们首先给定模拟数据——冰淇淋价格和销量之间的因果效应评估数据集。

该数据集中,特征X包括温度、成本和一周中的周几三个变量,Treatment T为价格,outcome Y为销售量。其中,T影响Y,X影响T和Y,即存在混淆。

探索冰淇淋销量和价格之间的关系,可以看到weekday是confounder,周末时价格和销量均更高。如果要得到准确的causal effect,需要矫正confounders带来的偏差。此数据集中包含的confounders有温度、周几、成本

我们使用观测数据进行训练,在RCT数据上进行模型评估。(一种正确而标准的因果建模评估流程

 

 通过可视化,我们可以很明显看到,在周末(weekday=1和7)的时候,价格比平常要高很多,即存在混淆。

 二 从线性回归说起

一种简单的去偏方法就是线性回归,我们拟合一个线性回归模型,然后固定其他变量不变,去估计平均因果效应(ATE)。

\tau是我们唯一需要关注的,因为\tau​ 是需要求的价格对销量的因果效应,其他变量我们并不关心,但是在线性模型中需要正确对待,否则得到的\tau​是错误估计。 

但特征X与Y的关系可能是非线性的,如温度temp。当温度升高时,人们可能都去沙滩玩耍,买冰淇淋吃,销量Y升高,但当温度过高时,人们可能只想呆在家,这时销量Y就下降了。

因此,我们需要利用一个线性回归的非常重要的特性:

假设现在有一个LR模型,以及特征集 X1 和特征集X2  . 我们可以通过以下两种方式来估计参数,而这两种方式估计出来的参数是相同的

三 DML训练过程

1. HTL无偏估计

直观角度上,这里对回归比较熟悉的朋友可以知道,线性回归是拟合Y在特征空间X的最佳投影(既误差最小化),所以残差是垂直样本空间X的,既最大限度消除了(独立)X的相关性!如下图所示。

 

2. 使用DML估计ATE 

具体到因果推断的例子上,我们只关心Treatment T 对 outcome Y的影响,因此我们可以首先使用X回归T,得到一个T的残差(实际T - 预测T),然后使用X回归Y,得到一个Y的残差(实际Y - 预测Y),最后使用T的残差回归Y的残差,估计的参数即我们想要的ATE。

于是乎,具体的DML方法也就出来了,其核心思想即分别用机器学习算法基于X预测T和Y,然后使用T的残差回归Y的残差:

 那么问题来了,为什么说DML能去偏呢?

 M_{t}它对Treatment实施了去偏。T的残差可以看作将X对T的作用从T中去除后剩下的量,此时T的残差独立于X。

M_{y} 的作用在于去除Y的方差,即将X引起的Y的方差从Y中去除。最后,我们再对残差建模lr,即得到ATE。

3. 使用DML估计CATE

同样地,我们首先基于X使用ML获得T的残差和Y的残差,之后使用lr拟合残差,不同的是,这次我们把X和T的交互项加进来,即

然后我们就可以计算CATE的值了: 

4. 直接预测反事实的Y

在处理非线性CATE时,另一种方案是我们将不再尝试估计CATE的线性近似。相反,我们将做出反事实的预测。 (这种方案在实际中使用也很多,但并没有严格的理论证明!)

 

5. 从线性到非线性

虽然DML可以去混淆,让我们可以只关注T对Y的影响。但是,在使用ML对T和Y残差化后,我们仍然使用的是线性模型。当价格在小范围内变化时,这种方法可能还适用。然而,通常的情况是,在价格比较低的时候,价格增加1元,需求量可能减少2个,而在价格比较高的时候,价格增加1元,需求量可能只减少1个。显然,这是一种非线性关系。

此时,我们就会想,难道我们就不能不用线性模型,而使用其他模型,如利用ML去学习非常复杂的非线性?答案是可以!

我们可以通过对目标函数进行转换,实现非线性建模

 那么我们在使用非线性模型时,学的到底是线性呢还是非线性呢?其实,在非线性CATE估计时,DML估计的是CATE的局部线性近似!(也就是导数)

举个例子,假设我们通过模型对一个顾客估计出CATE=2,意思是指我们在价格上减少一个单位,顾客买的量就会多出2个单位,但是我们不能据此就做出决策,在价格上减少5个单位,这样,我们就可以在减少的每个单位上都多获得销量上的2个单位,然而这样会赔死!因为当价格过低时,CATE可能就变成0.5了,即我们在价格上减少一个单位,顾客买的量只会多出0.5个单位!

因此在处理非线性CATE的时候,要格外注意不同Treatment下的CATE可能是不同的!

### DML(双机器学习)在因果推断中的实现方法 #### 背景介绍 因果推断的目标是从观察数据中估计处理效应,而传统的统计方法可能受到混杂因素的影响。为了克服这一挑战,DML 提供了一种结合机器学习技术来解决高维协变量问题的方法[^1]。 #### 核心思想 双重机器学习的核心在于通过两步过程减少模型误差对因果估计的影响。具体来说,它利用交叉拟合技术和正交化策略,使得即使预测模型存在偏差,最终的因果效应估计仍然具有一致性和渐近正态性[^2]。 #### 数学表示 假设我们有如下结构方程: \[ Y = g(T, X) + \epsilon_Y \] 其中 \(Y\) 是结果变量,\(T\) 是干预变量,\(X\) 表示一组控制变量。\(\epsilon_Y\) 是噪声项。目标是估计条件平均处理效应 (CATE),即: \[ \tau(x) = E[Y|T=1,X=x] - E[Y|T=0,X=x].\] #### 实现步骤概述 以下是基于 DML因果推断的主要实现方式: 1. **初步回归建模** 使用任意灵活的机器学习算法分别对结果变量和干预变量进行建模。例如,可以采用随机森林、梯度提升决策树或者神经网络等复杂模型。 ```python from sklearn.ensemble import RandomForestRegressor # 对结果变量建模 model_y = RandomForestRegressor() model_y.fit(X_train, y_train) # 对干预变量建模 model_t = RandomForestRegressor() model_t.fit(X_train, t_train) ``` 2. **残差计算** 利用训练好的模型生成样本外预测值,并进一步计算残差。这一步骤通常涉及 K 折交叉验证以确保无偏估计。 ```python residuals_y = y_test - model_y.predict(X_test) residuals_t = t_test - model_t.predict(X_test) ``` 3. **二次线性回归** 将上述得到的结果变量和干预变量的残差作为输入特征重新构建一个简单的线性回归模型,从而获得更稳健的因果效应估计。 ```python from statsmodels.api import OLS ols_model = OLS(residuals_y, residuals_t).fit() causal_effect_estimate = ols_model.params[0] ``` 4. **置信区间与显著性检验** 结合 Bootstrap 或者其他统计工具评估估计量的标准误并报告相应的 p 值。 以上流程展示了如何借助现代机器学习技术改进传统经济计量分析框架下的因果关系研究能力。 #### Python 库支持 实际操作过程中可考虑调用专门设计用于此类任务开源软件包如 `econml` 来简化开发工作流。 ```python from econml.dml import CausalForestDML estimator = CausalForestDML(model_y=model_y, model_t=model_t, discrete_treatment=False) estimator.fit(y=y_data, T=t_data, X=X_features) effects = estimator.effect(X_new_samples) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值