【Python实战因果推断】30_双重差分1

news2024/9/28 13:26:29

目录

Panel Data


在讨论了干预效果异质性之后,是时候转换一下思路,回到平均干预效果上来了。在接下来的几章中,您将学习如何利用面板数据进行因果推断。

面板数据是一种跨时间重复观测的数据结构。在多个时间段观察同一单位,可以了解同一单位在干预前后的情况。这就使得面板数据成为在无法进行随机化时确定因果效应的一种有前途的替代方法。当你有观察性(非随机)数据,并且可能存在未观察到的混杂因素时,面板数据方法是正确识别干预效果的最佳方法。

在本章中,你将了解为什么面板数据对因果推断如此重要。然后,您将学习最著名的面板数据因果推理估计器:双重差分及其多种变体。为了保持趣味性,所有这些都将在计算离线营销活动效果的背景下进行。

Panel Data

为了激发对面板数据的使用,我将主要谈谈因果推理在市场营销中的应用。市场营销之所以特别有趣,是因为它在进行随机实验方面存在众所周知的困难。在市场营销中,你往往无法控制谁会接受干预,也就是说,谁会看到你的广告。当一个新用户访问您的网站或下载您的应用程序时,您无法很好地知道该用户是因为看到了您的广告活动还是因为其他原因。即使您知道客户点击了您的某个营销链接,也很难判断他们是否会购买您的产品。例如,如果客户点击了您赞助的谷歌链接,如果他们真的在寻找您的产品,他们也可能会向下滚动一下,然后点击未付费的链接。


线下营销的问题更大。你怎么知道在一个城市投放广告牌是否能带来超过成本的价值?因此,市场营销中常见的做法是进行地理实验:您可以在某些地理区域部署营销活动,而不在其他区域部署,然后进行比较。在这种设计中,面板数据方法尤其有趣:您可以在多个时间段内收集整个地域(单位)的数据。就像我说过的,面板数据是指在多个时间段 t 内有多个单位 i。在一些市场网站中,单位可能是人,t 可能是天或月。但单位并不一定是单个客户。例如,在线下营销活动中,i 可以是城市,您可以在这些城市放置产品广告牌。

下面的数据框 mkt_data 是一个面板格式的营销数据。每一行都是(日期、城市)的组合:

 import pandas as pd
 import numpy as np
 mkt_data = (pd.read_csv("./data/short_offline_mkt_south.csv")
 .astype({"date":"datetime64[ns]"}))
 mkt_data.head()

该数据框按日期和城市排序。您关心的结果变量是下载次数。由于 t 将用来表示时间,为了避免混淆,从现在起,我将用 D 来表示干预。另外,在面板数据文献中,处理通常被称为干预。我将交替使用这两个术语。在本例中,营销团队在 Di = 1 的城市发起了线下活动。至于时间维度,让我们确定 T 将是期间数,T_{pre} 是干预前的期间数。你可以把时间向量看作t=\left\{1,2,\ldots,T_{pre},T_{pre}+1,\ldots,T\right\}. 干预后的时间段 T_{pre}, ... . , T 被方便地称为干预后。为了简化符号,我通常使用 "后 "虚拟变量,当 t > T_{pre} 时为 1,否则为 0。

干预只发生在干预后时期(t > T_{pre})的治疗单位(D = 1)。干预和干预后的组合将用 W=D^{\star} \mathbb{1}\left(t>T_{pre}\right)W=D^{\star} Post 表示。下面是营销数据中的一个示例:

 (mkt_data
 .assign(w = lambda d: d["treated"]*d["post"])
 .groupby(["w"])
 .agg({"date":[min, max]}))

如您所见,干预前的时间段为 2021-05-01 至 2021-05-15,干预后的时间段为 2021-05-15 至 2021-06-01。

这个数据集还有一个 τ 变量来表示干预效果。由于该数据是模拟的,因此我很清楚该效应是什么。我把它包含在这个数据集中,只是为了让你检查一下,你将要学习的方法是否能很好地识别因果效应。但不要习惯它。在现实生活中,你不会有这样的奢侈。


