【Python实战因果推断】4_因果效应异质性4
目录
Cumulative Gain
Target Transformation
Cumulative Gain
如果采用与累积效应曲线完全相同的逻辑,但将每个点乘以累积样本 Ncum/N,就会得到累积增益曲线。现在,即使曲线的起点具有最高的效果(对于一个好的模型来说),它也会因为相对规模较小而缩小。看一下代码,变化在于我现在每次迭代都会将效果乘以(行/大小)。此外,我还可以选择按 ATE 对曲线进行归一化处理,这就是为什么我还要在每次迭代时从效果中减去归一化处理的原因:
def cumulative_gain_curve(df, prediction, y, t,ascending=False, normalize=False, steps=100):effect_fn = effect(t=t, y=y)normalizer = effect_fn(df) if normalize else 0size = len(df)ordered_df = (df.sort_values(prediction, ascending=ascending).reset_index(drop=True))steps = np.linspace(size/steps, size, steps).round(0)effects = [(effect_fn(ordered_df.query(f"index<={row}"))-normalizer)*(row/size)for row in steps]return np.array([0] + effects)cumulative_gain_curve(test_pred, "cate_pred", "sales", "discounts")
如果您不想费心实现所有这些函数,可以使用Python库为您处理这些问题。您可以简单地从fklearn因果模块中导入所有曲线及其AUC
from fklearn.causal.validation.auc import *
from fklearn.causal.validation.curves import *
三种模型的累积增益和归一化累积增益如下图所示。在这里,CATE 排序较好的模型是曲线与代表 ATE 的虚线之间面积最大的模型:要将模型性能总结为一个数字,只需将归一化累积增益曲线上的数值相加即可。就 CATE 排序而言,数值最大的模型将是最佳模型。下面是您目前评估的三个模型的曲线下面积(AUC)。请注意,ML 模型的面积为负值,因为它对 CATE 进行了反向排序:
同样,您可以将模型的性能浓缩为一个数字,这一点也非常了不起,因为它可以自动选择模型。不过,虽然我很喜欢最后这条曲线,但在使用时还是需要注意一些问题。首先,在你看到的所有曲线中,重要的是要记住曲线中的每个点都是一个估计值,而不是地面真实值。它是对某一特定群体--有时是非常小的群体--的回归斜率的估计值。既然是回归估计值,它就取决于 T 和 Y 之间的关系是否正确。即使是随机化,如果治疗与干预结果之间的关系是一个对数函数,那么将效果估计为一条直线就会得出错误的结果。如果知道干预反应函数的形状,就可以将效应函数调整为 y~log(t) 的斜率,而不是 y~t。但要做到这一点,您需要知道正确的形状。
其次,这些曲线并不真正关心你是否正确地计算了 CATE。它们只关心排序是否正确。例如,如果您将任何一个模型的预测值减去-1,000,它们的累积增益曲线将保持不变。因此,即使您对 CATE 的估计存在偏差,这种偏差也不会在这些曲线中显示出来。现在,如果您只关心干预的优先次序,这可能不是问题。在这种情况下,排序就足够了。但是,如果您关心的是如何精确估算 CATE,那么这些曲线可能会误导您。如果您有数据科学背景,您可以将累积增益曲线与 ROC 曲线相提并论。同样,具有良好 ROC-AUC 的模型并不一定经过校准。
第三,或许也是最重要的一点,上述所有方法都需要无偏差数据。如果存在任何偏差,你对分组或 ATE 的效果估计都将是错误的。如果干预不是随机的,从理论上讲,你仍然可以使用这些评估技术,前提是你之前通过使用 IPW 的正交化等方法对数据进行了去偏差处理。不过,我对此有点怀疑。相反,我强烈建议你投资一些实验数据,哪怕只是一点点,只用于评估目的。这样,您就可以专注于效应异质性,而不必担心混杂因素的悄然出现。
因果模型评估是一个仍在发展中的研究领域。因此,它仍有许多盲点。例如,目前展示的曲线只能告诉您一个模型在 CATE 排序方面有多好。我还没有找到一个很好的解决方案来检查您的模型是否能正确预测 CATE。我喜欢做的一件事是在使用累积增益曲线的同时使用量子效应曲线图,因为前者能让我了解模型的校准程度,后者能让我了解模型对 CATE 的排序情况。至于归一化累积增益,它只是一个使可视化更容易的放大图。但我承认这并不理想。如果你正在寻找像 R2 或 MSE 这样的总结性指标--它们都是预测模型中常用的指标--我很遗憾地告诉你,在因果建模领域我还没有找到与它们类似的指标。不过,我还是找到了目标转换。
Target Transformation
X = ["C(month)", "C(weekday)", "is_holiday", "competitors_price"]y_res = smf.ols(f"sales ~ {'+'.join(X)}", data=test).fit().residt_res = smf.ols(f"discounts ~ {'+'.join(X)}", data=test).fit().residtau_hat = y_res/t_res
接下来,您可以使用它来计算所有模型的MSE。注意我也如何使用前面讨论的权重:
from sklearn.metrics import mean_squared_errorfor m in ["rand_m_pred", "ml_pred", "cate_pred"]:wmse = mean_squared_error(tau_hat, test_pred[m],sample_weight=t_res**2)print(f"MSE for {m}:", wmse)
根据这个加权MSE,再次,用于估计CATE的回归模型比其他两个表现更好。还有,这里还有一些有趣的东西。ML模型的性能比随机模型要差。这并不奇怪,因为ML模型试图预测Y,而不是τi。
只有当效应与结果相关时,预测 Y 才能很好地对 τi 进行排序或预测。这种情况一般不会发生,但在某些情况下可能会发生。其中有些情况在商业中相当常见,因此值得一探究竟。
相关文章:
【Python实战因果推断】4_因果效应异质性4
目录 Cumulative Gain Target Transformation Cumulative Gain 如果采用与累积效应曲线完全相同的逻辑,但将每个点乘以累积样本 Ncum/N,就会得到累积增益曲线。现在,即使曲线的起点具有最高的效果(对于一个好的模型来说&#x…...

大模型推理知识总结
一、大模型推理概念 大多数流行的only-decode LLM(例如 GPT-3)都是针对因果建模目标进行预训练的,本质上是作为下一个词预测器。这些 LLM 将一系列tokens作为输入,并自回归生成后续tokens,直到满足停止条件࿰…...
[笔记] keytool 导入服务器证书和证书私钥
背景 我当前手头已有一个服务器证书和对应的私钥,现在需要转换为 Java KeyStore 格式使用,找了一大圈才发现 keytool 无法直接导入服务器证书和私钥,当然证书可以直接导入,但是私钥是无法直接导入。找了一大圈发现可以先将服务器…...

【2024-热-办公软件】ONLYOFFICE8.1版本桌面编辑器测评
在今日快速发展的数字化办公环境中,选择一个功能全面且高效的办公软件是至关重要的。最近,我有幸体验了ONLYOFFICE 8.1版本的桌面编辑器,这款软件不仅提供了强大的编辑功能,还拥有众多改进,让办公更加流畅和高效。在本…...

C# 23设计模式备忘
创建型模式:单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。 原型(Prototype)模式:将一个对象作为原型&…...

STL中的迭代器模式:将算法与数据结构分离
目录 1.概述 2.容器类 2.1.序列容器 2.2.关联容器 2.3.容器适配器 2.4.数组 3.迭代器 4.重用标准迭代器 5.总结 1.概述 在之前,我们讲了迭代器设计模式,分析了它的结构、角色以及优缺点: 设计模式之迭代器模式-CSDN博客 在 STL 中&a…...

TCP、UDP详解
目录 1.区别 1.1 概括 1.2 详解 2.TCP 2.1 内容 2.2 可靠传输 2.2.1 确认应答 2.2.2 超时重传 2.2.3 连接管理 三次握手 四次挥手 2.2.4 滑动窗口 2.2.5 流量控制 2.2.6 拥塞控制 2.2.7 延时应答 2.2.8 捎带应答 2.2.9 面向字节流 2.2.10 异常情况的处理 1.…...
【脚本工具库】批量下采样图像(附源码)
在图像处理领域,我们经常需要对大批量图像进行下采样操作,以便减小图像的尺寸和文件大小,这对于节省存储空间和提高处理速度非常有帮助。手动操作不仅耗时,而且容易出错。为了解决这个问题,我们可以编写一个Python脚本…...

Web渗透:文件包含漏洞
Ⅱ.远程文件包含 远程文件包含漏洞(Remote File Inclusion, RFI)是一种Web应用程序漏洞,允许攻击者通过URL从远程服务器包含并执行文件;RFI漏洞通常出现在动态包含文件的功能中,且用户输入未经适当验证和过滤。接着我…...

什么是yum源?如何对其进行配置?
哈喽,大家好呀!这里是码农后端。今天来聊一聊Linux下的yum源及其配置相关的内容。简单来说,yum源就相当于一个管理软件的工具,可以想象成一个很大的仓库,里面存放着各种我们所需要的软件包及其依赖。 一、Linux下软件包…...

Node.js全栈指南:认识MIME和HTTP
MIME,全称 “多用途互联网邮件扩展类型”。 这名称相当学术,用人话来说就是: 我们浏览一个网页的时候,之所以能看到 html 文件展示成网页,图片可以正常显示,css 样式能正常影响网页效果,js 脚…...

基于weixin小程序智慧物业系统的设计
管理员账户功能包括:系统首页,个人中心,管理员管理,用户管理,员工管理,房屋管理,缴费管理,车位管理,报修管理 工作人员账号功能包括:系统首页,维…...

成功解决TypeError: __call__() got an unexpected keyword argument ‘first_int‘
成功解决TypeError: __call__() got an unexpected keyword argument first_int 目录 解决问题 解决思路 解决方法 T1、直接调用原始函数 T2、检查装饰器实现 T3、使用不同的调用方式 解决问题 result = multiply(**arguments) File "D:\ProgramData\Anaconda3\Li…...

vue3用自定义指令实现按钮权限
1,编写permission.ts文件 在src/utils/permission.ts import type { Directive } from "vue"; export const permission:Directive{// 在绑定元素的父组件被挂载后调用mounted(el,binding){// el:指令所绑定的元素,可以用来直接操…...
Nuxt3:当前页面滚动到指定位置
在Nuxt 3中,如果你想让当前页面跳转到指定位置,可以使用scrollIntoView方法。你需要给目标位置的元素添加一个ref引用,然后通过程序调用该ref来执行滚动。 以下是一个简单的例子: <template><div><!-- 其他内容 …...

word图题表题公式按照章节编号(不用题注)
预期效果: 其中3表示第三章,4表示第3章里的第4个图。标题、公式编号也是类似的。 为了达到这种按照章节编号的效果,原本可以用插入题注里的“包含章节编号” 但实际情况是,这不仅需要一级标题的序号是用“开始->多级列表”自动…...
最小生成树模型
文章目录 题单最小生成树模型1.[最短网络(prim)](https://www.acwing.com/problem/content/1142/)2. [局域网(kruskul)](https://www.acwing.com/problem/content/1143/)3. [繁忙的都市](https://www.acwing.com/problem/content/1144/)4. [ 联络员 ](https://www.acwing.com/p…...

基于盲信号处理的声音分离-基于改进的信息最大化的ICA算法
基于信息最大化的ICA算法的主要依据是使输入端与输出端的互信息达到最大,且输出各个分量之间的相关性最小化,即输出各个分量之间互信息量最小化,其算法的系统框图如图所示。 基于信息最大化的ICA算法的主要依据是使输入端与输出端的互信息达到…...

如何在Qt Designer中管理QSplitter
问题描述 当按下按钮时,我希望弹出一个对话框,用户可以在其中选择内容并最终按下 ‘Ok’ 按钮。我想在这个对话框中放置一个 QSplitter,左侧面板将显示树状结构,右侧将显示其他内容。如何正确实现这一点? 从 Qt 的示…...

关于新零售的一些思考
本文作为2024上半年大量输入之后的核心思考之一。工作到一定阶段之后,思考的重要性越来越高,后续会把自己的个人思考记录在这个新系列《施展爱思考》。背景是上半年面临业务转型从电商到新零售,本文是相关大量输入之后的思考,对新…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...