【因果推断python】50_去偏/正交机器学习2

news2024/11/27 22:26:48

目录

Frisch-Waugh-Lovell on Steroids

CATE Estimation with Double-ML


Frisch-Waugh-Lovell on Steroids

双重/偏差 ML 其思想非常简单:在构建结果和治疗残差时使用 ML 模型:

Y_i-\hat{M}_y(X_i)=\tau\cdot(T_i-\hat{M}_t(X_i))+\epsilon

\hat{M}_y(X_i)是估计E[Y|X]\hat{M}_t(X_i)是估计E[T|X]

我们的想法是,ML 模型具有超强的灵活性,因此在估计 Y和 T残差,同时仍然保持 FWL 风格的正交化。这意味着我们不必对协变量 X与结果 Y或协变因素与治疗之间的关系作出任何参数假设,以获得正确的治疗效果。只要没有未观察到的混杂因素,我们就可以通过以下正交化程序计算ATE:

1.估计结果 Y 使用特征 X, 使用灵活的 ML 回归模型 M_{y}
2.估计治疗 T 利用特征 X,使用灵活的 ML 回归模型M_{t}
3.获取残差 \tilde{Y}=Y-M_y(X)\tilde{T}=T-M_t(X)
4. 将结果的残差与处理的残差进行回归 \tilde{Y}=\alpha+\tau\tilde{T}

\tau就是ATE,我们可以用 OLS 对其进行估计。ML 的强大之处在于灵活性。ML 功能强大,可以捕捉干扰关系中复杂的函数形式。但这种灵活性也带来了麻烦,因为这意味着我们现在必须考虑过度拟合的可能性。

Chernozhukov 等人(2016 年)对过度拟合如何造成问题进行了更深入、更严谨的解释,我强烈建议您去看看。但在这里,我将基于直觉进行解释。

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

现在来看看过度拟合 M 的问题,注意它对 T 方差的解释将超过它应该解释的方差。因此,T残差的方差会小于其应有的方差。如果处理的方差较小,最终估计值的方差就会很大。这就好比几乎每个人的待遇都是一样的。如果每个人的治疗水平都相同,那么就很难估计不同治疗水平下的情况。另外,当 T是 X 的确定性函数时,也会出现这种情况,这意味着违反了positivity 。

这些就是我们在使用 ML 模型时遇到的问题,但我们如何才能纠正这些问题呢?答案就在于我们所说的交叉预测和折外残差。

我们将把数据分成大小相等的 K 部分。然后,对于每个 K 部分,我们将在所有其他 K-1 个样本上估计 ML 模型,并得出 K 部分的残差。请注意,这些残差是通过折外预测得出的。我们在一部分数据上拟合模型,但在另一部分数据上进行预测和计算残差。

因此,即使模型拟合过度,也不会人为地将残差推向零。最后,我们综合所有 K 部分的预测结果,估计出最终的因果模型 \tilde{Y}=\alpha+\tau\tilde{T}.

好了,我们已经讲了很多,如果不举例说明,可能很难跟上。为了配合这些理论,让我们一步一步来实现双重/偏差 ML。在此过程中,我将借此机会解释每个步骤的作用。

首先,让我们使用 ML 模型来估计干扰关系。我们将使用一个 LGBM 模型,根据协变量温度、工作日和成本来预测价格。这些预测将是交叉预测,我们可以使用 sklearn 的 cross_val_predict 函数来获得。我还将平均 \hat{\mu}_{t} 以实现可视化。

from lightgbm import LGBMRegressor
from sklearn.model_selection import cross_val_predict

y = "sales"
T = "price"
X = ["temp", "weekday", "cost"]

debias_m = LGBMRegressor(max_depth=3)

train_pred = train.assign(price_res =  train[T] -
                          cross_val_predict(debias_m, train[X], train[T], cv=5)
                          + train[T].mean()) # add mu_t for visualization. 