现在,您对数据有了更好的了解,也学会了一些新的技术符号,您可以更准确地重述您的目标。您想了解线下营销活动在干预发生后对受干预城市的影响:

ATT=E\Big[Y_{it}(1)-Y_{it}(0)\Big|D=1,t>T_{pre}\Big]

这就是 ATT,因为您只想了解活动启动t>T_{pre} 后对 D = 1 的城市产生的影响。由于 Y_{it}(1) 是可观测的,因此您可以通过推算缺失的潜在结果 E[Y(0) | D=1,Post=1] 来实现这一目标。

图 显示了为什么用单位时间矩阵表示观察到的结果时,面板数据会变得特别有趣。该矩阵突出了这样一个事实,即只有在干预后的时间段内,才能观察到被干预单位的 \text{Y(1)},而对于所有其他单元,您可以观察到 \text{Y(0)}。尽管如此,这些单元仍可用于估计缺失的潜在结果E\Big[Y(0)\Big|D=1,t>T_{pre}\Big]。您可以通过使用干预后期间对照单元的结果来利用单元间的相关性,也可以通过使用干预前期间受治疗单元的结果来利用跨时间的相关性。

图 还说明了为什么在大多数面板数据应用中应该关注 ATT:对被处理单位的 \text{Y(0)} 进行推算要容易得多。如果您想要的是 ATC(对对照组的平均影响),则必须计算 \text{Y(1)}。但是,您只有一个单元格可以观察到该潜在结果。现在,您已经对面板数据有了简单的了解,是时候探索一些利用面板数据来识别和估计干预效果的机制了。

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

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

相关文章

VMware虚拟机使用标准分区后对分区进行扩容

前言: 使用虚拟机创建系统后,/ 盘 想要扩容需要几步才能实现,下面将介绍具体流程 确定根分区磁盘以及分区号,和起始扇区和结束扇区 # 查看磁盘名称和分区 # 如下可看出根分区为 /dev/sda2 ,磁盘为sda [root192 ~]# ls…

【C++】继承(二)

