本文以巴斯克地区恐怖活动对经济影响为案例,系统介绍了合成控制组方法的核心原理与Python实现流程。文章从反事实定义出发,对比了双重差分法的局限性,演示了如何通过线性回归与Ridge回归构建合成控制组,并介绍了安慰剂检验与p值计算等统计推断手段,是准实验方法在区域政策评估中的经典应用。
1 引言
1.1 合成控制组的重要性
当像《华盛顿邮报》这样的报纸写一篇关于统计方法的文章时,人们可能会感到好奇。统计建模通常不是最激动人心的话题。然而,在2015年(是的,那是很久以前了),《华盛顿邮报》发布了一篇描述合成控制组方法的文章。如此有声望的来源在讨论它,这暗示了它的重要性。本文考察了因果推断工具箱中最关键的组成部分之一:合成控制组。
1.2 经典文献背景
本文基于Alberto Abadie和Javier Gardeazabal的一篇开创性文章《冲突的经济成本:巴斯克地区案例研究》。他们的分析不仅考察了恐怖活动对巴斯克地区经济发展的影响,而且为因果推断研究树立了新的标准。
2 案例背景:巴斯克地区的恐怖活动
2.1 问题描述
让我们从对所分析问题的简要描述开始。在20世纪70年代中期,巴斯克地区(西班牙的一个地区)受到了分离主义组织ETA实施的恐怖活动的影响。该组织希望这个地区脱离西班牙独立。上述文章的作者评估了暴力对巴斯克地区经济活动的影响。
从因果推断的角度来看,这是一个完美的探索主题。作为第一次尝试,我试图使用双重差分法找到答案。你可以在下面的链接中找到这种方法的详细信息,数据集描述也在下面的链接中。这种方法在将巴斯克地区的经济发展与类似地区(如加泰罗尼亚)进行比较时效果很好。然而,当比较多个地区时,它效果不佳。
2.2 双重差分法的局限
这是因为平行趋势假设与我们的数据不匹配。下图显示,不同的西班牙地区在1975年之前经历了不同的经济增长率。因此,我们必须找到另一种可靠的方法来检测因果效应。合成控制组来拯救我们了。

3 反事实与因果推断的核心问题
3.1 处理效应的定义
在解释这种方法之前,让我们考虑一下我们想要实现什么。给定一组不同的协变量X,我们如何找到活动T对结果Y的因果效应?在我们的案例中,我们想确定恐怖活动对巴斯克地区经济发展的影响。
让我们称T为我们想要找到其效应的活动。Y是结果变量。处理效应(用字母delta表示)定义为:

