【因果推断python】45_估计量1

目录

问题设置

目标转换


到目前为止,我们已经了解了如何在干预不是随机分配的情况下对我们的数据进行纠偏,这会导致混淆偏差。这有助于我们解决因果推理中的识别问题。换句话说,一旦单位是可交换的,或者 Y(0),Y(1)\perp X,就可以学习干预效果。但我们还远远没有完成。

识别意味着我们可以找到平均的干预效果。换句话说,我们知道一种干预的平均效果。当然,这很有用,因为它可以帮助我们决定是否应该真正实施干预。但我们想要的不止这些。我们想知道是否存在对干预反应更好或更差的单位亚组。这应该允许一个更好的策略,我们只对那些将从中受益的人进行干预。

问题设置

让我们回顾一下我们感兴趣的设置。鉴于潜在结果,我们可以将个体颗粒度的干预效果定义为潜在结果之间的差异。

\tau_i=Y_i(1)-Y_i(0),

或者,连续处理情况,\tau_i=\partial Y(t),其中 t 是处理变量。当然,我们永远无法观察个体的干预效果,因为我们只能看到潜在的结果之一

我们可以将平均干预效果 (ATE) 定义为

\tau=E[Y_i(1)-Y_i(0)]=E[\tau_i]

和条件平均干预效果(CATE)为

\tau(x)=E[Y_i(1)-Y_i(0)|X]=E[\tau_i|X]

在第一部分,我们主要关注 ATE。现在,我们对 CATE 很感兴趣。 CATE 对于个性化决策过程很有用。例如,如果您有一种药物作为干预方法 t,您想知道哪种类型的患者对药物的反应更高(更高的 CATE),以及是否有某些类型的患者有负面反应(类别 < 0)。

我们已经了解了如何使用线性回归以及干预和特征之间的交互来估计 CATE

y_i=\beta_0+\beta_1t_i+\beta_2X_i+\beta_3t_iX_i+e_i

如果我们估计这个模型,我们可以得到 \tau(x) 的估计值

\hat{\tau}(x)=\hat{\beta}_1+\hat{\beta}_3t_iX_i

尽管如此,线性模型仍有一些缺点。主要的一个是对 X 的线性假设。请注意,您甚至不关心此模型上的 \beta_{2}。但是,如果特征 X 与结果没有线性关系,则您对因果参数 \beta_{1} 和 \beta_{3} 的估计将不正确。

如果我们可以用更灵活的机器学习模型代替线性模型,那就太好了。我们甚至可以将处理作为特征插入 ML 模型,例如提升树(boosted tree)或神经网络

y_i=M(X_i,T_i)+e_i

但我们如何从模型获得干预效果的估计值还不清楚,因为这个模型将输出 \hat{y} 预测,而不是\tau\hat{(x)}预测。理想情况下,我们将使用机器学习回归模型,而不是最小化结果 MSE

E[(Y_i-\hat{Y}_i)^2]

将最小化干预效果 MSE

E[(\tau(x)_i-\hat{\tau}(x)_i)^2]=E[(Y_i(1)-Y_i(0)-\hat{\tau}(x)_i)^2]

但是,这个标准就是我们所说的不可行。同样,这里的问题是 \tau(x)_i 是不可观察的,所以我们不能直接优化它。这让我们陷入了困境……让我们试着把它简化一下,也许我们可以想到一些事情。

目标转换

假设您的干预是二元的。假设您是一家投资公司,正在测试发送金融教育电子邮件的有效性。你希望这封电子邮件能让人们进行更多投资。另外,假设您进行了一项随机研究,其中 50% 的客户收到了电子邮件,而另外 50% 的客户没有收到。

这是一个疯狂的想法:让我们通过将结果变量与干预相乘来转换结果变量。

Y_i^*=2Y_i*T_i-2Y_i*(1-T_i)

因此,如果单位被处理,您将取结果并将其乘以 2。如果未处理,您将取结果并将其乘以 -2。例如,如果您的一位客户投资了 2000,00 巴西雷亚尔并收到了电子邮件,则转换后的目标将为 4000。但是,如果他或她没有收到电子邮件,则为 -4000。

这似乎很奇怪,因为您说电子邮件的效果可以是负数,但对我来说是无用的。如果我们做一些数学运算,我们可以看到,平均或预期,这个转换后的目标将是干预效果。这简直太不可思议了。我要说的是,通过应用这种有点古怪的转换,我可以估计一些我什至无法观察到的东西。

