【Python实战因果推断】17_线性回归的不合理效果7

news2024/11/17 1:55:12

目录

Regression for Dummies

Conditionally Random Experiments

Dummy Variables


Regression for Dummies

回归和正交化固然很好,但归根结底,你必须做出独立性假设。你必须假设,在考虑到某些协变量的情况下,干预看起来与随机分配一样好。这可能相当困难。很难知道模型中是否包含了所有的混杂因素。因此,尽可能推动随机实验是非常有意义的。例如,在银行业的例子中,如果信用额度是随机的就好了,因为这样就可以很直接地估算出信用额度对违约率和客户消费的影响。问题是,这个实验的成本将高得惊人。你将会给风险极高的客户提供随机信用额度,而这些客户很可能会违约并造成巨大损失。

Conditionally Random Experiments

解决这一难题的方法并不是理想的随机对照试验,但却是最理想的方法:分层或有条件随机试验。在这种实验中,实验线不是完全随机的,而是从相同的概率分布中抽取的,因此您需要创建多个局部实验,根据客户的协变量从不同的分布中抽取样本。例如,您知道变量 credit_score1 是客户风险的代理变量。因此,您可以用它来创建风险较高或较低的客户群体,将他们划分为信用分数 1 相似的桶。然后,对于高风险组(信用分数低),您可以从平均分较低的分布中随机抽取信用额度对于低风险客户(信用分数高),您可以从平均分较高的分布中随机抽取信用额度

 risk_data_rnd = pd.read_csv("./data/risk_data_rnd.csv")
 risk_data_rnd.head()

绘制按credit_score1_buckets划分的信用额度直方图,可以看到各行的取样分布不同。得分较高的组别--低风险客户--的直方图向左倾斜,线条较长。风险较高的客户组--低分--的贷款额度分布图向右倾斜,贷款额度较低。这种实验探索的信贷额度与最佳额度相差不大,从而降低了测试成本,使其更易于管理:

这并不意味着条件随机实验比完全随机实验更好。出于这个原因,如果您选择条件随机实验,无论出于什么原因,都要尽量使其接近完全随机实验。这意味着

  • - 组数越少,处理条件随机测试就越容易。在本例中,您只有 5 个组,因为您把 credit_score1 分成了 200 个桶,分数从 0 到 1,000。将不同的组与不同的干预分布结合起来会增加复杂性,因此坚持少分组是个好主意。
  • - 各组间干预分布的重叠越大,你的实验就越轻松。这与阳性假设有关。在这个例子中,如果高风险组获得高线的概率为零,那么您就必须依靠危险的推断才能知道如果他们获得高线会发生什么。

如果把这两条经验法则调到最大值,就会得到一个完全随机的实验,这意味着这两条经验法则都需要权衡:组数越少,重叠度越高,实验就越容易读取,但成本也越高,反之亦然。

Dummy Variables

条件随机实验的好处在于,条件独立性假设更加可信,因为你知道在你选择的分类变量下,各条线是随机分配的。其缺点是,简单地将结果与被处理者进行回归,会产生有偏差的估计值。例如,以下是在不包含混杂因素的情况下估计模型的结果:

default_i=\beta_0+\beta_1\text{lines}_i+e_i

 model = smf.ols("default ~ credit_limit", data=risk_data_rnd).fit()
 model.summary().tables[1]

如图所示,因果参数 β1 的估计值为负值,这在这里是没有意义的。较高的信用额度可能并不会降低客户的风险。实际情况是,在这个数据中,由于实验的设计方式,风险较低的客户--credit_score1 高的客户--平均获得了更高的额度。

为了对此进行调整,需要在模型中加入随机分配干预的组别。在这种情况下,需要credit_score1_buckets. 进行控制。尽管该组用数字表示,但它实际上是一个分类变量:它代表一个组。因此,控制组本身的方法是创建哑变量。虚拟变量是一个群体的二进制列。如果客户属于该组,则为 1,否则为 0。由于一个客户只能来自一个组,因此最多只有一列虚拟变量为 1,其他列均为 0。如果您有机器学习背景,您可能会知道这是one-hot。它们完全是一回事。