我们的目标是获得在给定活动存在下结果变量与没有指定活动的相同结果变量之间的差异。这是一个大胆的公式,因为我们无法观察方程的第二部分。上面的方程包含反事实项 P(Y | T = 0)。在因果推断中,反事实是一个假设情景,代表如果特定事件或条件没有发生会发生什么。
3.2 反事实的不可观测性
在分析的问题中,方程的第一项包含实际数据------受恐怖活动影响的巴斯克地区的GDP。反事实是一个不受恐怖活动影响的假设巴斯克地区。为了说明这一点,让我们考虑一个巴斯克地区没有经历恐怖活动的假设情景。在这个情景中,我们可以估计可能发生的潜在GDP增长。
但在给定时间,只有一个巴斯克地区。反事实只是一个假设的世界。上面的方程引入了两种世界状态,两种不同的现实。我们只能观察其中一种------这是因果推断的根本问题。
不可能在同一个单位中观察到两个不同版本的现实。然而,我们仍然可以尝试根据可用信息和巧妙的技术来估计它。为了找到我们问题的答案,我们需要确定如果ETA在20世纪70年代中期没有开始他们的暴力活动,巴斯克地区会发生什么。我们必须找到反事实。
3.3 寻找比较组
我们对反事实的追求引导我们想到巴斯克地区的"克隆"概念。这不是寻找替代现实,而是在现实世界中追求另一个反映巴斯克地区但不受给定活动影响的单位。这种方法使我们离目标更近了一步。
当然,我们永远不会找到任何社会实体的完美克隆。我们必须估计它。许多评估方法的线索是找到有效的比较。这个组必须尽可能类似于受影响的单位。如果我们实现了这一点,我们将有以下组:
- 处理组------受到处理影响的单位
- 比较组------未受到处理影响但在所有其他标准上类似于处理组的单位
我们假设处理组在没有处理的情况下会有与比较组相同的结果变量值(因为它们是相同的)。因此,处理之后这两个组之间的任何差异必须 仅仅由处理引起。这种方法使我们能够确定给定现象的因果效应。
这个想法很简单,但我们还有很多工作要做。我们如何找到理想的比较组?最优的方法是进行随机实验,这在许多现实世界中是不可行的。我们必须寻找次优的解决方案。
所有非实验方法都要求我们调查特定问题并审查现有信息,以找到类似于受影响组的比较单位。我们已经研究了双重差分法;现在,是时候探索合成控制组了。
4 捐赠池
4.1 捐赠池的概念
什么是估计恐怖活动对巴斯克地区经济因果效应的最佳比较组?我们已经回答了这个问题------其他西班牙地区。我们有他们多年来人均GDP的数据。剩下的任务是确定将它们组合成单个实体的方法。正如我们之前看到的,由于缺乏平行趋势,我们不能使用双重差分。
但我们可以使用合成控制组!这种方法允许我们创建比较组的加权组合来创建_合成控制组_。我们将把许多潜在比较单位的数据组合成一个。这些将成为所谓的捐赠池的一部分。
我们要做的就是权衡这些单位中的每一个,它们的组合权重应该创建一个尽可能类似于处理组的比较组。我们必须使它们在处理之前的时期具有可比性。
合成控制模型最优地选择一组权重,当应用于一组相应单位时,产生对已接受处理单位的估计反事实。
为了创建合成控制组,我们只能查看处理前时期,因为这是它们应该尽可能相似的时期。
为了评估处理效应,我们可以将处理组中的结果变量与合成控制组中观察到的值进行比较。前者是我们的反事实------它是估计如果感兴趣的事件没有发生,处理组会发生什么的代理。
对于巴斯克地区的问题,我们有应用该方法所需的所有要素。我们有关于巴斯克地区以及捐赠池中所有其他地区的数据。现在,我们必须找到一种方法来组合所有剩余地区,以创建一个尽可能类似于1970年代前巴斯克地区的组。
4.2 创建合成控制组的步骤
我们快到了。让我们总结一下到目前为止采取的方法。要创建合成控制组,我们应该:
- 定义我们的捐赠池
- 将捐赠池单位组合成一个,以在处理前类似于处理组
- 计算处理效应
我们已经定义了捐赠池。现在,关键的一步摆在我们面前。我们如何将剩余的西班牙地区组合起来创建一个合成的巴斯克地区?为了完成这一点,我们必须确定每个地区的相应权重。这些权重必须类似于巴斯克地区处理前的GDP趋势。幸运的是,我们已经有可以应用的统计方法------老牌的线性回归。
我们可以将所有西班牙地区的人均GDP对巴斯克地区进行回归。在这样的回归中,所有其他省份的GDP是自变量,巴斯克地区的GDP是因变量。我在这里减少了细节,你可以找到众多资源,用统计和技术信息更好地解释这种方法。由于我们想要应用这种方法,让我们只关注必要的方面。我们将使用最简单(但仍然强大)的方法来看到这种方法的力量。
我们将使用与之前双重差分研究相同的巴斯克数据集。以下是描述给定西班牙地区在给定年份的人均GDP的数据。为了计算合成控制组,我们将只使用1975年之前的数据点:

首先,我们必须转换数据以构建合成组。然后我们不得不将其从面板结构中透视。每个地区必须存储在单独的列中。行将指示每年,GDP作为值。这可以使用pandas透视快速完成。
转换后的数据集如下所示:

我们需要进行的另一个转换是分离因变量和自变量。我们必须将巴斯克地区存储在一个单独的序列中,并从上面的表格中删除它。
数据准备好了。如果值在不同的尺度上,我们必须标准化它们,但这里不需要,因为所有地区的GDP都在相似的尺度上。
5 线性回归与过拟合
5.1 构建第一个合成控制组
让我们构建第一个合成控制组。我们将从简单的线性回归开始。它将给每个地区赋予权重,以最小化它们与巴斯克地区之间的误差平方和。由于我们想要进行预测,我将使用scikit-learn库。
瞧,模型已经创建好了。现在,我们可以将其应用于我们的原始数据集。我们必须制作另一个透视表。这次包含所有年份,但仍然没有巴斯克地区(因为我们不能用它来预测):
作为最后一步,我们必须将合成控制组结果应用于包含巴斯克地区的主表。我们将使用这种结构来计算处理效应。

