【Python实战因果推断】41_合成控制1

目录

Online Marketing Dataset


在之前了解了面板数据在因果识别方面的优势。也就是说,你不仅可以比较单位之间的关系,还可以比较单位的前世今生,这样你就可以用更可信的假设来估计反事实 Y_{0}。您还了解了差分法(DID)及其多种变体,它是利用面板数据进行因果推理的众多工具之一。通过依赖干预对象和对照对象之间相似(平行)的增长轨迹,即使干预对象和对照对象之间的 Y_{0} 水平不同,差分法也能识别治疗效果。在本文中,您将学习另一种流行的面板数据集技术:合成控制(SC)。

如果与时间段 T 相比,单位数 N 相对较多,那么 DID 的效果会很好,但如果情况相反,DID 的效果就会大打折扣。与此相反,合成控制的设计目的是在只有极少数甚至只有一个干预单位的情况下发挥作用。它背后的理念非常简单:将控制单元结合起来,以制作一个合成控制,使其近似于没有干预时受治疗单元的行为这样做可以避免做出平行趋势假设,因为合成控制如果设计得好,就不仅仅是平行趋势,而是与反事实 E[Y_0|D=1] 完全重合

在本文最后,您还将学习如何将 DID 和 SC 结合起来。这种组合估算器不仅功能强大,最重要的是,它将让你对差分和合成控制,特别是面板数据方法有一个全新的认识。

Online Marketing Dataset

作为合成控制的一个用例,您将使用一个在线营销数据集。与离线营销相比,在线营销可以进行更好的跟踪,但这并不意味着它对因果推理没有挑战。例如,在线营销的确可以更好地进行归因:您可以知道客户是否通过某个付费营销链接接触到您的产品。但这并不意味着你知道,如果顾客没有看到你的在线广告,他们会发生什么。也许客户只是因为看到了广告才来的,在这种情况下,广告会带来额外的客户。但也有可能,无论哪种方式,客户都会来,而他们通过付费链接来,只是因为该链接位于页面顶部。

由于归因与增量不同,而且您无法随机化谁会看到您的广告,因此对整个地域进行处理并进行某种面板数据分析,就像上一章所说的那样,也是网络营销的一个好主意。因此,这里的数据与上一章中的数据并无太大区别。同样,城市是单位,日期是时间维度,治疗列标记城市是否最终接受了治疗,治疗后列标记干预后时期。此外,还有一些辅助列,如该城市的人口(记录于 2013 年,因此在时间上是固定的)和州:

 import pandas as pdimport numpy as npdf = (pd.read_csv("./data/online_mkt.csv").astype({"date":"datetime64[ns]"}))df.head()

在这里,干预变量是应用程序的日下载量,处理方

 tr_period = df_norm.query("post==1")["date"].min()tr_periodTimestamp('2022-05-01 00:00:00')

法是在该城市开启营销活动。干预同时在接受干预的城市实施,这意味着您采用了简单的区组设计。这里的问题是,处理单位的数量要少得多,只有三个城市:

 treated = list(df.query("treated==1")["city"].unique())treated['sao_paulo', 'porto_alegre', 'joao_pessoa']

如果您留意了数据框中的人口一栏,您可能会注意到,其中一个城市圣保罗拥有超过 1200 万的庞大人口。事实上,它是世界上最大的城市之一!这也意味着圣保罗的应用程序下载量将远远大于其他城市,这就带来了一些挑战。我们很难将其他城市的下载量与圣保罗的下载量结合起来进行合成控制。这个问题在这里更加严重,但一般来说,整个市场的规模都会不同,因此很难进行跨市场比较。因此,常用的方法是根据市场规模对结果进行归一化处理。这意味着将应用程序下载量除以城市人口数量,以创建一个归一化版本的结果。这个新的结果,即 app_download_pct,表示每日下载量占市场规模的百分比:

 df_norm = df.assign(app_download_pct = 100*df["app_download"]/df["population"])df_norm.head()

 

 继续进行探索性分析,您会发现在 2022-05-01 年为这些城市发起了在线营销活动。在分析时间窗口的剩余时间内,该活动也一直在进行:

 tr_period = df_norm.query("post==1")["date"].min()tr_periodTimestamp('2022-05-01 00:00:00')

