【Python实战因果推断】25_倾向分5

news2024/11/27 12:51:26

目录

Stabilized Propensity Weights

Pseudo-Populations


Stabilized Propensity Weights

将经过处理的样本按 1/P(T=1 | X) 加权,就会产生一个与原始样本大小相同的伪群体,但就好像每个人都经过了处理。这意味着权重之和与原始样本大小大致相同。同样,对照组的权重为 1/P(T=0 | X),创建的伪群体就好像每个人都有对照组一样。

如果您有机器学习背景,您可能会将 IPW 视为重要性抽样的一种应用。在重要度抽样中,您的数据来自原点分布 q(x),但您希望从目标分布 p(x) 中进行抽样。将此引入 IPW 的语境,用 1/P(T=1|X)  对干预进行加权,实质上意味着您正在获取来自 P(T=1 | X) 的数据--如果 X 也会导致 Y,那么这些数据就是有偏差的--然后重建 P(T=1)=1,其中的干预概率不依赖于 X,因为它只是 1。这也解释了为什么重新加权后的样本表现得好像原始样本中的每个人都接受了干预。

另一种方法是注意到干预和未干预的权重之和与原始样本量非常接近:

 print("Original Sample Size", data_ps.shape[0])
 print("Treated Pseudo-Population Sample Size", sum(weight_t))
 print("Untreated Pseudo-Population Sample Size", sum(weight_nt))

 Original Sample Size 10391
 Treated Pseudo-Population Sample Size 10435.089079197916
 Untreated Pseudo-Population Sample Size 10354.298899788304

只要权重不是太大,这样做是没有问题的。但如果干预的可能性很小,P(T|X) 就可能很小,这可能会给计算带来一些问题。一个简单的解决方案是使用干预的边际概率 P(T=t) 来稳定权重: 

w=\frac{P(T=t)}{P(T=t|X)}

有了这些权重,低概率干预的权重就不会很大,因为小分母会被同样小的分子所平衡。这不会改变您之前得到的结果,但在计算上更加稳定。此外,稳定的权重会重建一个伪群体,在这个伪群体中,治疗组和对照组的有效规模(权重之和)分别与原始治疗组和对照组的有效规模相匹配。再次与重要度抽样做个比较,使用稳定化权重,你是来自一个干预取决于 X、P(T=t|X) 的分布,但重建的是边际 P(T=t)

 p_of_t = data_ps["intervention"].mean()
 t1 = data_ps.query("intervention==1")
 t0 = data_ps.query("intervention==0")
 weight_t_stable = p_of_t/t1["propensity_score"]
 weight_nt_stable = (1-p_of_t)/(1-t0["propensity_score"])
 print("Treat size:", len(t1))
 print("W treat", sum(weight_t_stable))
 print("Control size:", len(t0))
 print("W treat", sum(weight_nt_stable))
 
 Treat size: 5611
 W treat 5634.807508745978
 Control size: 4780
 W treat 4763.116999421415

同样,这种稳定化保持了原始倾向得分的平衡特性。您可以验证它得出的 ATE 估计值与之前的完全相同:

 nt = len(t1)
 nc = len(t0)
 y1 = sum(t1["engagement_score"]*weight_t_stable)/nt
 y0 = sum(t0["engagement_score"]*weight_nt_stable)/nc
 print("ATE: ", y1 - y0)
 
 ATE: 0.26597870880761176

Pseudo-Populations

我已经提到过伪群体,但更好地理解它们将有助于你理解 IPW 如何消除偏差。让我们先从P(T|X) 的角度思考一下偏倚的含义。如果干预是以概率随机分配的,比如说 10%,那么你就知道干预不会依赖于 X,或者说 P(T|X)=P(T)=10\%。如果确实存在这种偏差,那么某些单位获得干预的几率就会更高。例如,与团队参与度不高的管理者相比,已经拥有一支非常投入的团队、非常有激情的管理者更有可能参加培训(e(T) 值更高)。

如果按干预状态绘制 \hat{e}(x) 的分布图,由于管理人员参加培训的机会不一样(干预不是随机的),因此受干预的个体的 \hat{e}(x)会更高。 从下图左边的图中可以看出,\hat{e}(x)的干预分布图有点向右偏移:

与右边的图形成对比。这里,在低 \hat{e}(x) 区域,治疗单位加权,对照单位减权。同样,当 \hat{e}(x) 较高时,治疗单位的权重降低,而对照组的权重提高。这些变化使得两个分布重叠。它们重叠的事实意味着,在加权数据上,干预单位和对照单位获得干预或对照的机会相同。换句话说,干预分配看起来与随机分配一样好(当然,假设没有未观察到的混杂因素)。

这也说明了 IPW 在做什么。通过获取被治疗者的结果 Y|T=1,并对那些 \hat{e}(x) 值较低的结果进行加权,而对那些 \hat{e}(x) 值较高的结果进行减权,您就可以得出 Y_1|T=0 的结果。类似的论证还可以说明,通过对对照样本重新加权 1/(1-P(T=1)),您也在试图了解 Y_0|T=1

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

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

相关文章

可视化作品集(08):能源电力领域

能源电力领域的可视化大屏,有着巨大的用武之地,不要小看它。 监控能源生产和消耗情况: 通过可视化大屏,可以实时监控能源生产和消耗情况,包括发电量、能源供应情况、能源消耗情况等,帮助管理者及时了解能…

llama2阅读: logits是什么?

Logits是一个在深度学习中,几乎一直都有的概念,它意味着模型unnormalized final scores. 然后你可以通过softmax得到模型针对你class的概率分布。 而在llama2的代码中,同样有logits的使用,那么针对llama2,logits的作用…

力扣考研经典题 反转链表

