【Python实战因果推断】20_线性回归的不合理效果10

目录

Neutral Controls

Noise Inducing Control

Feature Selection: A Bias-Variance Trade-Off


Neutral Controls

现在,您可能已经对回归如何调整混杂变量有了一定的了解。如果您想知道干预 T 对 Y 的影响,同时调整混杂变量 X,您所要做的就是在模型中加入 X。或者,为了得到完全相同的结果,您可以根据 X 预测 T,得到残差,并将其作为干预的去势版本。在 X 固定不变的情况下,将 Y 与这些残差进行回归,就能得到 T 与 Y 的关系。

但 X 中应包含哪些变量呢?同样,并不是因为增加变量就能调整变量,所以你想在回归模型中包含所有变量。你不想包含共同效应(对撞机)或中介变量,因为这些变量会引起选择偏差。但在回归中,您还应该了解更多类型的控制因素。这些控制项乍看起来似乎无害,但实际上却相当有害。这些控制被称为中性控制,因为它们不会影响回归估计的偏差。但它们会对方差产生严重影响。正如您所看到的,在回归中包含某些变量时,需要权衡偏差和方差。例如,请考虑下面的 DAG:

您是否应该在模型中加入 credit_score2?如果不包括它,就会得到一直以来看到的相同结果。这个结果是无偏的,因为您是根据信用评分 1_buckets 进行调整的。但是,尽管您不需要这样做,请看看如果您将 credit_score2 计算在内会发生什么。将下面的结果与您之前得到的不包含 credit_score2 的结果进行比较。有什么变化?

 formula = "default~credit_limit+C(credit_score1_buckets)+credit_score2"
 model = smf.ols(formula, data=risk_data_rnd).fit()
 model.summary().tables[1]

首先,关于信贷限额的参数估计值变高了一些。但更重要的是,标准误差减小了。这是因为 credit_score2 对结果 Y 有很好的预测作用,它将有助于线性回归的去噪步骤。在 FWL 的最后一步,由于包含了 credit_score2,Y 的方差将减小,对 T 进行回归将得到更精确的结果。

这是线性回归的一个非常有趣的特性。它表明,线性回归不仅可以用来调整混杂因素,还可以用来减少噪音。例如,如果您的数据来自适当随机化的 A/B 测试,您就不需要担心偏差问题。但您仍然可以使用回归作为降噪工具。只需包含对结果有高度预测性的变量(并且不会引起选择偏差)即可。

Noise Inducing Control

就像控制可以减少噪音一样,它们也可以增加噪音。例如,再次考虑条件随机实验的情况。但这次,您感兴趣的是信用额度对消费的影响,而不是对风险的影响。和上一个例子一样,信用额度是随机分配的,给定的是 credit_score1。但这次,我们假设credit_score1 不是混杂因素。它是干预的原因,但不是结果的原因。这个数据生成过程的因果图如下所示:

这意味着您不需要对credit_score1 进行调整,就能得到信用额度对消费的因果效应。单变量回归模型就可以了。在这里,我保留了平方根函数,以考虑干预反应函数的凹性:

 spend_data_rnd = pd.read_csv("data/spend_data_rnd.csv")
 model = smf.ols("spend ~ np.sqrt(credit_limit)",
 data=spend_data_rnd).fit()
 model.summary().tables[1]

 但是,如果你确实包括了credit_score1_buckets,会发生什么呢?

 model = smf.ols("spend~np.sqrt(credit_limit)+C(credit_score1_buckets)",
 data=spend_data_rnd).fit()
 model.summary().tables[1]

您可以看到,它增加了标准误差,扩大了因果参数的置信区间。这是因为,OLS 喜欢干预方差大的情况。但是如果控制了一个可以解释干预的协变量,就会有效地降低干预的方差。

Feature Selection: A Bias-Variance Trade-Off

在现实中,很难出现协变量导致干预而不导致结果的情况。最有可能出现的情况是,有很多混杂因素同时导致 T 和 Y,只是程度不同而已。在图  中,X1 是 T 的强致因,但 Y 的弱致因;X3 是 Y 的强致因,但 T 的弱致因;X2 处于中间位置,如每个箭头的粗细所示。

在这种情况下,您很快就会陷入进退两难的境地。一方面,如果您想摆脱所有偏差,就必须包括所有协变量;毕竟,它们是需要调整的混杂因素。另一方面,对干预原因进行调整会增加你的估计器的方差。