请注意,我把 M_{t} 模型称为debias 模型。这是因为该模型在 Double/Debias ML 中扮演的角色是使治疗去偏。残差 \tilde{T}=T-M_t(X) 可以看作是治疗的一个版本,在这个版本中模型已经消除了 X 带来的所有混杂偏差。换句话说,\tilde{T} 与 X 是正交的。因为它已经被 X 解释过了

为了说明这一点,我们可以展示我们之前看到的同一幅图,但现在用价格残差代替了价格。还记得之前周末的价格更高吗?现在,这种偏差消失了。所有工作日的价格残差分布都是一样的。

np.random.seed(123)
sns.scatterplot(data=train_pred.sample(1000), x="price_res", y="sales", hue="weekday");

M_{t} 的作用是消除T 的偏差,但 M_{y} 又是什么呢?它的作用是去除 Y 的方差。直观地说,M_{y} 创造了一个outcome版本,在这个版本中,由 X 引起的所有方差都被解释掉了。这样一来,对 \tilde{Y} 的因果关系进行估计就变得更容易了。 由于噪音较小,因果关系变得更容易看清。

np.random.seed(123)
sns.scatterplot(data=train_pred.sample(1000), x="price_res", y="sales_res", hue="weekday");

现在,我们不难看出价格与销售额之间的负相关关系。

最后,为了估计这种因果关系,我们可以对残差进行回归。

final_model = smf.ols(formula='sales_res ~ price_res', data=train_pred).fit()
final_model.summary().tables[1]

我们可以看到,当我们使用销售额和价格的残差或正交化版本时,我们可以非常确信价格和销售额之间的关系是负的,这非常有意义。当我们提高价格时,冰淇淋的需求量就会下降。

但是,如果我们看一下价格与销量之间的未重构关系或原始关系,由于存在偏差,我们会发现两者之间存在正相关关系。这是因为,在预期高销售量的情况下,价格会提高。

final_model = smf.ols(formula='sales ~ price', data=train_pred).fit()
final_model.summary().tables[1]

CATE Estimation with Double-ML

到目前为止,我们已经了解了双重/偏差 ML 如何让我们专注于估计平均治疗效果 (ATE),但它也可用于估计治疗效果异质性或条件平均治疗效果 (CATE)。从本质上讲,我们现在说的因果参数\tau 
 会随单位协变量的变化而变化。

Y_i-M_y(X_i)=\tau(X_i)\cdot(T_i-M_t(X_i))+\epsilon_i
为了估计这一模型,我们将使用相同的价格和销售额残差,但现在我们将价格残差与其他协变量进行交互。然后,我们可以拟合一个线性 CATE 模型。

\tilde{Y}_{i}=\alpha+\beta_{1}\tilde{T}_{i}+\boldsymbol{\beta}_{2}\boldsymbol{X}_{​{\boldsymbol{i}}}\tilde{T}_{i}+\epsilon_{i}
估算出这样一个模型后,为了进行 CATE 预测,我们将使用随机测试集。由于这个最终模型是线性的,因此我们可以机械地计算 CATE, M是我们最终的模型。

\hat{\mu}(\partial Sales_i,X_i)=M(Price=1,X_i)-M(Price=0,X_i)

final_model_cate = smf.ols(formula='sales_res ~ price_res * (temp + C(weekday) + cost)', data=train_pred).fit()

cate_test = test.assign(cate=final_model_cate.predict(test.assign(price_res=1))
                        - final_model_cate.predict(test.assign(price_res=0)))

为了检验该模型在区分价格敏感度高的单位和价格敏感度低的单位方面的效果如何,我们将使用累积弹性曲线。

gain_curve_test = cumulative_gain(cate_test, "cate", y=y, t=T)
plt.plot(gain_curve_test, color="C0", label="Test")
plt.plot([0, 100], [0, elast(test, y, T)], linestyle="--", color="black", label="Baseline")
plt.legend();
plt.title("R-Learner");

从上面的曲线可以看出,使用最终线性模型的双重/偏差 ML 程序已经非常好了。但是,也许我们可以做得更好。事实上,这是一个非常通用的程序,我们可以把它理解为元学习器。聂和瓦格将其称为 R 学习器,以此来认可罗宾逊(1988 年)的研究成果,并强调残差化的作用。