核心思想 头插法: 不断的将cur指针所指向的节点放到头节点之前,然后头节点指向cur节点,因为最后返回的是head.next 。 解题思路 1.如果头节点是空的,或者是只有一个节点,只需要返回head节点即可。 if (head null …

触底加载的两种思路(以vue3前端和nodejs后端为例)

一:首先,nodejs后端的代码都是一样的. 需要前端返回page参数,然后nodejs逻辑进行处理,截取页数和每页条数和总条数, 总条数用来作为判断是否有数据的条件,也可以不用,注意看下文 一:不用获取容器高度的. pinia中进行的axios请求处理 在vue文件中进行pinia中数据的导入,继续进…

初学Spring之 AOP 面向切面编程

AOP(Aspect Oriented Programming)面向切面编程 通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术 是面向对象(OOP)的延续 AOP 在 Spring 中的作用: 1.提供声明式事务 2.允许用户自定义切面 导…

ISO 50001:企业节能减排与可持续发展的双赢之道

在全球气候变化日益严峻、资源日益稀缺的今天,能源管理已成为企业可持续发展不可或缺的一部分。ISO 50001作为国际能源管理体系标准,正在全球范围内被越来越多的企业采纳。它不仅帮助企业提高能源效率,减少能源消耗,还在多个方面对…

Java的基础语法

叠甲:以下文章主要是依靠我的实际编码学习中总结出来的经验之谈,求逻辑自洽,不能百分百保证正确,有错误、未定义、不合适的内容请尽情指出! 文章目录 1.第一份程序1.1.代码编写1.2.代码运行1.2.1.命令行编译1.2.2.IEDA…

存储结构与管理磁盘

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 目录 一、一切从“/”开始 二、物理设备的命名规则 三、文件系统与数据资料 四、挂载硬件设备 五、添加硬盘设备 六、添加交换分区 七、磁盘容…

Linux系统的介绍和常用命令

文章目录 介绍常用命令文件和目录操作文件内容操作系统管理命令网络命令 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:Liunx系统 ✨文章内容:Liunx系统介绍 &…

C语言 | Leetcode C语言题解之第217题存在重复元素

题目&#xff1a; 题解&#xff1a; struct hashTable {int key;UT_hash_handle hh; };bool containsDuplicate(int* nums, int numsSize) {struct hashTable* set NULL;for (int i 0; i < numsSize; i) {struct hashTable* tmp;HASH_FIND_INT(set, nums i, tmp);if (tm…

css导航栏遮挡住垂直滚动条,以及100vw引起的横向滚动条出现

滚动条被导航栏遮住问题 解决前 解决过程 一开始想要body的宽度为整个视口的宽度 100vw view width 不过出现了横向滚动条 于是乎想着给所有元素增加 x轴溢出时隐藏 问题解决&#xff0c;不过顶部的导航栏由于设置了fixed 又把右边导航栏挡住了 可能因为 body 占100视口宽度…

简单且循序渐进地查找软件中Bug的实用方法

“Bug”这个词常常让许多开发者感到头疼。即使是经验丰富、技术娴熟的开发人员在开发过程中也难以避免遭遇到 Bug。 软件中的故障会让程序员感到挫败。我相信在你的软件开发生涯中&#xff0c;也曾遇到过一些难以排查的问题。软件中的错误可能会导致项目无法按时交付。因此&…

【python】python当当数据分析可视化聚类支持向量机预测(源码+数据集+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

【C++】map和set详解

目录 1. 关联式容器 2. 键值对pair 3. 树形结构的关联式容器 4. set 4.1 set的介绍 4.2 set的构造 4.3 set的迭代器 4.4 set的容量 4.5 set的常用函数 5. multiset 6. map 6.1 map的介绍 6.2 map的构造 6.3 map的迭代器 6.4 map的容量 6.5 map的operator[] 6.6…

【学习笔记】程序设计竞赛

程序设计竞赛 文章目录 程序设计竞赛0x00 基本操作指南0x01 算法分析0x02 STL和基本数据结构栈队列集合map 0x03 排序插入排序归并排序&#xff08;Merge Sort)快速排序 0x04 搜索技术BFSDFS回溯与剪枝 深度迭代ID A*A star双向广搜 0x05 递推方程0x06 高级数据结构并查集二叉树…

STM32快速复习(八)SPI通信

文章目录 前言一、SPI是什么&#xff1f;SPI的硬件电路&#xff1f;SPI发送的时序&#xff1f;二、库函数二、库函数示例代码总结 前言 SPI和IIC通信算是我在大学和面试中用的最多&#xff0c;问的最多的通信协议 IIC问到了&#xff0c;一般SPI也一定会问到。 SPI相对于IIC多了…

HTTP请求响应/与HTTPS区别

HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是用于在计算机网络上传输信息的两种协议。 HTTP&#xff08;Hypertext Transfer Protocol&#xff09;: HTTP 是一种用于传输超文本的应用层协议…

Go 依赖注入设计模式

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

前后端分离系统

前后端分离是一种现代软件架构模式&#xff0c;特别适用于Web应用开发&#xff0c;它强调将用户界面&#xff08;前端&#xff09;与服务器端应用逻辑&#xff08;后端&#xff09;相分离。两者通过API接口进行数据交互。这种架构模式的主要优势在于提高开发效率、维护性和可扩…

安卓虚拟位置修改

随着安卓系统的不断更新&#xff0c;确保软件和应用与最新系统版本的兼容性变得日益重要。本文档旨在指导用户如何在安卓14/15系统上使用特定的功能。 2. 系统兼容性更新 2.1 支持安卓14/15&#xff1a;更新了对安卓14/15版本的支持&#xff0c;确保了软件的兼容性。 2.2 路…