当前位置: 首页 > article >正文

【python因果库实战31】LaLonde 数据集匹配2

这里写目录标题使用匹配来估计结果并为 IPW 准备数据结论使用匹配来估计结果并为 IPW 准备数据我们这里有一些担忧即治疗组和对照组之间的数据可能过于不平衡以至于无法进行可靠的推断。虽然原则上倾向得分加权可以纠正协变量的不平衡但我们在这里看到这个数据存在一些相当严重的正则性positivity违反情况。当我们通过匹配数据进行条件化处理之后再使用逆概率加权IPW我们发现 IPW 在判断加权后的协变量不平衡方面更为有效。最有趣的是一旦协变量达到平衡效果的符号就会发生变化。我们先从使用单一邻居和有放回抽样的简单倾向得分匹配的结果开始看起。我们使用PropensityTransformer对象来计算倾向得分并将其添加到用于匹配的协变量中。fromcausallib.estimationimportIPW,Matchingfromcausallib.preprocessing.transformersimportPropensityTransformerfromsklearn.linear_modelimportLogisticRegressionimportpandasaspddeflearner():returnLogisticRegression(solverliblinear,max_iter5000,class_weightbalanced)如我们在 Faiss 笔记本中所展示的使用 Faiss 后端进行匹配要快得多。这需要安装 faiss-gpu 或 faiss-cpu。如果可用我们会自动选择 Faiss 后端否则会退回到 “sklearn”。try:fromcausallib.contrib.faissknnimportFaissNearestNeighbors knn_backendFaissNearestNeighborsexceptImportError:knn_backendsklearnpropensity_transformPropensityTransformer(include_covariatesFalse,learnerlearner())matcherMatching(propensity_transformpropensity_transform,with_replacementTrue,n_neighbors1,knn_backendknn_backend)matcher.fit(X,a,y)matcher.match(X,a)一种更好地理解我们的样本之间接近程度的方法是检查我们发现的匹配项的协变量。我们可以通过get_covariates_of_matches函数做到这一点。best_control_matchesmatcher.get_covariates_of_matches(1,0,X)best_treatment_matchesmatcher.get_covariates_of_matches(0,1,X)我们可以查看最差的匹配并看看哪些协变量没有匹配上。get_covariates_of_matchesDataFrame 包含了匹配项的协变量以及匹配的详细信息。这里我们将关注 “delta” 列best_control_matches.sort_values((match,distance),ascendingFalse)[delta].head(10)我们看到 1974 年和 1975 年的收入 (“re74” 和 “re75”) 以及年龄的匹配非常糟糕尽管其他协变量看起来匹配得相当好。我们可以同样地查看每个治疗样本找到的最佳匹配。我们发现匹配得更好无论是从倾向得分的距离还是从协变量来看。在这里收入的 delta 大约是我们从另一个方向得到的值的一个数量级小。best_treatment_matches.sort_values((match,distance),ascendingFalse)[delta].head(10)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/7ec68a94971842b5a306d633b508e115.png)这告诉我们对于每一个接受了就业培训的个体即治疗个体都有一个未接受治疗但非常相似的个体但是有许多控制组个体的协变量特别是收入水平与他们最近邻的治疗组个体大不相同。 我们可以通过进一步检查匹配控制样本和匹配治疗样本的倾向距离分布来探索这一观察结果。 pythonfrommatplotlibimportpyplotasplt f,axesplt.subplots(1,2,figsize(16,5))best_control_matches.match.distance.hist(axaxes[0],bins40)best_treatment_matches.match.distance.hist(axaxes[1],bins40)axes[0].set_xlabel($\Delta$ Propensity of closest match)axes[1].set_xlabel($\Delta$ Propensity of closest match)axes[0].set_ylabel(Count)axes[1].set_ylabel(Count)axes[0].set_title(Control)axes[1].set_title(Treatment)axes[0].axvline(xbest_treatment_matches.match.distance.max(),colorred,labelmax $\Delta$ propensity of treatment-control)axes[0].legend();哇当我们从治疗组寻找最近邻时找到的最大距离位于从控制组到治疗组最近邻距离的前几个百分位数内。实际上它正好位于第 6 百分位数内sum((best_control_matches.match.distancebest_treatment_matches.match.distance.max()))/len(best_control_matches)0.07171205693170932在这种情况下匹配如何帮助我们一方面我们可以做一个简单的、无放回的匹配并比较治疗组的配对来估计结果matcher.with_replacementFalsematcher.match(X,a)matcher.estimate_population_outcome(X,a)0.05093.4929421.06349.143530dtype:float64这样给我们带来了接受治疗者 $1752 的效果。这是非常显著的并且与直观的估计完全不同直观估计是负数。但我们只使用了原始数据集中大约 21,000 个样本中的 370 个。如果能更多地利用我们拥有的数据就更好了。我们可以做的一件事是使用卡尺并使用匹配来估计潜在结果importnumpyasnp matcher.n_neighbors3results,sample_count[[],[]]cvecnp.logspace(-7,-0.5,10)forcaliperincvec:matcher.calipercaliper matcher.with_replacementTruematcher.match(X,a)results.append(matcher.estimate_population_outcome(X,a))sample_count.append(matcher.samples_used_)cresultspd.DataFrame(dataresults,indexcvec)f,axesplt.subplots(1,2,figsize(16,7))axes[0].loglog(cvec,sample_count)axes[0].legend([control samples,treatment samples])axes[0].axhline(ysum(a0),ls:,colorC0)axes[0].axhline(ysum(a1),ls:,colorC1)axes[0].set_xlabel(caliper)axes[0].set_ylabel(sample count)axes[0].axis(tight)axes[1].semilogx(cvec,results)axes[1].legend([control prediction,treatment prediction])axes[1].set_xlabel(caliper)axes[1].set_ylabel(Expected Income)plt.tight_layout();这很有趣。我们看到这样我们可以使用一个滑动标度来调整匹配的严格程度随着我们纳入远距离匹配效果估计发生了显著变化即效果的符号发生了改变那么逆概率加权呢倾向得分是一个平衡权重只要我们解决了正则性问题我们应该能够以这种方式获得相当稳健的估计。我们甚至可以跟踪协变量的平衡情况看看我们在纠正正则性问题方面的表现如何。因为如果有正则性问题协变量将不能通过逆概率权重实现平衡。为了给 IPW 模型提供更多的数据我们可以扩展到三个邻居如果卡尺允许的话。fromcausallib.preprocessing.transformersimportMatchingTransformerfromcausallib.evaluation.metricsimportcalculate_covariate_balance caliper_vecnp.logspace(-5.5,-1,10)covbal[]n_neighbors3defmatch_then_ipw_weight(caliper):mtMatchingTransformer(propensity_transformPropensityTransformer(include_covariatesFalse,learnerlearner()),calipercaliper,n_neighborsn_neighbors)mt.fit(X,a,y)Xm,am,ymmt.transform(X,a,y)ipwIPW(learnerlearner())ipw.fit(Xm,am,)ipw_weightsipw.compute_weights(Xm,am)ipw_outcomeipw.estimate_population_outcome(Xm,am,ym)matched_treatedsum(am1)matched_controlsum(am0)covbalancecalculate_covariate_balance(Xm,am,ipw_weights)return{caliper:caliper,n_treated:matched_treated,n_control:matched_control,ipw_weights:ipw_weights,ipw_outcome:ipw_outcome,covariate_balance:covbalance.drop(columnsunweighted)}results[match_then_ipw_weight(c)forcincaliper_vec]covbal_dfpd.concat([i[covariate_balance]foriinresults],axis1)importseabornassbimportmatplotlib.pyplotasplt covbal_df.columns[%.6f%iforiincaliper_vec]covbal_noedu_dfcovbal_df.drop(labels[iforiincovbal_df.indexifeducationini])f,axplt.subplots(2,2,figsize(13,12))ax[0,0].errorbar(caliper_vec,covbal_noedu_df.mean(),yerrcovbal_noedu_df.std())ax[0,0].set_xscale(log)ax[0,0].set_xlabel(caliper)ax[0,0].set_ylabel(mean covariate balance)ax[0,1].semilogx(caliper_vec,[i[n_control]foriinresults],labelcontrol)ax[0,1].semilogx(caliper_vec,[i[n_treated]foriinresults],labeltreatment)ax[0,1].set_ylabel(sample count)ax[0,1].set_xlabel(caliper)ax[0,1].set_xscale(log)ax[0,1].set_yscale(log)ax[0,1].legend()ax[1,0].semilogx(caliper_vec,[i[ipw_outcome][0]foriinresults],labelcontrol)ax[1,0].semilogx(caliper_vec,[i[ipw_outcome][1]foriinresults],labeltreatment)ax[1,0].set_ylabel(outcome)ax[1,0].set_xlabel(caliper)ax[1,0].set_xscale(log)ax[1,0].legend()sb.heatmap(datacovbal_noedu_df,axax[1,1])ax[1,1].set_xlabel(caliper)plt.tight_layout();结论我们看到当扩展数据以包括非精确匹配时预测保持相对稳健直到一定程度。没有任何数据过滤的情况下IPW 因正则性问题而受到影响无法成功平衡协变量特别是之前的收入以及西班牙裔群体。因此尽管 IPW 方法具有强大的能力但它本身无法检测正则性问题并且可以通过使用匹配或类似程序进行过滤来改进。

