使用 CausalPy 进行因果推理

news2024/11/15 9:53:01

这篇文章通过一个实际的例子简要介绍了因果推理,这个例子来自于《The Brave and True》一书,我们使用 CausalPy 来实现。

因果推理是从观察数据中估计因果效应的过程。对于任何给定的个体,我们只能观察到一种结果。另一种结果对我们来说是隐藏的。这就是所谓的反事实(即与事实相反)。例如,我们可以干预或不干预病人,但我们只能在一种情况下得到结果。另一种结果是我们没有观察到的,因此被称为潜在结果。如果我们有一个没有接受干预但与接受干预的组非常相似的对照组,就可以估计潜在的影响。这里就要求必须确保两组在干预前没有任何差异。

合成控制法:Synthetic Control

在许多情况下,我们没有对照组来比较。比如我们向一定比例的用户展示广告。在广告曝光(即处理)之前和之后,我们记录到网站的流量。根据因果效应的定义,我们需要知道如果用户没有接触到该广告,会发生什么。在广告中,我们可以曝光一定比例的用户,而将其余用户作为对照组。

但是在下面的示例中,这是不可能的。

比如说,我们想知道限制吸烟的政策对香烟销售的影响。在这种情况下没有自然对照组,这就带来了一个问题,很难验证该政策是否真的对销售产生了影响。

这正是合成控制进入阶段的地方。这个想法是这样的:因为没有一个自然的对照组,所以只能尝试构建一个尽可能与干预组相似的对照组。在上面的例子中,我们可以使用其他类似省的数据。

 import causalpy as cp
 import pandas as pd
 
 cigar = (pd.read_csv("data/smoking.csv")
          .drop(columns=["lnincome","beer", "age15to24", "california", "after_treatment"]))

我们导入CausalPy Python包,加载数据并删除一些我们不需要的列。从美国39个不同的州获得了31年的数据。干预(政策开始)发生在1989年。加州是第一个州。在将数据传递给CausalPy之前,我们必须进行一些预处理工作,最还要把数据变成宽表的格式

 piv = cigar.pivot(index="year", columns="state", values="cigsale")
 treatment_time = 1989
 unit = "s3"
 
 piv.columns = ["s" + str(i) for i in list(piv.columns)]
 
 piv = piv.rename(columns={unit: "actual"})

这样每个州就变成一列,每年一行。

 formula = "actual ~ 0 + " + " ".join(list(piv.columns.drop("actual")))

上面我们构建了一个公式,表示我们想用其他州的香烟销售来解释“实际”变量(即加州的香烟销售)。这里必须重命名列,因为不能使用整数。第一个0仅仅表示我们不想在模型中包含截距。

 result = cp.pymc_experiments.SyntheticControl(
     piv,
     treatment_time,
     formula=formula,
     model=cp.pymc_models.WeightedSumFitter(
         sample_kwargs={"target_accept": 0.95}
     ),
 )

上面的代码创建了模型并进行适配。我们只需要将数据连同干预时间和公式一起传递给CausalPy。上面该公式描述了我们想要如何构建合成控制组(即哪些变量)。除了使用SyntheticControl作为我们的实验类型外,我们还告诉CausalPy想要使用WeightedSumFitter作为我们的模型。

结果

CausalPy在运行时将启动一个马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法,算法通过从后验分布中提取样本来执行推理。我们在这里不深入贝叶斯推理的细节,因为以前已经有文章直观地解释了这个概念。

这是我们在拟合模型后得到的主要图形。首先要确保我们有一个好的模型,也就是说要构建一个好的合成组。上面的结果实现了~82%的R2,可以说效果还不错。CausalPy在第一个小图中用橙色显示了加州在没有干预的情况下的情况。黑点表示实际观测结果。另外两个子图显示了合成对照组和干预组之间的(累积)差异。最主要的石我们还得到了与因果效应相关的可信区间。

