首页 > 编程语言 >【Python实战因果推断】45_因果实验设计1

【Python实战因果推断】45_因果实验设计1

时间:2024-07-24 19:56:54浏览次数:15  
标签:Python 城市 45 干预 df 实验 如果 数据 因果

目录

Geo-Experiments


在前文你学习了如何利用一段时间内的重复观察来帮助进行因果推理。现在,在本文中,你将从另一个角度来探讨同样的问题。如果你不必使用面板数据来确定干预效应,而是要设计一个实验来收集这些数据,会怎么样呢?本部分专门讨论了在简单的 A/B 测试行不通时的替代实验设计。

例如,让我们来看看营销问题。请记住,推断营销效果是一项挑战,因为你无法随机化那些尚未成为你客户的人。在线营销为您提供了归因工具,但归因与增量并不相同。在这种情况下,一种可行的替代方法是进行地理实验:对整个市场(如一个城市或一个州)进行实验,而将其他市场作为对照。这种方法将为您提供面板数据,您可以将学到的技术应用到面板数据中。然而你把面板数据当作给定数据,并没有学习如何在这样的实验中最好地选择处理市场和对照市场。本部分将弥补这一缺陷。第一部分将教你如何选择地理干预单位,以获得近似于整个市场(国家、州)接受干预时的效果估计值。

我们的想法是将分析单位从客户放大到城市或州。当然,这需要以样本量为代价,因为客户数量远远多于城市数量。在某些极端情况下,甚至不可能对城市进行随机化。例如,如果你是一家在当地经营的小公司,你可能没有太多的市场来进行实验。在极限情况下,你可能只有一个分析单位。幸运的是,还有一条出路。回转实验涉及多次开启和关闭某种干预。即使只有一个干预单元,这种方法也能奏效。例如,如果您是一家在单个城市经营的小型食品外卖市场,您想知道如果提高外卖费会发生什么情况,您可以多次提高和降低价格,并进行一系列前后分析。其余部分将进一步阐述这一观点以及如何设计回转实验。

Geo-Experiments

为了说明如何使用地理实验,让我们以上文中的相同数据和示例为例。同样,以城市为单位,以日期为时间维度;一个干预列,标记该城市是否最终被干预;一个干预后列,标记干预后时期。此外还有一些辅助列,如城市人口(记录于 2013 年,因此在时间上是固定的)和州。在这里,您要处理的是结果:应用程序下载量。由于我们的目标是决定对哪个城市进行干预,因此我们将舍弃干预后的时间段:

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

目的是选择一组能代表整个市场的城市。这样,如果你干预了这组城市,你就能知道如果干预了整个市场(即国家)会发生什么。在做任何花哨的事情之前,不妨先做一些简单的尝试。如果您有很多地理单元(如很多城市),也许简单的 A/B 测试就能很好地解决这个问题。只需随机选择一部分城市组成干预组即可。这里唯一的区别是,您将把分析单位从人(潜在客户)转移到整个城市。

不过,要知道多少个城市才足够还是很困难的。您可以从样本量公式(n=16\sigma^{2}/\delta^{2})开始计算。例如,如果您希望检测到 5% 的效应,那么它将告诉您需要大约 4 万个城市来进行实验:

 detectable_diff = df["app_download"].mean()*0.05
 sigma_2 = df.groupby("city")["app_download"].mean().var()
 np.ceil((sigma_2*16)/(detectable_diff)**2)
 
 36663.0

但这个公式没有考虑到每个城市的结果方差不同(人多的城市方差较小),也没有考虑到可以利用对同一单位的重复观测来提高估计的精度。即便如此,4 万个城市似乎也比您的数据中的 50 个城市多得多。那么,如果单位不足,该怎么办呢?

在考虑不同的实验方案时,必须考虑到如何解释实验结果。例如,如果您打算使用差分法,您可以找出结果变量趋势相似的几对城市,然后在每对城市中进行随机分配。其中一个城市将接受干预,而另一个城市将作为对照。不过,值得注意的是,差分法估算的是干预对被干预者的平均治疗效果(ATT)。如果您想知道干预的总体效果,比如在全国范围内部署营销活动,ATT 估计值可能无法还原这一点。我们将探讨一种思路,旨在通过确定一个能代表整个市场的干预组来最大限度地提高实验的外部有效性。