上表中的最后一列包含合成控制组预测。我们已经创建了所有地区的线性组合,这应该尽可能类似于巴斯克地区。
5.2 过拟合问题
或者它太接近了?当我们比较1955年至1975年之间的值时,我们发现合成控制的人均GDP与巴斯克地区几乎相同。它表明了过拟合。在得出结论之前,我们终于可以看看合成控制和巴斯克地区的趋势。

看起来我做错了什么。自1975年以来,巴斯克地区的趋势远高于合成控制组。确实发生了过拟合。我们的合成控制组在处理前太好了------它只是模仿巴斯克地区的行为,但不能很好地泛化。我们必须约束线性回归。
这张图显示了两件重要的事情。首先,存在比标准线性回归更好的工具来创建合成控制组。其次,为了评估结果,我们必须应用领域知识,将其与其他方法(如双重差分)进行比较,并使用常识。任何奇怪的结果,如上面的结果,都必须经过验证。
6 约束系数
6.1 Ridge回归的应用
我们回到了起点。有许多方法可以防止线性回归过拟合。最常用和最有力的是Ridge和Lasso回归。两者都应用正则化参数,防止权重变得太高。
Ridge回归有效地收缩参数,而Lasso更进一步,将其中一些设置为零。我将使用Ridge回归,因为即使最不相似的地区也可以对合成控制组权重做出轻微贡献。我们可以用scikit-learn构建Ridge回归:
我在这里应用了5折交叉验证,它将选择最优的正则化参数。在重复我们对上述线性回归进行的转换后,我们得到了一个新的解决方案:

现在看起来好多了。1975年前的拟合并不完美,但合成控制组类似于巴斯克地区。1975年后,巴斯克地区与对照组相比显著下降。
合成控制组显示了如果ETA恐怖活动没有发生,巴斯克地区会发生什么。蓝线和橙线之间的差异就是处理效应------恐怖活动导致的巴斯克地区人均GDP损失。
6.2 各地区权重分析
在计算处理效应之前,让我们更多地探索合成控制组。我们可以检查每个地区的权重。

值得注意的是,一些地区做出了积极贡献,而另一些地区则做出了消极贡献。它提出了一个重要问题:我们能否假设某些地区对创建合成控制组做出消极贡献?将每个权重限制在0到1之间是否更合适?
Abadie、Diamond和Harmuller在2010年的文章中解决了这个问题。他们应用了优化约束来以这种方式限制权重。我建议阅读这篇文章,以更深入地了解他的方法。
从那以后,一些库实现了合成控制组方法。我不会在这里实现这种优化,因为它不会显著扩展我们对这种技术的知识,也不会增强巴斯克地区场景中的模型。
7 处理效应估计
正如我们之前确定的,合成控制组是反事实。我们假设如果事件没有发生,处理组会有与对照组相同的结果变量值。
为了估计恐怖活动的影响,我们可以将1975年后巴斯克地区的GDP与合成控制组进行比较。让我们绘制差异。