还可以查看WeightedSumFitter的系数。这再次表明合成的加州是其他州的组合。在这种情况下,s8和s4构成了合成加州的很大一部分。

总结

因果推理是一种推理过程,通过观察事件或现象之间的关系,推断出一个事件或现象是另一个事件或现象的结果或原因。它是从一个或多个前提中得出结论的过程,其中前提描述了可能的原因和结果之间的联系。

因果推理是统计学中一个经常被忽视的领域。它允许我们超越单纯的联想和相关性,并回答“假设”类型的问题。回答这些类型的问题对于实际做出基于数据的决策至关重要。

CausalPy 可以使用不同类型的模型用于准实验的因果推理,他的地址如下:

https://avoid.overfit.cn/post/8e3b56e584974ec3a1b3807c78095f76

作者:Brechterlaurin

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

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

相关文章

蓝牙ble tips2-UUID GATT(service和CHARACTERISTIC) profile相关概念介绍

服务和特性 低功耗蓝牙设备之间通信,都是基于服务和特性。一个蓝牙设备中可以包含若干个服务,一个服务中可以包含若干个特性,每一个服务或者特性都要有一个UUID。蓝牙的数据交互都是基于一个个特性进行的,数据交互的方式有五种&a…

超全面的高精度行星减速机结构、原理、功能以及优势解析

行星减速机是运动控制系统中连接伺服电机和应用负载的一种机械传动组件,具有高减速比、良好的传动特性、结构紧凑、体积小、重量轻、可靠性高、低噪音等优点,广泛用于电机、汽车、机器人及各种工业机械中,以实现高效率和稳定性。 一、什么是…

Ubuntu20.04安装ROS Noetic 版本安装记录

用的是VMWare的20.04的Ubuntu虚拟机,打算安装一下Noetic 版本的ROS学习一下。B站有个视频可以参考一下:在Ubuntu20.04上安装ROS机器人操作系统-Noetic但是基本也是参考中文文档安装,步骤相比网上的教程更权威Ubuntu install of ROS Noetic&am…

LeetCode--HOT100题(20)

目录 题目描述:48. 旋转图像(中等)题目接口解题思路代码 PS: 题目描述:48. 旋转图像(中等) 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#x…

echarts图表渐变色 + 每个柱子不同颜色设置

echarts柱状图,默认所有柱子都是同一个颜色,显示效果差强人意,本文介绍如果修改成为每个柱子添加不同的颜色,以及如何添加渐变色,丰富图表的显示鲜果。先看效果: 每个柱子颜色不同 每个柱子都有自己的渐变…

【论文阅读】基于 NeRF 的 3D 重建的批判性分析

【论文阅读】基于 NeRF 的 3D 重建的批判性分析 Abstract1. Introduction2. The State of the Art2.1. Photogrammetric-Based Methods2.2. NeRF-Based Methods 3. Analysis and Evaluation Methodology3.1. Proposed Methodology3.2. Metrics3.3. Testing Objects 4. Comparis…

HTML5(H5)的前生今世

目录 概述HTML5与其他HTML的区别CSS3与其他CSS版本的区别总结 概述 HTML5是一种用于构建和呈现网页的最新标准。它是HTML(超文本标记语言)的第五个版本,于2014年由万维网联盟(W3C)正式推出。HTML5的前身可以追溯到互联…

[MAUI 项目实战] 手势控制音乐播放器: 动画

吸附动画 还记的上一章节所描述的拖拽物(pan)和坑(pit)吗?“”吸附“”这是一个非常拟物的过程,当拖拽物品接近坑区域的边缘时,物体就会由于重力或是引力作用会滑落,吸附在坑里。 …

MINIO安装(centos7)

步骤1:安装wget 在开始安装MinIO之前,需要安装wget命令行工具。可以使用以下命令在CentOS系统中安装wget: sudo yum install wget 步骤2:下载MinIO wget https://dl.minio.org.cn/server/minio/release/linux-amd64/minio 将下…