现在是回顾一下您将要使用的一些面板符号的好时机。请记住,为避免混淆,我将用 D 表示干预变量,用 t 表示时间。T 将是期间数,T_{pre} 是干预前的期间数,T_{post} 是干预后的期间数。因此,当 D = 1 且 t > T_{pre} 时,干预就开始了。为了简化,我有时会使用后虚拟变量来表示 t > T_{pre}。干预和干预后的组合将用 W_{it}=D_{i}^{\star}Post_{t} 表示。

为了让您了解这些数据的情况,下图以浅灰色显示了三个接受治疗城市的平均结果的变化情况,背景则是对照城市的样本。水平虚线标出了干预后的起始时间:

从图中可以看出,干预后受治疗单位的结果有所上升,但并不是 100% 清晰。为了更精确,您必须对反事实进行估计,并将其与观察到的干预结果进行比较,从而得到对受干预者的平均治疗效果(ATT)的估计值:

ATT=E[Y|D=1,Post=1]-E[Y_0|D=1,Post=1]

这就是合成控制的作用所在。这是一种非常巧妙的方法,它利用(但不以)过去的结果来估计 E\big[Y_{0}\big|D=1,Post=1\big]

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

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

相关文章

python调用MATLAB出错matlab.engine.MatlabExecutionError无法调用MATLAB函数报错

python调用MATLAB出错matlab.engine.MatlabExecutionError无法调用MATLAB函数报错 说明(废话)解决方案MATLAB异常乱码python矩阵转MATLAB矩阵matlab.engine.MatlabExecutionError 说明(废话) python调用MATLAB,调用m文件中的函数,刚开始都没有问题&…

玄机-第一章 应急响应- Linux入侵排查

文章目录 前言简介应急开始准备工作步骤 1步骤 2步骤 3步骤 4步骤5 总结 前言 作者这一次也是差一点一次过,因为没有经验的原因,或者说题目对问题描述不太对,如果说是求黑客反连的ip的话我或许就知道要执行一下留下来的那个 .elf 可疑文件。 …

SpringCloud之Nacos集群,让Nacos不再是谜

Nacos集群搭建 集群结构 Nacos的集群环境我们采用这种结构:3个Nacos注册中心1个MySql Nacos集群 我们在windows上安装3个Nacos节点。分配配置相关信息 application.properties: 持久化数据到mysql中 修改 cluster.conf.example为cluster.conf然后在里面写上相关…

ARM体系结构和接口技术(六)KEY按键实验① 按键轮询检测

文章目录 一、按键轮询(一)分析按键的电路连接1. 按键原理图2. 按键消抖 二、分析芯片手册(一) GPIO章节(二)RCC章节 三、代码(一)key.c(二)key.h 一、按键轮…

lua 游戏架构 之 LoaderWallet 异步加载

定义了一个名为LoaderWallet class,用于管理资源加载器(Loader)。这个类封装了资源加载的功能,包括异步加载,以及资源的释放和状态查询。下面是对代码的详细解释: ### 类定义和初始化 这里定义了一个名为…

QT CNA上位机报错 解决方案

QT编译报错: -lControlCAN 解决方案 更换三个文件,即可解决(QT 自带的是32位库,应使用64位库文件)

【Vue】快速入门:构建你的第一个Vue 3应用

文章目录 一、Vue简介二、环境搭建1. 安装Node.js和npm2. 安装Vue CLI 三、创建Vue项目四、项目结构介绍五、组件基础创建一个组件使用组件 六、模板语法插值指令v-bindv-ifv-for 七、事件处理八、状态管理安装Vuex创建Store使用Store 九、路由基础安装Vue Router配置路由使用路…

PiT : 基于池化层Pooling layer的Vision Transformer