相关文章:

【python因果库实战31】LaLonde 数据集匹配2

这里写目录标题使用匹配来估计结果并为 IPW 准备数据结论使用匹配来估计结果并为 IPW 准备数据 我们这里有一些担忧,即治疗组和对照组之间的数据可能过于不平衡,以至于无法进行可靠的推断。虽然原则上倾向得分加权可以纠正协变量的不平衡,但…...

Android开发避坑:支付宝SDK返回4000错误,别急着改代码,先检查这个线程问题

Android开发深度解析:支付宝SDK返回4000错误的线程陷阱与系统级排查 当你在Android应用中集成支付宝支付功能时,是否遇到过这样的场景:一切配置看似正确,但调用支付接口后却收到了resultStatus:4000的错误提示,附带一句…...

AprilTag灵活布局实战:创建自定义标签家族的完整指南

AprilTag灵活布局实战:创建自定义标签家族的完整指南 【免费下载链接】apriltag AprilTag is a visual fiducial system popular for robotics research. 项目地址: https://gitcode.com/gh_mirrors/ap/apriltag AprilTag是一个在机器人研究领域广受欢迎的视…...

暗黑破坏神2存档编辑器终极指南:d2s-editor让游戏体验更自由

暗黑破坏神2存档编辑器终极指南:d2s-editor让游戏体验更自由 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾在暗黑破坏神2中为了一件稀有装备反复刷图数小时?是否因为角色属性点加错而懊恼不已&…...

