【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 呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/759151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Golang-slice理解

slice golang-slice语雀笔记整理 slicego为何设计slice?引用传递实现扩容机制 go为何设计slice? 切片对标其他语言的动态数组,底层通过数组实现,可以说是对数组的抽象,底层的内存是连续分配的所以效率高,可…

【操作系统】进程管理——进程控制和进程通信(个人笔记)

学习日期:2024.6.30 内容摘要:进程控制的概念,进程控制相关的“原语”,进程通信 进程控制 原语 进程控制用“原语”实现。原语是一种特殊的程序,它的执行具有原子性,也就是说,这段程序的执行…

计算机网络原理及应用

第一章 计算机网络概述 【1】局域网 局域网是指在某一区域内由多台计算机互联而成的计算机通信网络。 【1】互通 两个网络之间可以交换数据。 第二章 计算机网络的体系结构 【1】语义 何时发出何种控制信息,完成何种动作以及做出何种响应。 【2】简述网络协…

【Linux】性能分析器 perf 详解(一):简介、安装、stat命令演示

1、简介 perf 是由 Linux 官方提供的系统性能分析工具 。它包含两部分: perf_events ,Linux 内核中的一个子系统perf 命令,用户空间的应用程序内核子系统 perf_events 提供了性能计数器(hardware performance counters)和性能事件的支持,它以事件驱动型的方式工作,通过…

DarkGPT:基于GPT-4-200k设计的人工智能OSINT助手

关于DarkGPT DarkGPT是一款功能强大的人工智能安全助手,该工具基于GPT-4-200k设计并实现其功能,可以帮助广大研究人员针对泄露数据库进行安全分析和数据查询相关的OSINT操作。 工具要求 openai1.13.3 requests python-dotenv pydantic1.10.12 工具安装 …

【机器学习】在【Pycharm】中的应用:【线性回归模型】进行【房价预测】

专栏:机器学习笔记 pycharm专业版免费激活教程见资源,私信我给你发 python相关库的安装:pandas,numpy,matplotlib,statsmodels 1. 引言 线性回归(Linear Regression)是一种常见的统计方法和机器学习算法&a…

miniconda 弹出黑窗

etc\conda\activate.d 和 envs 中不同环境中的 etc\conda\activated.d,只保留下图中的三个文件即可。

Facebook的投流技巧有哪些?

相信大家都知道Facebook拥有着巨大的用户群体和高转化率,在国外社交推广中的影响不言而喻。但随着Facebook广告的竞争越来越激烈,在Facebook广告上获得高投资回报率也变得越来越困难。IPIDEA代理IP今天就教大家如何在Facebook上投放广告的技巧&#xff0…

p2p、分布式,区块链笔记:试用ZeroTier组网

ZeroTier 是一种用于创建和管理虚拟局域网(Virtual Local Area Network,VLAN)的软件定义网络(SDN)解决方案。它可以通过互联网将多个设备安全地连接在一起,就像它们在同一个本地网络上一样。主要开发语言为…

zfile文件共享系统使用

1.简介 zfile是一款基于java开源的文件共享软件,有两种部署(jar包和war包),非常适合广大的Java开发人员使用(当然其他人员也可使用),或者你也可以称它为网盘,可以在Windows、MacOS、Linux上部署…

【操作系统期末速成】 EP01 | 学习笔记(基于五道口一只鸭)

文章目录 一、前言🚀🚀🚀二、正文:☀️☀️☀️1.1 考点一:操作系统的概率及特征 三、总结:🍓🍓🍓 一、前言🚀🚀🚀 ☀️ 回报不在行动…

javaSE知识点整理总结(下)、MySQL数据库

目录 一、异常 1.常见异常类型 2.异常体系结构 3.异常处理 (1)finally (2)throws 二、JDBC 1.JDBC搭建 2.执行SQL语句两种方法 三、MySQL数据库 1.ddl 2.dml 3.dql (1)字符函数 (…

Unidbg调用-补环境V3-Hook

结合IDA和unidbg,可以在so的执行过程进行Hook,这样可以让我们了解并分析具体的执行步骤。 应用场景:基于unidbg调试执行步骤 或 还原算法(以Hookzz为例)。 1.大姨妈 1.1 0x1DA0 public void hook1() {

Unity之自定义Text组件默认属性值

内容将会持续更新,有错误的地方欢迎指正,谢谢! Unity之自定义Text组件默认属性值 TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取!…

48 - 按日期分组销售产品(高频 SQL 50 题基础版)

48 - 按日期分组销售产品 -- group_concat 分组拼接selectsell_date,count(distinct product) num_sold,group_concat(distinct product order by product separator ,) products fromActivities group bysell_date;

统计是一门艺术(参数假设检验)

1.参数假设检验 在总体分布已知的情况下,对分布中未知参数的检验。 (1)相关基本概念 零假设/原假设与对立假设/备择假设: 任务:根据样本作出是否接受H0 复合假设与简单假设: 否定域/拒绝域与接受域&…

中霖教育:中级会计师备考误区你中招了吗?

【中霖教育好吗】【中霖教育口碑】 中级会计师考试难度并没有大家想象的那么大,只要掌握正确的备考方法就可以。在准备过程中,部分考生往往会陷入一些备考误区,进而影响复习效率。以下误区看你中招了吗: 一、过度追求数量而非质…

rocketmq简易版搭建

今天真是搭了本人六七个钟,太难了 首先是魔法大战镜像,这波大败而归,连上了,可惜没氪金,永远是没拉完就超时,魔法质量不行,等上班赚点米再改良一下魔法类别,那还得继续linux搭建 1…

ComfyUI高清放大的四种方式(工作流附件在最后)

方式一:Latent放大工作流 1.工作流截图 方式二:ESRGAN(传统模型)放大工作流 方式三:算法放大(后期处理)工作流 方式四:Ultimate SD Upscale工作流 这个方式的优势是对于显存底的用…

49 - 列出指定时间段内所有的下单产品(高频 SQL 50 题基础版)

49 - 列出指定时间段内所有的下单产品 -- 指定2020年2月的方法 -- (1) order_date between 2020-02-01 and 2020-02-29 -- (2) order_date like 2020-02% -- (3) DATE_FORMAT(order_date, "%Y-%m") "2020-02" -- (4) LEFT(order_date, 7) 或 subst…