目录 5、继承与友元 6、继承与静态成员 7、复杂的菱形继承和菱形虚拟继承 8、继承的总结与反思 5、继承与友元 友元关系不能继承,也就是说父类的友元不能访问子类的私有或保护的成员 class Student; class Person { public:friend void Display(const Person&a…

Struts 2.0.0 至 2.1.8.1 远程命令执行漏洞(CVE-2010-1870)

前言 CVE-2010-1870 是一个存在于 Apache Struts 2 中的漏洞,特别是在 Struts 2 动作框架中。这个安全缺陷允许远程攻击者通过操纵动态方法调用(DMI)功能在服务器上执行任意代码。当 DMI 功能启用时,框架可以接受和处理来自用户输…

交叉熵损失函数的使用目的(很肤浅的理解)

第一种使用方法 import torch from torch import nn # Example of target with class indices loss nn.CrossEntropyLoss() input torch.randn(3, 5, requires_gradTrue) target torch.empty(3, dtypetorch.long).random_(5) output loss(input, target) output.backward(…

初识c++(类与对象——上)

一、类的定义 1、类定义格式 • class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省 略。类体中内容称为类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或 者成员函…

内存巨头SK海力士正深化与TSMC/NVIDIA合作关系,开发下一代HBM

据BusinessKorea报道,内存巨头SK海力士正深化与台积电(TSMC)及英伟达(NVIDIA)的合作关系,并计划在9月的台湾半导体展(Semicon Taiwan)上宣布更紧密的伙伴关系。 SK海力士与台积电的合作历史已久。2022年,台积电在其北美技术研讨会上宣布成立O…

docker-2

27.构建python应用镜像-dockerfile实践项目 1.基于官方的镜像,构建python代码运行环境 dockerfile 2.运行镜像,开启一个读写的容器空间(定制操作,将代码丢进去,运行调试) 3.提交这个变化的容器层数据&#…

打工人小强向老板提了2次异地组网方案全被否!直言不想干了!

前几天有宝友在微信群咨询组网问题,非常具有代表性。关于组网方案问题,在此小宝给大家分享一下。 情况是这样的: 运维小伙小强,就职互联网行业,目前维护3个分公司网络,分别是: 1、北京&#…

Android数据库基础

目录 1、安卓数据存储方式 2、数据库事务 数据库事务的特性(ACID) 事务的隔离级别 事务总结 3、ContetProvider 作用 ​编辑 统一资源标识符URI ​编辑 MIME类型 ContentProvider主要方法 4、ContentResolver 作用 主要方法 使用案例 辅助工具类 ContentUris Uri…

element plus 实现跨页面+跨tab栏多选

文章目录 element plus 层面数据层面 菜鸟好久没写博客了,主要是没遇见什么很难的问题,今天碰见了一个没有思路的问题,解决后立马来和大家伙分享了! 菜鸟今天要实现一个需求,就是:实现跨页面跨 tab栏 多选…

【RHCE】综合实验0710综合实验

题目: 主服务器192.168.244.130 防火墙允许服务的放行: selinux放行 [rootlocalhost ~]# ll -Z /nfs/rhce 总用量 4 -rw-r--r--. 1 root root unconfined_u:object_r:default_t:s0 8 7月 10 16:52 index.html -rw-r--r--. 1 nobody nobody system_…

Vue2打包部署后动态修改后端接口地址的解决方法

文章目录 前言一、背景二、解决方法1.在public文件夹下创建config文件夹,并创建config.js文件2.编写config.js内容3.在index.html中加载config.js4.在封装axios工具类的js中修改配置 总结 前言 本篇文章将介绍使用Vue2开发前后端分离项目时,前端打包部署…

分布式应用系统设计:即时消息系统

即时消息(IM)系统,涉及:站内消息系统 组件如下; 客户端: WEB页面,IM桌面客户端。通过WebSocket 跟ChatService后端服务连接 Chat Service: 提供WebSocket接口,并保持跟“客户端”状态的维护。…

ArrayList----源码分析

源码中的简介: List接口的可调整数组实现。实现所有可选列表操作,并允许所有元素,包括null。除了实现List接口之外,这个类还提供了一些方法来操作内部用于存储列表的数组的大小。(这个类大致相当于Vector,只是它是不同…

Web知识库应用程序LibreKB

什么是 LibreKB ? LibreKB 是一款知识库 Web 应用程序。免费、开源、自托管,基于 PHP/MySQL。 官方并没有 Docker 镜像,老苏这次图省事,并没有像往常一样构建一个镜像,而是基于 Docker 搭建了一个 LAMP 环境&#xff0…

ServiceDesk Plus再次获得国际认可的粉象认证

我们又一次做到了!ServiceDesk Plus 现已获得 CMDB 和发布部署过程的 PinkVERIFY™ (粉象)认证。 通过PinkVerify 认证,我们现在已经获得了七项核心 IT 服务管理实践: 1、事件管理 2、问题管理 3、变更管理 4、资产管…

dev小熊猫,clion设置模版教程

首先点击工具 然后进入设置 ,找到代码模版 然后点击c模版,进入之后直接输入模版之后,(还没有结束!!!),先点击应用,然后是确定!!&#…

maven6——生命周期与插件

生命周期 生命周期:指运行的阶段(比如几岁) maven有三个生命周期如下,每个生命周期大概做的事情如下: 注意:每次执行某个,他会把上面的都执行一遍 插件: 每一个插件&#xf…

【SQL】DML、DDL、ROLLBACK 、COMMIT详解

DML DML(Data Manipulation Language)数据操作语言,是用于对数据库中的数据进行基本操作的一种编程语言。DML是数据库管理系统(DBMS)中的一个重要部分,它允许用户或应用程序对数据库中的数据进行增、删、改…

Pytorch张量

在conda的环境中安装Jupyter及其他软件包 Pytorch 建立在张量(tensor)之上,Pytorch张量是一个 n 维数组,类似于 NumPy 数组。专门针对GPU设计,可以运行在GPU上以加快计算效率。换句话说,Pytorch张量是可以运…