标签:Python,城市,45,干预,df,实验,如果,数据,因果
From: https://blog.csdn.net/qq_32146369/article/details/139483205

相关文章

  • 【Python实战因果推断】51_因果推理概论1
    目录WhatIsCausalInference?WhyWeDoCausalInferenceMachineLearningandCausalInferenceWhatIsCausalInference?因果关系可能在你的认知中是一片危险的知识领域,你被告诫要避免涉足。你的统计学老师可能反复强调过,“相关性不等于因果性”,混淆两者可能会让......
  • 【Python实战因果推断】53_因果推理概论3
    目录CausalModelsCausalModels因果模型是一系列分配机制的集合,我们用符号来表示。在这个机制里,我使用u来代表模型外部的变量,也就是说,我不关心它们是如何生成的。而其他的变量则是我非常关注的,因此它们被纳入了模型之中。最后,存在函数f,用来描述一个变量如何映射到另一个......
  • 【Python实战因果推断】52_因果推理概论2
    目录AssociationandCausationTheTreatmentandtheOutcomeTheFundamentalProblemofCausalInferenceAssociationandCausation直观上,你大概明白为什么相关性并不等于因果性。如果有人告诉你顶级咨询能促使你的业务改善,你难免会持怀疑态度。你怎么能确定是咨询......
  • Python类与面向对象编程
    大家好!今天我们将探讨Python中的类及其在面向对象编程(OOP)中的应用。面向对象编程是一种编程范式,它使用“对象”来模拟现实世界的事务,使代码更加结构化和易于维护。在这篇文章中,我们将详细了解类和实例的概念、'self'关键字的作用、魔法函数的定义以及构造函数和析构函数的用......
  • Python基础入门(六)
    Python基础入门(六)一、本节目标掌握文件的概念和操作:文本文件、CSV文件综合案例:奖励富翁系统、汽车租聘系统二、文件介绍文件是计算机中用于存储数据的一种载体,一般存储在磁盘上文件通过以一定的格式和结构存储数据,可以包含文本、图像、音频、视频等各种类型的信息文件在......
  • Python 中 eval 与 exec 的相同点和不同点
    相同点在Python中,eval和exec都可以用来执行动态生成(dynamicallygenerated)的代码。两者在Python3中的函数声明基本相同,如下所示:eval(expression[,globals[,locals]])exec(object[,globals[,locals]])其中,输入参数中,globals必须是字典(dict)类型,表示全局空间的变量,......
  • Python获取list中指定元素索引的两种方法
    在平时开发过程中,经常遇到需要在数据中获取特定的元素的信息,如到达目的地最近的车站,橱窗里面最贵的物品等等。怎么办?看下面方法一:利用数组自身的特性list.index(target),其中a是你的目标list,target是你需要的下标对应的值li=[10,8,9,26,72,6,28]print(li.index(8))但是,......
  • Python模块重载的五种方法
    1.环境准备新建一个foo文件夹,其下包含一个bar.py文件$treefoofoo└──bar.py0directories,1filebar.py的内容非常简单,只写了个print语句print("successfultobeimported")只要bar.py被导入一次,就被执行一次print2.禁止重复导入'由于有sys.module......
  • Python打印类的属性
    一、使用__dict__打印类的属性classPerson:def__init__(self,name,age):self.name=nameself.age=ageperson=Person("Tom",18)print(person.__dict__)使用__dict__方法可以直接打印出类的属性及其对应的值。上述代码中,我们首先定义了一个P......
  • 什么是Python中的闭包与装饰器
    1.闭包闭包(Closure)是指在一个函数内部定义的函数,并且这个内部函数可以访问其外部函数作用域中定义的变量。在Python中,闭包是一个强大且灵活的编程工具,可以实现许多有趣和实用的功能。让我们通过一个简单的示例来说明闭包的基本概念:defouter_function(x):definner_f......