要理解这一点,我们需要一些数学知识。由于随机分配,我们有 T\perp Y(1),Y(1),这是我们的老朋友。这意味着 E[T,Y(t)]=E[T]*E[Y(t)],这是独立性的定义。

另外,我们知道

Y_i*T_i=Y_(1)i*T_i , Y_i*(1-T_i)=Y_(0)i*T_i

因为干预是实现一种或其他潜在结果的原因。考虑到这一点,让我们取 Y_i^* 的期望值,看看我们最终会得到什么。

因此,这个看似疯狂的想法最终成为了对个体干预效果的无偏估计 \tau(x)_i。现在,我们可以将不可行的优化标准替换为

E[(Y_i^*-\hat{\tau}(x)_i)^2]

简单来说,我们所要做的就是使用任何回归机器学习模型来预测 Y_i^* 并且该模型将输出干预效果预测。

既然我们已经解决了简单的情况,那么更复杂的情况呢,干预不是 50% 50%,甚至不是随机分配的呢?事实证明,答案有点复杂,但并不多。首先,如果我们没有随机分配,我们至少需要条件独立 T\perp Y(1),Y(1)|X。也就是说,控制 X, T 与随机一样好。这样,我们可以将转换后的目标泛化为

Y_i^*=Y_i*\frac{T_i-e(X_i)}{e(X_i)(1-e(X_i))}

其中 e(X_i) 是倾向得分。因此,如果干预不是 50% 50%,而是以不同的概率 p 随机化,您所要做的就是将上述公式中的倾向得分替换为 p。如果干预不是随机的,那么您必须使用存储或估计的倾向得分。

如果您对此进行预期,您会发现它也与干预效果相匹配。证明留给读者作为练习。开个玩笑,就在这里。这有点麻烦,所以请随意跳过它。

与往常一样,我认为这将通过一个示例变得更加具体。同样,考虑一下我们发送的试图让人们进行更多投资的投资电子邮件。结果变量二进制(投资与未投资)“转换”。 

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import seaborn as sns
from nb21 import cumulative_gain, elast
email = pd.read_csv("./data/invest_email_rnd.csv")
email.head()

我们的目标是个性化之一。 让我们关注 email-1。 我们希望仅将其发送给那些对其反应更好的客户。 换句话说,我们希望估计 email-1 的条件平均处理效果

E[Converted(1)_i-Converted(0)_i|X_i=x]=\tau(x)_i

这样我们就可以定位那些对电子邮件反应最好的客户(更高的 CATE)

但首先,让我们将数据集分解为训练集和验证集。 我们将在一组上估计 \tau(x)_i 并评估另一组的估计。

from sklearn.model_selection import train_test_split

np.random.seed(123)
train, test = train_test_split(email, test_size=0.4)
print(train.shape, test.shape)
(9000, 8) (6000, 8)

现在,我们将应用我们刚刚学习的目标转换。 由于电子邮件是随机分配的(尽管不是在 50% 50% 的基础上),我们不需要担心倾向得分。 相反,它是恒定的并且等于干预概率。

y = "converted"
T = "em1"
X = ["age", "income", "insurance", "invested"]

ps = train[T].mean()

y_star_train = train[y] * (train[T] - ps)/(ps*(1-ps))

使用转换后的目标,我们可以选择任何 ML 回归算法来预测它。 让我们在这里使用提升树(boosted tree)。

from lightgbm import LGBMRegressor

np.random.seed(123)
cate_learner = LGBMRegressor(max_depth=3, min_child_samples=300, num_leaves=5)
cate_learner.fit(train[X], y_star_train);

该模型现在可以估计 �(�)�。 换句话说,它输出的是 �^(�)�。 例如,如果我们对测试集进行预测,我们会看到某些单元的 CATE 比其他单元高。 例如,客户 6958 的 CATE 为 0.1,这意味着如果我们向该客户发送电子邮件,他或她购买我们的投资产品的概率预计会增加 0.1。 相反,对于客户 3903,预计购买该产品的概率仅增加 0.04。

test_pred = test.assign(cate=cate_learner.predict(test[X]))
test_pred.head()

为了评估这个模型有多好,我们可以展示训练集和测试集的累积增益曲线。

gain_curve_test = cumulative_gain(test_pred, "cate", y="converted", t="em1")
gain_curve_train = cumulative_gain(train.assign(cate=cate_learner.predict(train[X])), "cate", y="converted", t="em1")
plt.plot(gain_curve_test, color="C0", label="Test")
plt.plot(gain_curve_train, color="C1", label="Train")
plt.plot([0, 100], [0, elast(test, "converted", "em1")], linestyle="--", color="black", label="Baseline")
plt.legend();

