【Python实战因果推断】23_倾向分3

目录

Propensity Score Matching

Inverse Propensity Weighting


Propensity Score Matching

另一种控制倾向得分的常用方法是匹配估计法。这种方法搜索具有相似可观测特征的单位对,并比较接受干预与未接受干预的单位的结果。如果您有数据科学背景,您可以将匹配视为一种简单的 K 最近邻(KNN)算法,其中 K=1 。首先,使用倾向得分作为唯一特征,在接受治疗的单位上拟合一个 KNN 模型,并用它来推算对照组的 Y1。然后,在未治疗单位上拟合一个 KNN 模型,用它来推算治疗单位的 Y0。在这两种情况下,推算值都只是匹配单位的结果,而匹配是基于倾向得分的:

 from sklearn.neighbors import KNeighborsRegressorT = "intervention"X = "propensity_score"Y = "engagement_score"treated = data_ps.query(f"{T}==1")untreated = data_ps.query(f"{T}==0")mt0 = KNeighborsRegressor(n_neighbors=1).fit(untreated[[X]],untreated[Y])mt1 = KNeighborsRegressor(n_neighbors=1).fit(treated[[X]], treated[Y])predicted = pd.concat([# find matches for the treated looking at the untreated knn modeltreated.assign(match=mt0.predict(treated[[X]])),# find matches for the untreated looking at the treated knn modeluntreated.assign(match=mt1.predict(untreated[[X]]))])predicted.head()

 一旦你有了一个匹配的每个单位,你可以估计的ATE:ATE=\frac1N\sum\left\{\left(Y_i-Y_{jm}(i)\right)T_i+\left(Y_{jm}(i)-Y_i\right)(1-T_i)\right\},

其中Y_{jm}(i)是治疗组不同于i的单位i的匹配值:

 np.mean((predicted[Y] - predicted["match"])*predicted[T]+ (predicted["match"] - predicted[Y])*(1-predicted[T]))0.28777443474045966

老实说,我不是这个估计器的忠实粉丝,第一,因为它有偏差;第二,因为它的方差很难推导;第三,因为我在数据科学方面的经验让我对 KNN 产生了怀疑,主要是因为它在处理高维 X 时效率很低。我在这里教授这种方法,主要是因为它非常有名,你可能会在这里或那里看到它。 

Inverse Propensity Weighting

还有一种被广泛使用的倾向得分利用方法,我认为它更可取--反倾向加权法(IPW)。这种方法根据干预的反概率对数据重新加权,可以使干预在重新加权的数据中看起来像是随机分配的。为此,我们通过 1/P(T=t|X) 对样本进行重新加权,以创建一个伪人群,近似于如果每个人都接受了 t 治疗会发生的情况:E\bigl[Y_t\bigr]=E\biggl[\frac{\mathbb{1}\left(T=t\right)Y}{P(T=t\mid X)}\biggr]

再说一遍,证明这一点并不复杂,但这不是重点。因此,让我们坚持直觉。假设你想知道 Y1 的期望值,即如果所有经理都参加了培训,平均参与度会是多少。为了得到这个期望值,你需要将所有接受干预的经理人按照接受干预的反概率进行排序。这样,那些接受干预的概率很低,但还是接受了培训的人的权重就会很高。从本质上讲,你是在提高罕见干预案例的权重。

这很有道理,对吗?如果一个接受干预的个体接受治疗的概率很低,那么这个个体看起来就很像未接受干预的个体。这一定很有趣!如果未接受治疗的个体接受了治疗,Y_{1}|T=0,那么这个看起来像未接受治疗的个体很可能对未接受治疗的个体会发生的情况有很大的参考价值。对照组也是如此。如果对照组看起来很像治疗组,那么它很可能是 Y_{0}|T=1 的良好估计值,所以你要给它更大的权重。

以下是管理培训数据的处理过程,权重表示为每个点的大小:

请注意,当 \hat{e}(X) 较低时,接受过培训的经理人(T = 1)的权重较高。你给予了那些看起来像未接受过培训的经理人很高的权重。相反,当 \hat{e}(X) 较高或 \hat{P}(T=0|X) 较低时,未接受培训的经理人的权重较高。在这种情况下,您就会高度重视与已治疗者相似的未治疗者。

如果您可以使用倾向得分来恢复平均潜在结果,这也意味着您可以使用倾向得分来恢复 ATE:

ATE=E\bigg[\frac{\mathbb{1}\left(T=1\right)Y}{P(T=1\mid X)}\bigg]-E\bigg[\frac{\mathbb{1}\left(T=0\right)Y}{P(T=0\mid X)}\bigg]

这两种期望都可以用非常简单的代码从数据中估计出来:

 weight_t = 1/data_ps.query("intervention==1")["propensity_score"]weight_nt = 1/(1-data_ps.query("intervention==0")["propensity_score"])t1 = data_ps.query("intervention==1")["engagement_score"]t0 = data_ps.query("intervention==0")["engagement_score"]y1 = sum(t1*weight_t)/len(data_ps)y0 = sum(t0*weight_nt)/len(data_ps)print("E[Y1]:", y1)print("E[Y0]:", y0)print("ATE", y1 - y0)E[Y1]: 0.11656317232946772E[Y0]: -0.1494155364781444ATE 0.2659787088076121

此外,这个结果看起来与使用 OLS 得到的结果非常相似,这可以很好地检查您是否做错了什么。还值得注意的是,ATE 表达式可以简化如下:

ATE=E\bigg[Y\frac{T-e(x)}{e(x)(1-e(x))}\bigg]

果然,它产生的结果与以前完全相同:

 np.mean(data_ps["engagement_score"]* (data_ps["intervention"] - data_ps["propensity_score"])/ (data_ps["propensity_score"]*(1-data_ps["propensity_score"])))0.26597870880761226

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

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

相关文章

Python使用matplotlib绘制图像时,中文图例或标题无法正常显示问题

Python使用matplotlib绘制图像时,中文图例或标题无法显示问题解决方法 一、问题描述二、解决方法 欢迎学习交流! 邮箱: z…1…6.com 网站: https://zephyrhours.github.io/ 一、问题描述 Matplotlib库是Python中经常使用的绘图工…

【设计模式之美】策略模式实践:不同大小(采用不同的策略)文件进行排序

文章目录 一. 问题与解决思路二. 代码实现与分析1. 业务代码逻辑的架子2. 代码重构:使用策略模式来解耦代码逻辑 三. 进一步:满足开闭原则:使用注解或配置文件 设计原则和思想其实比设计模式更加普适和重要,掌握了代码的设计原则和思想&#…

如何注册微信公众号

如何注册微信公众号 如何注册一个微信公众号 😊📱摘要引言正文内容1. 准备工作内容定位和受众群体公众号名称和头像 2. 网页注册流程第一步:访问微信公众平台第二步:选择账户注册类型第三步:填写基本信息第四步&#x…

ChatGLM2-6B 运行代码解读(二)

目录 一、cli_demo.py 解读 3.1 transformers 3.2 AutoTokenizer.from_pretrained 函数 3.3 AutoModel.from_pretrained 函数 3.4 model.eval() 函数

树型结构数据存储实践

很多业务场景会遇到树形结构的数据,如公司的人员职级树、行政区划树等。 使用类似MySQL的数据库进行存储,需要将树形结构(二维)存储到行格式(一维)的db中。 本文介绍了树型结构数据存储的三种方式&#xf…

华为HCIP Datacom H12-821 卷27

1.单选题 IS-IS中地址的总长度最少为多少Byte? A、20 B、2 C、16 D、8 正确答案:D 解析: 地址总长度最长为13+6+1=20Byte,最短为1+6+1=8Byte。 2.多选题 下面哪些路由协议支持通过命令配置发布

Java视频点播网站

作者介绍:计算机专业研究生,现企业打工人,从事Java全栈开发 主要内容:技术学习笔记、Java实战项目、项目问题解决记录、AI、简历模板、简历指导、技术交流、论文交流(SCI论文两篇) 上点关注下点赞 生活越过…

[FreeRTOS 基础知识] 事件组 概念

文章目录 事件组 定义事件组 基本原理 事件组 定义 在实时操作系统(RTOS)中,事件组是一种用于任务间通信和同步的机制。事件组允许多个任务等待一个或多个事件的组合,当这些事件的组合满足特定条件时,任务可以被唤醒。…

vb.netcad二开自学笔记2:认识vs编辑器

认识一下宇宙第一编辑器的界面图标含义还是很重要的,否则都不知道面对的是什么还怎么继续? 一、VS编辑器中常见的图标的含义 变量 长方体:变量 局部变量 两个矩形块:枚举 预定义的枚举 紫色立方体:方法 橙色树状结构…

优惠券管理系统设计

优惠券管理系统的设计旨在高效地创建、分发、追踪和分析优惠券的使用情况,以促进销售、增强客户忠诚度并提升营销活动的效果。以下是设计一个高效优惠券管理系统的关键要素和步骤: 1. 需求分析与目标设定 明确业务目标:确定优惠券使用的具体…

shell中不常见的命令

** iconv 功能:将文件内容字符集转成其他字符集 常用选项: -l 列出所有已知的字符集 -f 原始文本编码 -t 输出编码 -o 输出到文件 -s 关闭警告 将文件内容转换 UTF8: # iconv -f gbk -t utf8 old.txt -o new.txt 将 csv 文件转换 GBK&…

直播电商如何实现分账?

随着直播电商的兴起,越来越多的企业开始选择通过直播平台来推广自己的产品。而在直播电商中,主播是非常重要的一环,他们的表现直接影响到产品的销售情况。因此,如何与主播合作,让他们更加积极地推广产品,成…

UE4_材质_材质节点_Fresnel

学习笔记,不喜勿喷,侵权立删,祝愿生活越来越好! 一、问题导入 在创建电影或过场动画时,你常常需要想办法更好地突显角色或场景的轮廓。这时你需要用到一种光照技术,称为边沿光照或边缘光照,它的…

Android动态设置系统音量最大值

产品需求 通过设定最大音量限制大屏声音输出,设置完后需要立即生效且需要记忆;以10%为递增状态,设置最大音量后,无论最大音量调节至多少百分比,音量条始终显示为100%(比如最大音量设置为80%,即…

Threejs环境、透视相机、坐标系、光源

文章目录 如何引入threejsnpm方式script方式script module方式 基本流程与坐标摄像机Geometry(几何体)和Material(材质)光源 如何引入threejs 对于很多刚刚上手threejs的朋友,可能第一步引入threejs就出问题了, 明明已经导入了,就是这样问题…

【搭建Nacos服务】centos7 docker从0搭建Nacos服务

前言 本次搭建基于阿里云服务器系统为(CentOS7 Linux)、Nacos(2.0.3)、Docker version 26.1.4 本次搭建基于一个新的云服务器 安装java yum install -y java-1.8.0-openjdk.x86_64安装驱动以及gcc等前置需要的命令 yum install …

【nvm管理nodejs版本,切换node指定版本】

nvm管理nodejs版本 nvm管理nodejs版本主要功能使用 nvm nvm管理nodejs版本 nvm(Node Version Manager)顾名思义node版本管理器,无须去node管网下载很多node安装程序;用于管理多个 Node.js 版本的工具。它允许你在同一台机器上同时安装和管理…

Appium启动APP时报错Security exception: Permission Denial

报错内容Security exception: Permission Denial: starting Intent 直接通过am命令尝试也是同样的报错 查阅资料了解到:android:exported | App quality | Android Developers exported属性默认false,所以android:exported"false"修改为t…

Eureka服务降级策略配置指南:确保微服务架构的弹性

在微服务架构中,服务之间的依赖关系非常普遍。当一个服务不可用时,可能会导致整个系统的故障。服务降级是一种提高系统可用性的策略,它允许服务在某些条件不满足时提供降级的响应。Eureka作为Netflix开源的服务发现框架,可以与Hys…

c与c++ 常用的字符与字符串处理的接口介绍:

在 C 和 C 中,字符与字符串处理是非常基础和常见的操作。以下是一些常用的接口和函数: C 字符串处理接口 字符处理: char 类型:C 中用于表示单个字符。 字符串是以 null 结尾的字符数组,通常使用 char[] 或 char* 表…