别再被POI内存溢出坑了!手把手教你用EasyExcel 2.1.6搞定百万级数据导入导出

百万级Excel处理实战:从POI到EasyExcel的无痛迁移指南 当业务数据量从几千条膨胀到百万级时,许多Java开发者会发现原本运行良好的POI导出功能突然变成了系统性能的"阿喀琉斯之踵"。我曾亲眼见证一个生产系统在月度报表生成时因OOM崩溃&#xf…...

企业级无人机安全测试平台:构建可扩展的GPS欺骗与Wi-Fi渗透架构

企业级无人机安全测试平台:构建可扩展的GPS欺骗与Wi-Fi渗透架构 【免费下载链接】Drone-Hacking-Tool Drone Hacking Tool is a GUI tool that works with a USB Wifi adapter and HackRF One for hacking drones. 项目地址: https://gitcode.com/gh_mirrors/dr/D…...

Windows 11终极清理指南:用Win11Debloat智能优化系统性能

Windows 11终极清理指南:用Win11Debloat智能优化系统性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...

ComfyUI-Impact-Pack完全指南:如何彻底解决AI图像细节增强难题

ComfyUI-Impact-Pack完全指南:如何彻底解决AI图像细节增强难题 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地址: …...

CANN/ge图引擎AIPP补边参数设置