正如我们所看到的,这个即插即用的估计器在测试集上比随机的要好。 尽管如此,它看起来还是过拟合了很多,因为在训练集上的表现比在测试集上的表现要好得多。

这实际上是这种目标转换技术的最大缺点之一。 使用此目标转换,您确实获得了很多简单性,因为您只需转换目标并使用任何 ML 估计器来预测异构干预效果。 它的代价是你会得到很多差异。 这是因为转换后的目标是对个体干预效果的非常嘈杂的估计,并且该方差会转移到您的估计中。 如果您没有大量数据,这将是一个大问题,但在处理超过 1MM 样本的大数据应用程序中应该问题不大。

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

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

相关文章

AI绘画ComfyUI-插件-面部修复,快速入门安装使用!

这期给大家分享一个插件AI绘画 ComfyUI的——Impact Pack ComfyUI也是隶属于Stable Diffusion的工作流形式的AI绘画工具。 这是一个综合节点&#xff0c;这期先介绍下这个插件中的面部修复功能 Impact Pack插件 1、下载插件 在ComfyUI管理器中安装节点&#xff0c;搜索Imp…

[信号与系统]傅里叶变换、卷积定理、和为什么时域的卷积等于频域相乘。

前言 最近学习以下IIR滤波器和FIR滤波器 前置 1. 时域和频域 时域和频域代表着频率和时间与振幅的一一对应关系 2. 卷积运算 关于卷积的定义&#xff0c;详情请看 这篇文章能让你明白卷积 卷积运算是一种数学运算&#xff0c;广泛应用于信号处理、图像处理、控制系统和概…

Unity和UE免费领恐怖书本头怪兽角色模型恐怖或奇幻游戏monster适合FPS类型PBR202406202143

Unity和UE免费领恐怖书本头怪兽角色模型恐怖或奇幻游戏monster适合FPS类型PBR202406202143 Unity恐怖书本头怪兽角色模型&#xff1a;https://prf.hn/l/zpBqgVl UE恐怖书本头怪兽角色模型&#xff1a;https://prf.hn/l/4PzY1Qy 作者其他资产&#xff1a;https://prf.hn/l/0…

RX8025/INS5T8025实时时钟-国产兼容RS4TC8025

该模块是一个符合I2C总线接口的实时时钟&#xff0c;包括一个32.768 kHz的DTCXO。 除了提供日历&#xff08;年、月、日、日、时、分、秒&#xff09;功能和时钟计数器功能外&#xff0c;该模块还提供了大量其他功能&#xff0c;包括报警功能、唤醒定时器功能、时间更新中断功能…

深入理解和实现Windows进程间通信(管道)

进程间通信&#xff08;IPC&#xff0c;Inter-Process Communication&#xff09;是指在不同进程之间的数据传输。进程是操作系统分配资源和调度的独立单位&#xff0c;每个进程都有自己独立的地址空间&#xff0c;一个进程无法直接访问另一个进程的数据。因此&#xff0c;当需…

深度解析RocketMq源码-持久化组件(四) CommitLog

1.绪论 commitLog是rocketmq存储的核心&#xff0c;前面我们介绍了mappedfile、mappedfilequeue、刷盘策略&#xff0c;其实commitlog的核心组件我们基本上已经介绍完成。 2.commitLog的组成 commitLog的核心其实就是MqppedFilequeue&#xff0c;它本质上就是多个mappedFile…

SCI一区TOP|局部强化优化算法(PRO)原理及实现【免费获取Matlab代码】

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献5.代码获取 1.背景 2024年&#xff0c;A Taheri受到部分强化效应(PRE)理论启发&#xff0c;提出了局部强化优化算法&#xff08;Partial Reinforcement Optimizer, PRO&#xff09;。 2.算法原理 2.1算法思…

Python数据科学 | 是时候跟Conda说再见了

本文来源公众号“Python数据科学”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;是时候跟Conda说再见了 1 简介 conda作为Python数据科学领域的常用软件&#xff0c;是对Python环境及相关依赖进行管理的经典工具&#xff0c;通…

【漏洞复现】红帆iOffice.net wssRtSyn接口处存在SQL注入

【产品&&漏洞简述】 红帆iOffice.net从最早满足医院行政办公需求&#xff08;传统OA&#xff09;&#xff0c;到目前融合了卫生主管部门的管理规范和众多行业特色应用&#xff0c;是目前唯一定位于解决医院综合业务管理的软件&#xff0c;是最符合医院行业特点的医院综…