这种概括来自于我们意识到双重/偏差 ML 程序定义了一个新的损失函数,我们可以任意最小化这个函数。接下来,我们将看到如何以一种与之前讨论目标变换方法时非常相似的方式来做到这一点。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python创建虚拟环境venv

为什么要创建虚拟环境 使用python创建虚拟环境是为了让项目的依赖隔离开来,互不干扰,使得每个项目都运行在一个独立的Python环境中。 创建虚拟环境 1. 命令行创建 step1. 创建 # 1. 进入到你的项目目录中 cd myproject # 使用python创建一个虚拟环境…

2024年化学、能源与核工程国际会议(ICCENE 2024)

2024年化学、能源与核工程国际会议(ICCENE 2024) 2024 International Conference on Chemical, Energy and Nuclear Engineering (ICCENE 2024) 会议地点:三亚,中国 网址:www.iccene.com 邮箱: iccenesub-conf.com 投稿主题请注明:ICCEN…

osgVerse加载3dtiles

本文利用osgVerse中的osgdb_3dtiles插件,展示其加载倾斜模型3dtiles的效果,并对其实现做的分析,分析其按照osg的场景结构显示3dtiles的方法。 目录 1 osgVerse显示3dtiles效果2 osg的场景结构与3dtiles结构分析3 部分代码实现细节内容 1 osgVerse显示3dtiles效果数据下载地址…

头歌资源库(14)残缺棋盘

一、 问题描述 二、算法思想 首先,将2^k 2^k的棋盘划分为四个相等大小的子棋盘,定义为左上、左下、右上和右下四个子棋盘。 然后,根据残缺格的坐标,确定其中一个子棋盘是不完整的,即残缺子棋盘。假设残缺子棋盘是左…

Pytest框架中pytest.mark功能

文章目录 mark功能 1. 使用pytest.mark.skip 2. 使用pytest.mark.skipif 3. 使用 pytest.mark.xfail 4使用pytest.mark.parametrize 5 使用pytest.mark.自定义标记 6 使用pytest.mark.usefixtures pytest 的mark功能在pytest官方文档是这样解释的: https://…

【C语言】解决C语言报错:Buffer Overflow

文章目录 简介什么是Buffer OverflowBuffer Overflow的常见原因如何检测和调试Buffer Overflow解决Buffer Overflow的最佳实践详细实例解析示例1:字符串操作不当示例2:数组访问越界示例3:未检查输入长度示例4:使用不安全的函数 进…

公共 IP 地址和私有 IP 地址的区别总结

什么是IP地址? IP 地址,即互联网协议地址(Internet Protocol Address),是网络设备在网络中进行通信的标识。IP 地址可以看作是设备在网络中的“地址”,有助于数据包在网络中找到正确的接收端。IP 地址主要…

FP7195做大功率钓鱼灯应用方案,0.1%深度无极无频闪调光调色应用,调光曲线顺滑无突兀

文章目录 文章目录 方案背景 一、夜钓灯电路框架 二、FP7195芯片介绍 芯片参数 总结 方案背景 目前夜钓正在逐渐变得时尚起来,随着夜钓群体的年轻化,人们对于夜钓灯的审美要求也越来越高。夜钓灯作为夜间钓鱼的重点装备,不仅仅需要高质量的光…

视频号封禁VS京东支持,AI虚拟主播是红利还是“毒药”?

大数据产业创新服务媒体 ——聚焦数据 改变商业 在数字化浪潮的推动下,AI技术正以前所未有的速度渗透到我们生活的每一个角落。而当AI技术遇上直播带货,一个全新的概念——AI数字人直播带货,便应运而生。这不仅仅是一场技术的革新&#xff0…

定时任务查看报拒绝权限,不执行

排查思路: 1、查看/etc/cron.deny ##此文件是空的 cat /etc/cron.deny只有cron.deny文件。但文件无内容,不存在限制(如果存在cron.allow文件,以cron.allow文件优先;若cron.allow和cron.deny都存在,以cron…

