【Python实战因果推断】22_倾向分2

news2024/11/28 18:53:11

目录

Propensity Score

Propensity Score Estimation

Propensity Score and ML

Propensity Score and Orthogonalization


Propensity Score

倾向加权法围绕倾向得分的概念展开,其本身源于这样一种认识,即不需要直接控制混杂因素 X 来实现条件独立性 (Y_1,Y_0)\perp T|X。相反,只需控制一个估计 E[T|X] 的平衡分值即可。这个平衡分数通常就是干预的条件概率 P(T|X),也称为倾向分数 e(x)

倾向得分可视为一种降维技术。X 的维度可能非常高,与其以 X 为条件,不如直接以倾向得分为条件,以阻止流经 X 的后门路径:(Y_1,Y_0)\perp T|P(x)

这有一个正式的证明。这并不复杂,但有点超出本书的范围。在这里,你可以用更直观的方法来解决这个问题。倾向得分是接受干预的条件概率,对吗?因此,你可以把它看成是某种将 X 转化为干预 T 的函数。倾向得分是变量 X 和干预 T 之间的中间值:这就是它在因果图中的样子:

在这张图中,如果你知道 e(x) 是什么,那么仅凭 X 就无法进一步了解 T 的信息。这意味着,控制 e(x) 与直接控制 X 的效果是一样的。

从经理培训计划的角度来考虑。接受培训的经理和未接受培训的经理最初并不具有可比性,因为直接下属参与度更高的经理更有可能参加培训。但是,如果取两个经理,一个来自干预组,一个来自对照组,但接受干预的概率相同,他们就具有可比性了。想想看。如果他们接受干预的概率完全相同,那么其中一个接受干预而另一个没有接受干预的唯一原因就是纯属偶然在倾向得分相同的情况下,干预与随机一样好

Propensity Score Estimation

在理想情况下,您会得到真实倾向得分 e(x)。 在条件随机实验中,分配机制是非确定的,但却是已知的。然而,在大多数情况下,分配干预的机制是未知的,您需要用 e(x) 的估计值来替代真实倾向得分。

既然是二元干预,那么估计 e(x) 的最佳方法就是使用逻辑回归。要使用 statsmodels 拟合 logistic 回归,只需将方法 ols 改为 logit 即可:

 ps_model = smf.logit("""intervention ~ 
 tenure + last_engagement_score + department_score
 + C(n_of_reports) + C(gender) + C(role)""", data=df).fit(disp=0)

将估计的倾向分数保存在数据框架中;在接下来的章节中,你会经常用到它,我将向你展示如何使用它以及它的作用:

 data_ps = df.assign(
 propensity_score = ps_model.predict(df),
 )
 data_ps[["intervention", "engagement_score", "propensity_score"]].head()

Propensity Score and ML

另外,您也可以使用机器学习模型来估算倾向得分。但这需要您更加谨慎。首先,您必须确保机器学习模型输出的是经过校准的概率预测。其次,您需要使用折外预测,以避免过度拟合造成的偏差。您可以使用 sklearn 的校准模块来完成第一项任务,使用模型选择模块中的 cross_val_predict 函数来完成后一项任务。

Propensity Score and Orthogonalization

如果您还记得上一章的内容,根据 FLW 定理,线性回归也做了与倾向得分估计非常相似的事情。因此,与倾向得分估计非常相似,OLS 也在对治疗分配机制进行建模。这意味着您也可以在线性回归中使用倾向得分 \hat{e}(X) 来调整混杂因素 X:

 model = smf.ols("engagement_score ~ intervention + propensity_score",
 data=data_ps).fit()
 model.params["intervention"]
 
 0.26331267490277066

用这种方法得到的 ATE 估计值与之前用干预和混杂因素 X 拟合线性模型得到的 ATE 估计值非常相似。唯一不同的是,OLS 使用线性回归对 T 进行建模,而该倾向得分估计值是通过逻辑回归得到的。

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

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

相关文章

ARM架构和Intel x86架构

文章目录 1. 处理器架构 2. ARM架构 3. Intel x86架构 4. 架构对比 1. 处理器架构 处理器架构是指计算机处理器的设计和组织方式,它决定了处理器的性能、功耗和功能特性。处理器架构影响着从计算机系统的硬件设计到软件开发的各个方面。在现代计算技术中&#…

暑期备考2024年汉字小达人:吃透18道选择题真题(持续)

结合最近几年的活动安排,预计2024年第11届汉字小达人比赛还有3个多月就启动。那么孩子如何在2024年的汉字小达人活动中取得好成绩呢?根据以往成绩优秀学员的经验,利用暑假集中备考效率最高。把汉字小达人的备考纳入到暑期学习计划&#xff0c…

【Selenium配置】WebDriver安装浏览器驱动(ChromeEdge)

【Selenium配置】WebDriver安装浏览器驱动(Chrome&Edge) 文章目录 【Selenium配置】WebDriver安装浏览器驱动(Chrome&Edge)Chrome确认Chrome版本下载对应driver把解压后的chromedriver文件放在chrome安装目录下&#xff0…

blender 纹理绘制-贴花方式

贴画绘制-1分钟blender_哔哩哔哩_bilibili小鸡老师的【Blender风格化角色入门教程】偏重雕刻建模https://www.cctalk.com/m/group/90420100小鸡老师最新的【风格化角色全流程进阶教程】偏重绑定。早鸟价进行中!欢迎试听https://www.cctalk.com/m/group/90698829, 视…

STM32-TIM定时器

本内容基于江协科技STM32视频内容,整理而得。 文章目录 1. TIM1.1 TIM定时器1.2 定时器类型1.3 基本定时器1.4 通用定时器1.4 高级定时器1.5 定时中断基本结构1.6 预分频器时序1.7 计数器时序1.8 计数器无预装时序1.9 计数器有预装时序1.10 RCC时钟树 2. TIM库函数…