为了了解这一点,让我们根据图  中的因果图来模拟数据。这里,真实的 ATE 是 0.5。如果您试图在控制所有混杂因素的情况下估计这一效应,估计值的标准误差会过高,无法得出任何结论。

 np.random.seed(123)
 n = 100
 (x1, x2, x3) = (np.random.normal(0, 1, n) for _ in range(3))
 t = np.random.normal(10*x1 + 5*x2 + x3)
 # ate = 0.05
 y = np.random.normal(0.05*t + x1 + 5*x2 + 10*x3, 5)
 df = pd.DataFrame(dict(y=y, t=t, x1=x1, x2=x2, x3=x3))
 smf.ols("y~t+x1+x2+x3", data=df).fit().summary().tables[1]

 如果您知道其中一个混杂因素对干预的预测作用很强,而对结果的预测作用很弱,您可以选择将其从模型中剔除。在本例中,这就是 X1。现在,请注意!这将使您的估计出现偏差。但是,如果这也能显著降低方差,也许这就是值得付出的代价:

 smf.ols("y~t+x2+x3", data=df).fit().summary().tables[1]

底线是,在模型中包含(调整)的混杂因素越多,因果关系估计值的偏差就越小。但是,如果您包含的变量对干预结果的预测作用较弱,但对治疗的预测作用较强,那么这种偏差的减少将以方差的增加为代价。同理可证,有时为了减少方差而接受一点偏差是值得的。此外,您应该非常清楚,并非所有的混杂因素都是相同的。当然,因为 T 和 Y 的关系,所有的混杂因素都是常见的。但如果它们对治疗的解释太多,而对干预结果的解释几乎没有,那么你真的应该考虑将其从调整中剔除。这适用于回归,但也适用于其他调整策略,如倾向得分加权

遗憾的是,混杂因素对干预的解释能力应该有多弱,才能证明剔除它是合理的,这在因果推理中仍是一个未决问题。不过,这种偏差与方差的权衡还是值得了解的,因为它有助于您理解和解释线性回归的情况。

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

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

相关文章

系统提示我未定义与 ‘double‘ 类型的输入参数相对应的函数 ‘finverse‘,如何解决?

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

新火种AI|AI搜索挑战百度谷歌,重塑信息检索的市场?

作者:一号 编辑:美美 AI正在颠覆传统的搜索引擎市场。 随着ChatGPT等大型语言模型的火爆,AI搜索技术成为了公众和业界关注的焦点。这些技术不仅能够提供快速、准确的信息检索,还能够通过自然语言处理技术理解用户的复杂查询&am…

步进电机(STM32+28BYJ-48)

一、简介 步进电动机(stepping motor)把电脉冲信号变换成角位移以控制转子转动的执行机构。在自动控制装置中作为执行器。每输入一个脉冲信号,步进电动机前进一步,故又称脉冲电动机。步进电动机多用于数字式计算机的外部设备&…

vue的学习--day3

1、尝试使用json文件模拟增删改查 json server:准备一份自己的数据(这里我用的是老师给的)。 转到d盘,然后打开json文件: 下面模拟增删改查: 借助工具postman或apifox或apipost: 这里我下载了apifox&…

养老院生活管理系统

摘要 随着全球范围内人口老龄化趋势的日益加剧,养老院作为老年人生活的重要场所,其生活管理问题也显得愈发突出和重要。为了满足养老院在日常生活管理、老人健康监护、服务人员管理等多方面的需求,提高管理效率和服务质量。决定设计并实现了…

鸿蒙小案例-自定义键盘