最新[新手入门教程] JDK8u381的下载安装以及环境变量的配置

JAVA从入门到精通 各位新手们大家好,今天来为大家介绍一下JDK8u381的下载安装以及环境变量的配置 【前言】 1.是不是不知道什么是Java? 官方定义: Java是一门面向对象的高级编程语言,不仅吸收了C语言的各种优点&#x…

硬盘格式化后能恢复数据吗?这4个方法可以帮到你!

“前几天一不小心对硬盘进行了格式化操作,但是我很多重要的文件都保存在里面了呀!硬盘格式化之后还能进行恢复吗?快帮帮我!” 硬盘格式化会将存储在硬盘上的数据全部清除,并将文件系统重置为初始状态。那么&#xff0c…

根据省市区名字发送请求

思路 选择对应的区域其实是按照表格中的省市区的名字进行匹配 读取文件后对应的字典为: {台湾: {},新疆: {},港澳: {中国澳门: [凼仔岛, nan]},西藏: {昌都地区: [卡若区], 那曲地区: [nan]} } 字典解释例如 市区为空,就是选择省下面的全部市和区 区为空…

租赁小程序系统:为您的租赁业务带来便利与效率

租赁小程序开发适合的产品有很多种,下面我将介绍一些常见的产品。   租赁共享单车:共享单车在城市里越来越受欢迎,租赁小程序可以方便用户查找附近的共享单车、预订、支付和解锁等操作。   租房:租赁小程序可以帮助房东发布房…

2023最难就业年

跟大家正式介绍一下我自己。 本人曾在阿里,硅谷工作,百万年薪,大概15的工作经验,八年面试官经验。 前端,后端,产品,测试,运维,PM,架构,运营等岗…

支持北斗三、抗干扰、无高度限制的动态高精度测速北斗定位模块

为室外位置服务提供经纬度信息的GPS模块、北斗定位模块多数受限于速度,在高动态环境下,无法为车载,船载,机载等设备提供精准位置信息。为满足高动态及高速应用场景的位置服务需求,现SKYLAB推出一款支持北斗三&#xff…

时间复杂度接近O(n)的三种排序算法

1.桶排序 桶排序,顾名思义,会用到“桶”,核心思想是将要排序的数据分到几个有 序的桶里,每个桶内的数据再单独进行排序。桶内排完序之后,再把每个桶内的数据按照顺序依次 取出,组成的序列就是有序的了。 …

UnrealEngine - 网络同步入门

1 网络同步机制 UE 提供了强大的网络同步机制: RPC :可以在本地调用,对端执行属性同步:标记一个属性为 UPROPERTY(Replicated) 就可以自动将其修改后的值同步到客户端移动复制:Actor 开启了移动复制后会自动复制位置…

区块链实验室(14) - 编译FISCO-BCOS

FISCO-BCOS是一种区块链平台,与Hyperledger和Ethereum有些不同,详见FISCO BCOS 区块链 编译FISCO BCOS源码的目的是修改或者新增其中功能模块,进行对比实验,验证新想法、新创意的效果。编译的步骤很简单,按技术文档一…

postman----传参格式(json格式、表单格式)

本文主要讲解postman使用post请求方法的2中传参方式:json格式、表单格式 首先了解下,postman进行接口测试,必须条件是: ♥请求地址 ♥请求协议 ♥请求方式 ♥请求头 ♥参数 json格式 先看一下接口文档,根据接口文档&…

算法通关村——如何使用中序和后序来恢复一棵二叉树

通过序列构造二叉树 给出以下三个二叉树遍历的序列: (1) 前序: 1 2 3 4 5 6 8 7 9 10 11 12 13 15 14 (2) 中序: 3 4 8 6 7 5 2 1 10 9 11 15 13 14 12 (3) 后序: 8 7 6 5 4 3 2 10 15 14 13 12 11 9 1 前中序复原二叉树 所需序列 (1) 前序: 1 2 3 4 5 6 8 7 9 10 …