力扣SQL50 查询结果的质量和占比 AVG(条件)

Problem: 1211. 查询结果的质量和占比 &#x1f468;‍&#x1f3eb; 参考题解 Code select query_name,round(avg(rating/position),2) as quality,round(100 * avg(rating < 3), 2) as poor_query_percentage from Queries group by query_name -- 到此结束过不了最后一…

el-upload 组件上传文件(查询,上传,删除,下载功能)

1.html el-upload中的属性&#xff1a; <el-upload ref"upload" class"upload-demo" // element-ui自带的样式 :headers"headerOdj" // 文件上传的头,带token&#xff08;重要&#xff0c;不然传输大文件会断掉&…

使用Spring Boot实现用户认证和授权

文章目录 引言第一章 Spring Boot概述1.1 什么是Spring Boot1.2 Spring Boot的主要特性 第二章 用户认证和授权基础知识2.1 用户认证2.2 用户授权2.3 Spring Security概述 第三章 项目初始化第四章 实现用户认证和授权4.1 定义用户实体类和角色实体类4.2 创建Repository接口4.3…

昇思25天学习打卡营第4天 | 数据变换

内容介绍&#xff1a;通常情况下&#xff0c;直接加载的原始数据并不能直接送入神经网络进行训练&#xff0c;此时我们需要对其进行数据预处理。MindSpore提供不同种类的数据变换&#xff08;Transforms&#xff09;&#xff0c;配合数据处理Pipeline来实现数据预处理。所有的T…

书生·浦语大模型LagentAgentLego智能体应用搭建 第二期

文章目录 智能体概述智能体的定义智能体组成智能体范式 环境配置Lagent&#xff1a;轻量级智能体框架实战Lagent Web Demo用 Lagent 自定义工具 AgentLego&#xff1a;组装智能体“乐高”直接使用AgentLego作为智能体工具使用 用 AgentLego 自定义工具 智能体概述 智能体的定义…

gbase8s获取表的serial字段下一个insert序列值

serial字段&#xff0c;有个函数可以获取到最后插入的序列值&#xff0c;但是好像只能获取到当前会话最后一次插入的序列值&#xff0c;不论是SELECT dbinfo(sqlca.sqlerrd1) FROM dual;&#xff0c;还是select dbinfo(bigserial) from dual;&#xff0c;或者select dbinfo(ser…

点击旋转箭头样式

实现效果&#xff1a; html界面&#xff0c;主要通过isdown来控制箭头是上还是下 <el-popoverplacement"bottom"trigger"click":visible-arrow"false"v-model"isdown"popper-class"user-popover"><divslot"re…

ICMAN触摸芯片——防水触摸

ICMAN触摸芯片之防水触摸触摸按键控制开关和调节挡位和切换不同模式 淋水状态下&#xff0c;触摸按键反应灵敏&#xff0c;不误触发&#xff0c; ICMAN触摸芯片稳定性与抗干扰能力强&#xff0c; 可以轻松解决家电触摸感应不灵敏和有水误触发的问题&#xff0c; 从而有效实…

如何利用AI简历工具为实习简历加分?

时间匆匆&#xff0c;我们又迎来了毕业季。大学生活丰富多彩&#xff0c;学业同样重要。毕业答辩对于每位大学生来说都是一道重要的门槛。回想起那些为了答辩准备而熬夜、焦虑的日子&#xff0c;那份努力至今难忘。 虽然答辩的准备工作可能相当繁琐&#xff0c;但幸运的是&…

数学建模系列(2/4):建模入门

目录 引言 1. 如何开始数学建模 1.1 选择和描述问题 1.2 提出基本假设 1.3 确定模型类型 2. 建模的数学基础 2.1 线性代数基础 矩阵运算 线性方程组的解法 2.2 微分方程基础 常微分方程 偏微分方程 2.3 统计与概率基础 描述性统计 概率基础 3. 模型的求解方法 …