基于单片机的多功能电子时钟的设计

摘要:提出了一种基于单片机的多功能电子时钟的设计方法,以 AT89C52单片机作为系统的主控芯片,采用DS1302作为时钟控制芯片,实现日期时钟显示并且提供精准定时的功能。此外,还可经由DHT22所构成的温湿度传感电路&#x…

JVM原理(十九):JVM虚拟机内存模型

1. 硬件的效率与一致性 数据不安全的原因:缓存一致性的问题 共享内存多核系统:在多路处理器系统中,每个处理器都有自己的高速缓存,而他们又共享同一主内存。 线程先后执行结果不一致问题:除了增加高速缓存之外&#…

Kotlin算法:把一个整数向上取值为最接近的2的幂指数值

Kotlin算法&#xff1a;把一个整数向上取值为最接近的2的幂指数值 import kotlin.math.ln import kotlin.math.powfun main(args: Array<String>) {val number intArrayOf(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)number.forEach {println("$…

IT高手修炼手册(3)程序员命令

一、前言 程序员在日常工作中&#xff0c;掌握一些高效的快捷键可以大大提高编码和开发效率。 二、通用快捷键 文本操作Ctrl A&#xff1a;全选当前页面内容 Ctrl C&#xff1a;复制当前选中内容 Ctrl V&#xff1a;粘贴当前剪贴板内的内容 Ctrl X&#xff1a;剪切当前选中…

【基于R语言群体遗传学】-8-代际及时间推移对于变异的影响

上一篇博客&#xff0c;我们学习了在非选择下&#xff0c;以二项分布模拟遗传漂变的过程&#xff1a;【基于R语言群体遗传学】-7-遗传变异&#xff08;genetic variation&#xff09;-CSDN博客 那么我们之前有在代际之间去模拟&#xff0c;那么我们就想知道&#xff0c;遗传变…

Java版Flink使用指南——安装Flink和使用IntelliJ制作任务包

大纲 安装Flink操作系统安装JDK安装Flink修改配置启动Flink测试 使用IntelliJ制作任务包新建工程Archetype 编写测试代码打包测试 参考资料 在《0基础学习PyFlink》专题中&#xff0c;我们熟悉了Flink的相关知识以及Python编码方案。这个系列我们将使用相对主流的Java语言&…

SQL Server 2022 中的 Tempdb 性能改进非常显著

无论是在我的会话中还是在我写的博客中&#xff0c;Tempdb 始终是我的话题。然而&#xff0c;当谈到 SQL Server 2022 中引入的重大性能变化时&#xff0c;我从未如此兴奋过。他们解决了我们最大的性能瓶颈之一&#xff0c;即系统页面闩锁并发。 在 SQL Server 2019 中&#x…

python函数和c的区别有哪些

Python有很多内置函数&#xff08;build in function&#xff09;&#xff0c;不需要写头文件&#xff0c;Python还有很多强大的模块&#xff0c;需要时导入便可。C语言在这一点上远不及Python&#xff0c;大多时候都需要自己手动实现。 C语言中的函数&#xff0c;有着严格的顺…

【pyhton学习】深度理解类和对象

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 一、一切皆对象1.1 对象的概念1.2 如何创建类对象1.3 类型检测 二、属性与方法2.1 如何查看属性与方法2.2 属性和方法…

14-39 剑和诗人13 - 顶级大模型测试分析和建议

​​​​​ 随着对高级语言功能的需求不断飙升&#xff0c;市场上涌现出大量语言模型&#xff0c;每种模型都拥有独特的优势和功能。然而&#xff0c;驾驭这个错综复杂的生态系统可能是一项艰巨的任务&#xff0c;开发人员和研究人员经常面临选择最适合其特定需求的模型的挑战。…

SpringBoot新手快速入门系列教程七:基于一个低配centoos服务器,如何通过宝塔面板部署一个SpringBoot项目

1&#xff0c;如何打包一个项目 通过IDEA自带的命令行&#xff0c;执行 ./gradlew clean build 2&#xff0c;检查生成的JAR文件 进入 build/libs 目录&#xff0c;你应该会看到一个类似 helloredis-0.0.1-SNAPSHOT.jar 的文件。 3&#xff1a;运行生成的JAR文件 你可以使…

【工具】豆瓣自动回贴软件

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 相比于之前粗糙丑陋的黑命令框版本&#xff0c;这个版本新增了UI界面&#xff0c;从此可以不需要再挨个去翻配置文件了。 另外&#xff0c;升级了隐藏浏…

Java基础(六)——继承

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 ⚡开源项目&#xff1a; rich-vue3 &#xff08;基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL&#xff09; &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1…

Blazor SPA 的本质是什么以及服务器端渲染如何与 Blazor 的新 Web 应用程序配合使用

Blazor 通常被称为单页应用程序 (SPA) 框架。当我第一次开始使用 Blazor 时&#xff0c;我对 SPA 的含义、组件如何为 SPA 架构做出贡献以及所有这些如何与交互性联系在一起感到困惑。 今天&#xff0c;我将解答大家可能关心的三个问题&#xff1a; 什么是 SPA&#xff1f;了…

A Threat Actors 出售 18 万名 Shopify 用户信息

BreachForums 论坛成员最近发布了涉及 Shopify 的重大数据泄露事件。 据报道&#xff0c;属于近 180,000 名用户的敏感数据遭到泄露。 Shopify Inc. 是一家总部位于安大略省渥太华的加拿大公司。 开发和营销同名电子商务平台、Shopify POS 销售点系统以及专用于企业的营销工…