在 pandas 中,你可以使用 pd.get_dummies 函数来创建哑列。在这里,我传递了表示组的列 credit_score1_buckets,并表示我想要创建后缀为 sb(表示分数桶)的哑列。此外,我还删除了第一个虚拟列,即 0 到 200 分桶的虚拟列。这是因为其中一列是多余的。如果我知道所有其他列都是 0,那么我放弃的那一列 一定是 1:

 risk_data_dummies = (
risk_data_rnd
 .join(pd.get_dummies(risk_data_rnd["credit_score1_buckets"],
 prefix="sb",
 drop_first=True))
)

一旦您有了虚拟列,您就可以将它们添加到您的模型中,并再次估计β1:default_i=\beta_0+\beta_1\text{lines}_i+\theta\mathbf{G}_i+e_i

现在,你会得到一个更合理的估计,这至少是积极的,这表明更多的信用额度会增加违约风险。

 model = smf.ols(
 "default ~ credit_limit + sb_200+sb_400+sb_600+sb_800+sb_1000",
 data=risk_data_dummies
 ).fit()
 model.summary().tables[1]

 model = smf.ols("default ~ credit_limit + C(credit_score1_buckets)",
 data=risk_data_rnd).fit()
 model.summary().tables[1]

最后,这里只有一个斜率参数。添加虚拟变量来控制混杂因素后,每个组都有一个截距,但所有组的斜率都是一样的。我们很快就会讨论这个问题,但这个斜率将是各组回归的方差加权平均值。如果绘制每个组的模型预测图,您可以清楚地看到每个组只有一条线,但所有组的斜率相同:

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

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

相关文章

力扣67 二进制求和