1975年后,巴斯克地区的GDP比没有恐怖活动的情况低了将近一个单位。在整个1980年代,这一差距一直保持很大,直到1990年代才开始缩小。它展示了恐怖活动的强大影响以及暴力对该地区的影响程度。1990年代的反弹与结束暴力 streak(一连串)的和平进程有关。
我们还通过计算1975年后两个组的平均人均GDP来计算恐怖活动的平均效应。
上面的代码显示,平均而言,恐怖活动使巴斯克地区的人均GDP减少了0.84个单位。
失去机会的影响是显著的,表明打击恐怖主义对于维持经济繁荣的良好前景至关重要。这个结果与我们在与加泰罗尼亚的双重差分估计中得到的结果相似,这支持了我们最初的假设,即这两个地区之间存在密切的预处理相似性。
8 安慰剂检验
8.1 安慰剂检验的原理
在结束之前,让我们解决一个关键问题:这些结果有多可靠?它们可能只是偶然吗?合成控制组方法提供了一种直接的方法来计算我们对获得结果的信心。这是通过安慰剂检验完成的。
该测试的目标类似于临床试验中的安慰剂测试。它涉及将合成控制组应用于一组没有接受处理但被当作接受了处理的假处理单位。通过比较安慰剂单位中的处理效应与受影响单位的结果,我们可以确定感兴趣事件的统计显著性。进行安慰剂检验的逐步算法如下:
- 指定安慰剂单位------在我们的案例中,我们将迭代地将每个地区视为受影响组。
- 构建合成控制组------在这一步,我们将像为巴斯克地区一样创建合成控制组,但我们将使用安慰剂单位作为目标地区。
- 计算处理效应------合成控制组与安慰剂地区之间的人均GDP差异。
- 对所有地区重复步骤1-3。
- 通过测量安慰剂地区的GDP差异比实际对照组中的差异更大的频率,计算_原始_合成控制组的统计显著性。
创建一个函数来计算合成控制组是有帮助的,因为我们必须重复这个过程几次。我将把上述所有步骤打包成一个函数,允许我们选择不同的地区作为受影响单位。我只是一个分析师,不是程序员,所以如果它不是最优的方式,请原谅(但它有效,所以没问题🙂)。
该函数的输出是带有合成控制组估计的数据框,以及它们与目标地区实际值之间的差异。
下面的代码添加了一个我们尚未讨论的额外注意事项。它排除了预处理合成控制组拟合不佳的地区,使我们能够获得更稳定的结果。我们可以遵循Abadie(2010)中提出的程序,排除每个MSE比巴斯克地区高五倍以上的所有地区。
这个附加条件允许我们只包括那些具有坚实预处理拟合的安慰剂单位。我们现在可以实际执行测试了。在这一步,我们必须通过多次运行该函数来遵循安慰剂测试程序,每次都选择不同的地区,就像它受到了ETA恐怖活动的影响一样。
安慰剂测试只排除了一个地区,这表明所有单位的预处理拟合都很好。
执行上述代码后,我们获得了一系列包含安慰剂合成控制组的数据框。最简单形式的安慰剂测试遵循一个简单的程序。
让我们绘制安慰剂地区与我们从巴斯克地区合成控制组获得的结果之间的GDP差异。

显而易见,巴斯克地区可见的效应非常不寻常。安慰剂地区没有如此规模的立即负面影响,但实际合成控制组迅速变得与安慰剂单位截然不同。
8.2 p值计算
我们可以通过计算合成控制组的p值来确认视觉效果。计算合成控制组方法的p值没有唯一正确的选项。对于我们的练习,我决定使用以下程序。
我们将遍历每个处理后年份,从1975年到1997年。每年,我们将计算巴斯克地区与合成控制组之间的GDP差异。然后我们将遍历每个带有其合成控制组的安慰剂地区,并计算该年的GDP差异。
结果,当安慰剂效应大于巴斯克地区获得的效应时,我们将布尔变量存储为True,否则为False。这个程序将为每年和每个安慰剂组重复。
为了计算p值,我们只需要计算_diff_list_的平均值。它计算安慰剂效应比巴斯克地区合成控制组获得的效应更大的比例。
计算平均值后,我们获得了以下结果:

p值低于0.05的标准阈值,这表明巴斯克地区研究获得的效应是不寻常的。我们可以拒绝零假设,即恐怖活动没有对巴斯克地区人均GDP产生负面影响。
9 总结
本文描述的展示了合成控制组的力量和有用性。它是因果推断工具箱中最好的工具之一,因为它允许我们创建反事实而不假设平行趋势。当传统的实验方法如随机对照试验不可行或不道德时,它特别有用。
该方法当然并不完美。由于该方法基于未处理单位的历史数据构建对照组,它假设协变量与结果之间的关系随时间保持稳定(在没有处理的情况下)。此外,我们只能有时确定我们感兴趣的事件是唯一影响受影响组结果的事情。这样的假设需要很多领域知识和对分析问题的了解。因此,我们不能将其作为解决这些问题的黑箱算法来应用。
这种方法对于评估聚合层面的不同干预非常有益。在特定地区和国家层面应用合成控制是合成控制组的最佳应用。这种方法的相对简单性使其更受欢迎。我很遗憾最近才了解到它,我希望这篇文章能为合成控制组的普及做出一点贡献。
10 参考文献
Abadie, Alberto & Diamond, Alexis & Hainmueller, Jens, 2010. "Synthetic Control Methods for Comparative Case Studies: Estimating the Effect of California's Tobacco Control Program," Journal of the American Statistical Association, American Statistical Association, vol. 105(490), pages 493-505.
Abadie, Alberto & Gardeazabal, Javier. (2003). The Economic Costs of Conflict: A Case Study of the Basque Country. American Economic Review. 93. 113-132. 10.1257/000282803321455188.
https://matheusfacure.github.io/python-causality-handbook/15-Synthetic-Control.html