aclmdlSetAIPPPaddingParams 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch…...

3分钟掌握B站缓存视频转换:m4s转MP4的完整免费解决方案

3分钟掌握B站缓存视频转换:m4s转MP4的完整免费解决方案 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾为B站下架的视频感到…...

从零到一:在Visual Studio中集成海康机器人工业相机SDK的完整指南

1. 环境准备:搭建开发基础 第一次接触工业相机开发时,我也被各种专业术语和配置步骤搞得头晕眼花。后来发现只要把环境搭建好,后面的开发就会顺利很多。咱们先从最基础的软件安装开始,就像盖房子要先打地基一样。 Visual Studio的…...

5大核心功能揭秘:如何用LeagueAkari游戏辅助工具提升竞技水平

5大核心功能揭秘:如何用LeagueAkari游戏辅助工具提升竞技水平 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkari是一款基…...

如何快速部署Apache Traffic Server:10分钟上手完整教程

如何快速部署Apache Traffic Server:10分钟上手完整教程 【免费下载链接】trafficserver Apache Traffic Server™ is a fast, scalable and extensible HTTP/1.1 and HTTP/2 compliant caching proxy server. 项目地址: https://gitcode.com/gh_mirrors/traf/tra…...

2026届最火的AI辅助写作工具横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要使AI生成文本的检测概率得以降低,就得实施从语义、结构以及风格这仨方面展开的…...

终极指南:League-Toolkit 如何彻底解决极地大乱斗抢英雄难题

终极指南:League-Toolkit 如何彻底解决极地大乱斗抢英雄难题 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit League-Toolkit 是一款…...

如何快速集成KYGooeyMenu:iOS粘液菜单的完整实现指南

如何快速集成KYGooeyMenu:iOS粘液菜单的完整实现指南 【免费下载链接】KYGooeyMenu A not bad gooey effects menu. 项目地址: https://gitcode.com/gh_mirrors/ky/KYGooeyMenu KYGooeyMenu是一款为iOS应用打造的粘液效果菜单组件,能为你的应用添…...

别再自己造轮子了!.NET 8项目里用BouncyCastle库快速集成SM4国密加密

在.NET 8中高效集成SM4国密算法的工程实践 金融级应用开发中,数据加密是保障业务安全的基石。当项目需要符合国内密码行业标准时,SM4算法往往成为首选方案。但现实开发中,许多团队仍在重复造轮子——从零实现加密算法不仅耗时耗力&#xff0c…...

WpfDesigner终极指南:5分钟掌握WPF可视化设计工具,告别手写XAML代码

WpfDesigner终极指南:5分钟掌握WPF可视化设计工具,告别手写XAML代码 【免费下载链接】WpfDesigner The WPF Designer from SharpDevelop 项目地址: https://gitcode.com/gh_mirrors/wp/WpfDesigner 还在为复杂的WPF界面设计而烦恼吗?W…...

实战指南:如何用FanControl彻底解决显卡风扇异常与NvApiWrapper兼容性问题

实战指南:如何用FanControl彻底解决显卡风扇异常与NvApiWrapper兼容性问题 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com…...

CANN asc-devkit Maxs API参考

Maxs 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址: https://gitcode.com/cann/…...

企业级网络模拟:用eNSP搭建USG6000v双机热备+NAT的完整实验环境