SVN学习(001 svn安装)

尚硅谷SVN高级教程(svn操作详解) 总时长 4:53:00 共72P 此文章包含第1p-第p19的内容 介绍 为什么使用版本控制工具 版本控制工具的功能 版本控制简介 客户端服务器结构 c/s结构 服务端的结构&#xff1a; 服务程序 、版本库(存放我们上传的文件) 客户端的三个基本操作&#…

记录一次递归查询导致的 java.lang.StackOverflowError: null

问题截图&#xff1a; 由于作者使用递归统计信息&#xff0c;刚开始这个接口运行得正常&#xff0c;但是上线运行一段时间后接口就出现了&#xff0c;如图的栈溢出错误。可以看出确实是堆栈溢出了&#xff0c;解决栈溢出目前只有两种方式&#xff1a; 第一种调大栈的大小&…

小程序开发的技术难点

小程序开发是一项技术难度较高的工作&#xff0c;需要开发者具备多方面的知识和技能&#xff0c;小程序开发的技术难点主要体现在以下几个方面。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 多端兼容 小程序需要在微信、支付宝…

Flow Matching For Generative Modeling

Flow Matching For Generative Modeling 一、基于流的&#xff08;Flow based&#xff09;生成模型 生成模型 我们先回顾一下所谓的生成任务&#xff0c;究竟是想要做什么事情。我们认为&#xff0c;世界上所有的图片&#xff0c;是符合某种分布 p d a t a ( x ) p_{data}(…

MES管理系统如何设计生产质量管理功能

在现代制造业中&#xff0c;MES管理系统作为连接企业计划层与车间操作层的关键桥梁&#xff0c;其生产者计量管理功能的设计显得尤为重要。一个完善的MES管理系统生产质量管理模块&#xff0c;不仅要求能够实时、准确地采集和分析生产过程中的质量数据&#xff0c;还需要能够与…

Unity3d 游戏暂停(timeScale=0)引起的deltaTime关联的系列问题解决

问题描述 游戏暂停的功能是通过设置timeScale0实现的&#xff0c;不过在暂停游戏的时候&#xff0c;需要对角色进行预览和设置&#xff0c;为了实现这个功能&#xff0c;是通过鼠标控制相机的操作&#xff0c;为了使相机的操作丝滑&#xff0c;获取鼠标操作系数乘以Time.delta…

如何在React中使用CSS模块,并解释为什么使用它们比传统CSS更有益?

在React中使用CSS模块是一种将CSS类名局部化到单个组件的方法&#xff0c;从而避免了全局作用域中的类名冲突。CSS模块允许你为组件编写样式&#xff0c;并确保这些样式只应用于该组件&#xff0c;而不会影响到其他组件。 以下是在React中使用CSS模块的步骤&#xff1a; 安装C…

Excel 识别数据层次后转换成表格

某列数据可分为 3 层&#xff0c;第 1 层是字符串&#xff0c;第 2 层是日期&#xff0c;第 3 层是时间&#xff1a; A1NAME122024-06-03304:06:12404:09:23508:09:23612:09:23717:02:2382024-06-02904:06:121004:09:231108:09:2312NAME2132024-06-031404:06:121504:09:231620…

FreeBSD在zfs挂接第二块ssd 硬盘

为FreeBSD机器新增加了一块ssd硬盘&#xff1a;骑尘 256G 先格式化分区硬盘 进入bsdconfig 选Disk Management 选择ada1 &#xff0c;也就是新增加的硬盘 选择auto 然后选择Entire Disk 提示信息 The existing partition scheme on this disk (MBR) │ …

如何解决windows自动更新,释放C盘更新内存

第一步&#xff1a;首先关闭windows自动更新组件 没有更新windows需求&#xff0c;为了防止windows自动更新&#xff0c;挤占C盘空间&#xff0c;所以我们要采取停止Windows Update服务。按下WinR打开运行对话框&#xff0c;输入services.msc&#xff0c; 然后按Enter。在服务…

传输大文件之镭速自动清理过期文件

电子文档的普及无疑极大地便利了我们的工作与生活&#xff0c;但随之而来的是如何有效管理这些日益增多的文件。企业面临着存储空间紧张、文件传输复杂、敏感信息泄露等挑战。自动化文件清理的需求日益凸显&#xff0c;这不仅关乎个人对高效工作环境的追求&#xff0c;更是企业…