CNN的降维原理;随着深度的增加,传统CNN的通道维数增加,空间维数减少。经验表明,这样的空间降维对变压器结构也是有益的,并在原有的ViT模型的基础上提出了一种新的基于池的视觉变压器(PiT)。 1. 引言 ViT与卷积神经网络(CNN)有很大的不同。将输入图像分成1616小块馈送到变压…

力扣刷题之2959.关闭分部的可行集合数目

题干描述 一个公司在全国有 n 个分部,它们之间有的有道路连接。一开始,所有分部通过这些道路两两之间互相可以到达。 公司意识到在分部之间旅行花费了太多时间,所以它们决定关闭一些分部(也可能不关闭任何分部)&…

mysql group_concat()函数、行转列函数

文章目录 一、group_concat函数1.1、语法1.2、示例1.2.1、查询所有姓名,并显示在一行1.2.2、单列合并,指定冒号分隔符1.2.3、单列合并,去重1.2.4、多列拼接合并1.2.5、多列拼接合并,列和列之间指定分隔符 在mysql的关联查询或子查…

周报0708-0715(run代码)

本周围绕代码展开学习,学习了组内的FWI代码,主要收获是熟练了创建环境、匹配解释器、安装必要包的流程,以及搜索时的小Tips:比如需要的包whl(表示该包的编译版本)。遇到的问题仍然不少 三个主要问题&#…

「实战应用」如何用图表控件LightningChart JS创建树状图应用?

LightningChart JS是Web上性能特高的图表库,具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用,从而实现高刷新率和流畅的动画,常用于贸易,工程,航…

Go语言并发编程-同步和锁

同步和锁 概述 同步是并发编程的基本要素之一,我们通过channel可以完成多个goroutine间数据和信号的同步。 除了channel外,我们还可以使用go的官方同步包sync,sync/atomic 完成一些基础的同步功能。主要包含同步数据、锁、原子操作等。 一…

P3-AI产品经理-九五小庞

AI产品的数据流向 美团外卖,实时只能调度 美团28分钟送达需求的分析 AI产品常用的算法 常用算法 常见的AI算法解析 自然语言生成NLG语音识别:科大讯飞,通义千问 虚拟现实机器学习平台 决策管理系统生物特征识别技术 RPA(机器人流程自动…

ICE-BA原理

文章目录 主要思想约束建立IMU&Local & globalBAIMU预积分LocalBAGlobalBA求解方法常用的求解思路改进增量BA方法 论文: 《ICE-BA: Incremental, Consistent and Efficient Bundle Adjustment for Visual-Inertial SLAM》 ICE-BA:增量、一致且高…

多商户SaaS版扫码点餐系统开源

基于前后端分离的 多商户 SaaS 版扫码点餐系统,支持后台点餐、多人同时在线点餐、购物车共享、餐桌状态实时监控,菜品管理、餐桌管理等众多功能。 源码下载:多商户 SaaS 版扫码点餐系统.zip 功能特色 手机扫码点餐功能:用户可…

如何评价2023年国际高校数学建模竞赛B题?

问题1:在三星堆发现的一个外圆直径为85厘米,内圆直径为40厘米(假设)的青铜车轮,青铜车轮有5条车轴(射线),5条内弧线本质是双曲线,顶点与内圆相切,内弧双曲线的…

植物病害分级调研

Web of Science搜索,关键字“plant disease severity recognition”,共407篇,限制2023年以后共71篇 2019、2020 《Disentangled Representation Learning for Leaf Diseases Recognition》 2019 IF:0.8 论文:Disen…

Xcode进行真机测试时总是断连,如何解决?

嗨。大家好,我是兰若姐姐。最近我在用真机进行app自动化测试的时候,经常会遇到xcode和手机断连,每次断连之后需要重新连接,每次断开都会出现以下截图的报错 当这种情况出现时,之前执行的用例就相当于白执行了&#xff…

爬虫瑞数5案例:某大学总医院

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、瑞数简介 瑞数动态安全 Botgate(机器人防火墙)以“动态安全”技术为核心,通过动态封装、动态验证、动态混淆、动态令牌等技术对服务器网页底层代码持续动态变换,…