企业级网络高可用实战:基于eNSP的USG6000v双机热备与NAT深度解析 当企业核心业务对网络连续性要求达到99.99%时,单台防火墙的部署就像走钢丝——任何硬件故障或链路中断都可能导致服务瘫痪。这正是我在为某电商平台设计灾备方案时遇到的痛点:…...

OpenClaw从入门到应用——工具(Tools):创建技能

通过OpenClaw实现副业收入:《OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南》 简介 OpenClaw 被设计为易于扩展。“技能”是向你的助手添加新能力的主要方式。 什么是技能? 一个技能是一个目录,其中包含一个 SKILL.md…...

如何用HS2-HF_Patch一键解锁Honey Select 2完整游戏体验

如何用HS2-HF_Patch一键解锁Honey Select 2完整游戏体验 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch HS2-HF_Patch是一款专为Honey Select 2游戏设计的一站式…...

定制你的弹窗外观:WYPopoverController主题设置与颜色方案全攻略

定制你的弹窗外观:WYPopoverController主题设置与颜色方案全攻略 【免费下载链接】WYPopoverController WYPopoverController is for the presentation of content in popover on iPhone / iPad devices. Very customizable. 项目地址: https://gitcode.com/gh_mi…...

OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南——OpenClaw一人公司-[一人公司的终极技术栈,从0到变现的完整光谱]

【限时99元】专栏原价299元,在专栏未完结的持续更新期间享受99元早鸟价,现在订阅同享后续专栏所有文章! 【专栏介绍】《OpenClaw赚钱实录:从“养龙虾“到可持续变现的实践指南》专栏介绍 有任何疑问均可联系博主微信(微信号:NeumannAI),作者将亲自解答并持续优化文章内…...

Jenkins Job DSL与Pipeline集成:现代DevOps工作流的10个最佳实践

Jenkins Job DSL与Pipeline集成:现代DevOps工作流的10个最佳实践 【免费下载链接】job-dsl-plugin A Groovy DSL for Jenkins Jobs 项目地址: https://gitcode.com/gh_mirrors/jo/job-dsl-plugin Jenkins Job DSL插件是现代DevOps自动化中不可或缺的工具&…...

HC32F460移植指南:除了代码,你还需要搞定Keil、J-Flash和驱动库这三大件

HC32F460开发环境搭建实战:从工具链配置到驱动库迁移 第一次拿到华大HC32F460开发板时,我对着Keil里找不到的芯片型号和一堆陌生的驱动库文件陷入了沉思。与STM32生态相比,华大MCU的开发环境搭建确实存在不少"坑点"。本文将分享一套…...

用Arduino和MAX30102做个心率血氧仪,从硬件连线到算法调试全流程避坑

从零构建Arduino心率血氧仪:MAX30102实战指南 开篇:为什么选择MAX30102? 在可穿戴健康设备爆发的时代,心率血氧监测已成为智能手环的标配功能。而MAX30102这颗高度集成的光学传感器,正以医用级精度和低功耗特性成为创客…...

如何用Zutilo插件提升Zotero文献管理效率:5个实用技巧帮你节省50%时间

如何用Zutilo插件提升Zotero文献管理效率:5个实用技巧帮你节省50%时间 【免费下载链接】Zutilo Zotero plugin providing some additional editing features 项目地址: https://gitcode.com/gh_mirrors/zu/Zutilo 你是否经常在Zotero中花费大量时间处理文献标…...

3分钟掌握清华PPT模板:免费打造专业学术演示文稿的终极方案

3分钟掌握清华PPT模板:免费打造专业学术演示文稿的终极方案 【免费下载链接】THU-PPT-Theme 清华主题PPT模板 项目地址: https://gitcode.com/gh_mirrors/th/THU-PPT-Theme 还在为学术汇报、毕业答辩或重要演讲的PPT设计而头疼吗?清华大学视觉设计…...