Double Machine Learning(DML) 原理及其应用

本文介绍了Double Machine Learning(DML)的原理,包括符号定义、训练过程、残差正交化的无偏差因果效应,以及如何估计平均治疗效应(ATE)和个体治疗效应(CATE)。此外,文章还探讨了DML的优势和劣势,并通过Econml库展示了DML的实际应用案例,包括不同类型的治疗和结果数据。通过模型选择和效果评估,揭示了DML在因果推断中的重要性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Double Machine Learning(DML) 原理及其应用

1. 为什么需要DML?

  • ML来做因果推断
    • 优势
      • 减少函数形式的假设
      • 可以对高维数据进行建模
      • 自带正则化可以达到变量选择的目的
      • 劣势
        • ML只关注预测效果
          • 对Treatment effect的估计可能是有偏的,需要权衡偏差和方差
          • ML的收敛速度一般小于
            \sqrt{n}
        • 不能给出置信区间
  • DML
    • 消除偏差
    • 收敛速度
      \sqrt{n}
    • 可以构建置信区间

2. DML原理

2.1 符号定义

  • Y是实验影响的核心指标
  • T是treatment,通常是0/1变量,代表样本进入实验组还是对照组,对随机AB实验T⊥X
  • X是Confounder,可以简单理解为未被实验干预过的用户特征,通常是高维向量
    \begin{array}{lr}Y=\theta(x) T+g(X)+\epsilon & \text { where } E(\epsilon \mid T, X)=0 \\ T=f(X)+\eta & \text { where } E(\eta \mid X)=0\end{array}

最直接的方法就是用X和T一起对Y建模,直接估计
θ(x)。 但这样估计出的
θ(x)往往是有偏的,偏差部分来自于对样本的过拟合,部分来自于
g(X)估计的偏差

2.2 DML训练过程

  • 利用任意ML模型拟合Y和T得到残差
    \hat{Y}
    \hat{T}

    \hat{Y} = Y - l(x) \quad where \quad l(x) = E(Y|x)  \\
    \hat{T} = T - m(x) \quad where \quad m(x) = E(T|x) \\
  • \hat{Y}
    \hat{T}利用任何ML模型拟合
    \theta

    θ(X)的拟合可以是参数模型也可以是非参数模型,参数模型可以直接拟合。而非参数模型因为只接受输入和输出所以需要再做如下变换,模型target变为
    \frac{\hat{Y}}{\hat{T}}, 样本权重为
    \hat{T}^2


### 双重机器学习简介 双重机器学习Double Machine Learning, DML)是一种用于估计因果效应的方法,尤其适用于处理高维数据集的情况。该方法通过两步过程来减少模型偏差并提高估计精度[^1]。 ### 实现步骤概述 DML 的核心思想在于将样本分为两个部分:一部分用来训练预测模型;另一部分则利用这些预测结果来进行最终的目标参数估计。这种方法能够有效缓解传统单一模型可能带来的过拟合问题。 ### Python 中的 DML 库介绍 为了简化开发流程,在 Python 生态中有专门针对此算法设计好的工具包 `doubleml` ,它提供了易于使用的接口以及多种内置模型支持: #### 安装 doubleml 库 ```bash pip install DoubleML ``` ### 使用示例代码展示 下面是一个简单的例子展示了如何使用上述提到的库完成一次基本操作: ```python import numpy as np from sklearn.linear_model import LassoCV from doubleml import DoubleMLData, DoubleMLPLR # 创建模拟数据集 np.random.seed(42) n_obs = 500 dim_x = 200 X = np.random.normal(size=(n_obs, dim_x)) theta = 3. sigma = 1. d = X[:, 0] * theta + sigma * np.random.standard_normal(size=n_obs) obj_dml_data = DoubleMLData.from_arrays(X, d) # 设置初始估计器 learner_g = LassoCV() learner_m = LassoCV() # 构建 PLR 对象 (Partially Linear Regression Model) dml_plr_obj = DoubleMLPLR(obj_dml_data, ml_l=learner_g, ml_m=learner_m) # 进行交叉验证后的系数估计 dml_plr_obj.fit().summary ``` 这段程序首先定义了一个线性关系作为真实的数据生成机制,并加入了一些噪声成分使得情况更加贴近实际应用环境。接着创建了相应的对象实例并通过调用 fit 方法完成了整个计算过程最后输出总结统计信息表。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值