目录
在前文你学习了如何利用一段时间内的重复观察来帮助进行因果推理。现在,在本文中,你将从另一个角度来探讨同样的问题。如果你不必使用面板数据来确定干预效应,而是要设计一个实验来收集这些数据,会怎么样呢?本部分专门讨论了在简单的 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 测试就能很好地解决这个问题。只需随机选择一部分城市组成干预组即可。这里唯一的区别是,您将把分析单位从人(潜在客户)转移到整个城市。
不过,要知道多少个城市才足够还是很困难的。您可以从样本量公式()开始计算。例如,如果您希望检测到 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