一个自定义键盘 效果 完成简单的26键中英文输入 使用: Entry Component struct IndexInput {State text: string inputController: TextInputController new TextInputController()//自定义键盘关闭事件hideClick(){this.inputController.stopEditing()}//自定义…

Java SpringBoot MongoPlus 使用MyBatisPlus的方式,优雅的操作MongoDB

Java SpringBoot MongoPlus 使用MyBatisPlus的方式,优雅的操作MongoDB 介绍特性安装新建SpringBoot工程引入依赖配置文件 使用新建实体类创建Service测试类进行测试新增方法查询方法 官方网站获取本项目案例代码 介绍 Mongo-Plus(简称 MP)是一…

Windows 11 安装 Python 3.11 完整教程

Windows 11 安装 Python 3.11 完整教程 一、安装包安装 1. 下载 Python 3.11 安装包 打开浏览器,访问 Python 官方下载页面。点击“Download Python 3.11”,下载适用于 Windows 的安装包(Windows installer)。 2. 安装 Python 3.11 运行下载的安装包 python-3.11.x-amd6…

(论文版)深度学习 | 基于 VGG16-UNet 语义分割模型的猫狗图像提取研究

Hi,大家好,我是半亩花海。本实验本项目基于 VGG16-UNet 架构,利用 Labelme 标注数据和迁移学习,构建高效准确的猫狗图像分割模型。通过编码器-解码器结构(特征提取-上采样)提升分割精度,适应不同…

Spring学习03-[Spring容器核心技术IOC学习进阶]

IOC学习进阶 Order使用Order改变注入顺序实现Ordered接口,重写getOrder方法来改变自动注入顺序 DependsOn使用 Lazy全局设置-设置所有bean启动时候懒加载 Scopebean是单例的,会不会有线程安全问题 Order 可以改变自动注入的顺序 比如有个animal的接口&a…

爬虫-豆瓣电影排行榜

获取数据 requests库 获取数据环节需要用到requests库。安装方式也简单 pip install requests 爬取页面豆瓣读书 Top 250 用requests库来访问 import requests res requests.get(https://book.douban.com/top250/) 解析: 导入requests库调用了requests库中的…

网络IO模型之多路复用器.md

多路复用是什么?怎么理解? 本文主要涉及为 程序中处理网络IO时的模型,对于系统内核而言网络IO模型。这里只做普及使用 前置知识,什么是IO?怎么理解IO IO其实就是In和Out。中文翻译是输入和输出,只要涉及到输…

SQL二次注入原理分析

二次注入在测试的时候比较少见,或者说很难被测出来,因为测的时候首先要去找注入的位置,其次是去判断第一次执行的SQL语句,然后还要去判断第二次进行调用的 SQL 语句。而关键问题就出在第二次的调用上面。 下面以一个常用过滤方法…

mmaction2版本适配(Linux)

从cuda到mmcv保姆式教程 (数十年踩坑经验,跟着我做,版本不会错~) 如果有补充,请评论区评论,后续填坑! cuda11.3 下载安装包 wget https://developer.download.nvidia.com/compute/cuda/11.3…

【Linux】多线程(互斥 同步)

我们在上一节多线程提到没有任何保护措施的抢票是会造成数据不一致的问题的。 那我们怎么办? 答案就是进行加锁。 目录 加锁:认识锁和接口:初始化:加锁 && 解锁:全局的方式:局部的方式&#xff1a…

go 学习 之 HTTP微服务示例

1. 背景 学习ing 2. 创建文件:server.go go package mainimport ("github.com/gogf/gf/contrib/registry/file/v2""github.com/gogf/gf/v2/frame/g""github.com/gogf/gf/v2/net/ghttp""github.com/gogf/gf/v2/net/gsvc"&…

Mac 运行 Windows 软件,Parallels Desktop 19和 CrossOver 24全面对比

Parallels Desktop 和 CrossOver 都是能满足你「在 Mac 上运行 Windows 软件」需求的工具。可能很多人都已经知道 Parallels Desktop 是「虚拟机」,但 CrossOver 其实并不是「虚拟机」。这两款软件有相同的作用,但由于实现原理的不同,两者也有…

在线签约如何选择?2024年10款顶级app大比拼

支持电子合同签约的10大app:e签宝、上上签、DocuSign、契约锁、Adobe Sign、法大大、SignNow、安心签、HelloSign、PandaDoc。 无论是企业之间的交易还是个人服务合同,线上电子合同签约提供了一种便捷、高效且安全的方式来处理法律文档。本文将介绍几款优…

django学习入门系列之第四点《案例 博客案例》

文章目录 container面板案例 博客案例往期回顾 container 堆叠到两边 <div class"container-fluid clearfix"><div class"col-sm-9">1</div><div class"col-sm-3">2</div> </div>放在中间 <div clas…

-bash: /snap/bin/docker: 没有那个文件或目录

-bash: /snap/bin/docker: 没有那个文件或目录 解决办法 export PATH$PATH:/usr/bin/docker然后&#xff0c;重新加载配置文件 source ~/.bashrc