文章目录 1. 题目链接2. 题目代码3.感受 1. 题目链接 二进制求和 2. 题目代码 class Solution { public:string addBinary(string a, string b) {vector<int> stringA;vector<int> stringB;int lengthOfA a.length();int lengthOfB b.length();for(int subscrip…

【C++】初步认识C++

1. 初识C1.1 C概念相关1.2 C发展史及其重要性1.2.1 发展史1.2.2 重要性 2. C关键字3. 命名空间4. 输入和输出 个人主页&#xff1a;C_GUIQU 归属专栏&#xff1a;【C学习】 1. 初识C 1.1 C概念相关 C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。 【来源】…

seq2seq+Attention机制原理介绍

一、Seq2seq的局限性 Seq2seq&#xff08;序列到序列&#xff09;模型我们在前面讲了它的原理&#xff0c;是一种广泛用于处理序列转换任务的深度学习架构&#xff0c;特别是在机器翻译、文本摘要、对话生成等应用中。然而&#xff0c;尽管seq2seq模型在某些领域取得了显著的成…

数据结构----栈和队列之队列的实现

目录 1.基本概况 2.队列组成 3.队列的实现 &#xff08;1&#xff09;队列的初始化 &#xff08;2&#xff09;队列的销毁 &#xff08;3&#xff09;队列的尾插 &#xff08;4&#xff09;队列的头删 &#xff08;5&#xff09;队列的判空 &#xff08;6&#xff09;队…

量产工具一一文字系统(三)

目录 前言 一、文字数据结构抽象 1.描述一个文字的位图 2.描述一个字库操作 3.font_manager.h 二、实现Freetype封装 1.freetype.c 三、实现文字管理 1.font_manager.c 四、单元测试 1.font_test.c 2.disp_manager.c 3.disp_manager.h 4.上机测试 前言 前面我们…

vue-router拆分音乐播放界面实战

创建项目 npm install -g pnpm pnpm create vite安装 pnpm add vue-routersrc/main.js import {createApp} from vue import ./style.css import App from ./App.vue import router from "./router/index.js";const app createApp(App) app.use(router) app.moun…

2024上半年网络工程师考试《应用技术》试题一

阅读以下说明&#xff0c;回答问题。 【说明】 MPLS基于(1)进行转发&#xff0c;进行MPLS标签交换和报文转发的网络设备称为(2)&#xff0c;构成MPLS域(MPSDomain)。位于MPLS域边缘、连接其他网络的LSR称为(3),区域内部的LSR称为核心LSR(CoreLSR)IP报文进入MPLS网络时&#xf…

微软关闭中国所有线下店,并不影响全球第一

​关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 微软没有被时代淘汰&#xff0c;时代也没有告别微软!中国市场对微软可有可无&#xff0c;即便没有中国市场&#xff0c;微软市值也在全球前三&#xff0c;这是事实!a 5月中旬&#xff0c;微软azure解散中国分部…

泛微开发修炼之旅--30 linux-Ecology服务器运维脚本

文章链接&#xff1a;30 linux-ecology服务器运维脚本

Java线程同步的特征和安全类型

一线程同步的特征 ◆不同的线程在执行以同一个对象作为锁标记的同步代码块或同步方法时&#xff0c;因为要获得这个对象的锁而相互牵制&#xff0c;多个并发线程访问同一资源的同步代码块或同步方法时。 ◆同一时刻只能有一个线程进入synchronized(this)同步代码块。 ◆当一个…

SpringBoot 通过Knife4j集成API文档 在线调试

介绍 Knife4j 是一款基于 Swagger 构建的增强型 API 文档生成工具&#xff0c;它提供了更多的定制化功能和界面优化&#xff0c;使得生成的 API 文档更加美观和易用。它可以帮助开发者快速生成和管理 API 文档&#xff0c;支持在线调试和交互。 依赖 <!--knife4j--> &…

Python容器 之 练习题

1.字符串的基本使用 # 定义一个字符串 str1, 字符串的内容为 "hello world and itcast and itheima and Python" str1 "hello world and itcast and itheima and Python" # 在字符串str1中查找 字符串 and 的下标 num str1.find(and) print(num) # 12…

【设计模式】行为型-状态模式

在变幻的时光中&#xff0c;状态如诗篇般细腻流转。 文章目录 一、可调节的灯光二、状态模式三、状态模式的核心组件四、运用状态模式五、状态模式的应用场景六、小结推荐阅读 一、可调节的灯光 场景假设&#xff1a;我们有一个电灯&#xff0c;它可以被打开和关闭。用户可以…

Promethuse-监控 Etcd

一、思路 Prometheus监控Etcd集群&#xff0c;是没有对应的exporter&#xff0c;而 由CoreOS公司开发的Operator&#xff0c;用来扩展 Kubernetes API&#xff0c;特定的应用程序控制器&#xff0c;它用来创建、配置和管理复杂的有状态应用&#xff0c;如数据库、缓存和监控系…

学习和发展人工智能:新兴趋势和成功秘诀

人工智能(AI)继续吸引组织&#xff0c;因为它似乎无穷无尽地提高生产力和业务成果。在本博客中&#xff0c;了解学习和发展(L&D)部门如何利用人工智能改进流程&#xff0c;简化工作流程&#xff1f; 学习与发展(L&D)部门领导开始探索如何提高和支持人工智能能力的劳动…

超快的 Python 包管理工具「GitHub 热点速览」

天下武功&#xff0c;无坚不破&#xff0c;唯快不破&#xff01; 要想赢得程序员的欢心&#xff0c;工具的速度至关重要。仅需这一优势&#xff0c;即可使其在众多竞争对手中脱颖而出&#xff0c;迅速赢得开发者的偏爱。以这款号称下一代极速 Python 包管理工具——uv 为例&…

PyMuPDF 操作手册 - 08 API - Document属性方法和简短说明

文章目录 https://pymupdf.readthedocs.io/en/latest/document.html#Document 方法/属性简短描述Document.add_layer()仅限 PDF:进行新的可选内容配置Document.add_ocg()仅限 PDF:添加新的可选内容组Document.authenticate()访问加密文档Document.bake()仅限 PDF:将…

Bootstrap 图片

Bootstrap 图片 Bootstrap 是一个流行的前端框架,它提供了一套丰富的工具和组件,用于快速开发响应式和移动优先的网页。在本文中,我们将探讨如何使用 Bootstrap 来处理和展示图片,包括图片的响应式设计、图片样式和图片布局。 响应式图片 Bootstrap 通过其栅格系统提供了…

前端利用vue如何实现导入和导出功能.md

1. 前端利用vue如何实现导入和到处功能 1.1. 导入功能&#xff08;以导入Excel文件为例&#xff09; 1.1.1. 实现步骤: 1.1.1.1. 安装依赖: 首先&#xff0c;你需要安装处理Excel文件的库&#xff0c;如xlsx。1.1.1.2. 创建上传组件: 使用Element UI的<el-upload>组件或其…

基于Vue框架实现的记事本

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>懒人记事本</title><style>body {fo…