双重差分法(DID):算法策略效果评估的利器

您所在的位置:网站首页 did交叉项不显著 双重差分法(DID):算法策略效果评估的利器

双重差分法(DID):算法策略效果评估的利器

2023-03-12 05:51| 来源: 网络整理| 查看: 265

文章目录 算法评估DID原理简单实例Python实现

算法评估

作为一名算法出身的人,曾长期热衷于算法本身的设计和优化。至于算法的效果评估,通常使用公开数据集做测试,然后对比当前已公开的结果,便可得到结论。

但是在实际落地过程中,却遇到了问题:没有公开数据集;即便有,也依然有必要在实际场景下再做验证,毕竟公开数据集和实际场景往往都有很大区别。

理论上来说,新研发了一个算法后,需要和业务已经在使用的人工经验(被理解为一种特殊的策略)做对比;算法迭代后,前后两个版本的算法也需要做对比。

不失一般性,假设在某个区域内,评价指标为最大化 J J J,此前使用算法A,当前有了新算法B,该如何评估B相比A是否能更好地促进 J J J的提升呢?

理想情况下,是在该区域的两个平行时空中,一个使用算法A,另一个使用算法B,分别得到指标 J A J_A JA​和 J B J_B JB​。然后比较两个指标的优劣,如果 J B J_B JB​指标更好,那么算法B可以被认为是更有利于指标 J J J的提升。

但在任意给定的时间点,该区域实际上只能处于一种状态,即只使用算法A或者只使用算法B,因此只能观察到 J A J_A JA​或 J B J_B JB​。

因此,需要寻找两个相同的区域,然后分别使用A算法和B算法,再基于得到的指标进行算法优劣的评估。当然,要找到两个相同的区域,在现实中是很困难的;但是如果区域不同,无论控制其多少个参数相同,都有可能让 J J J受到某些未观测参数的影响。

如果退而求其次,不要求完全相同,是否还有机会去科学地评估算法A和B呢?答案是有的,就是本文即将介绍的双重差分法(difference-in-differences,DID)。

DID原理

DID的原理如下图所示。选定两个区域1和2,以算法B的干预时刻为基准,将时间定义为干预前和干预后。在干预后,区域1保持不变,继续使用算法A,最终可以得到A增量;区域2使用算法B后,得到的B增量可以被拆解为两个部分:区域2的自然增量A’,以及算法B带来的纯增量B‘。A’可以理解为不使用算法B时区域2的增量。如果在干预前,两个区域针对指标 J J J的变化趋势保持一致,那么我们可以基于A和此前的变化趋势估计出A’,即做出反事实推断。由于区域2实际的增量B是已知的,因此算法B带来的纯增量为 B ′ = B − A ′ B'=B-A' B′=B−A′

此时,我们发现,不再刻意要求区域1和区域2完全相同,只要求两者的历史指标变化区域保持一致即可,这显著降低了区域选取的难度。

如果使用数学表达式,可以描述为: Y i t = α + δ D i + λ T t + β ( D i × T t ) + ϵ i t Y_{it}=\alpha+\delta D_i+\lambda T_t+\beta(D_i \times T_t)+\epsilon_{it} Yit​=α+δDi​+λTt​+β(Di​×Tt​)+ϵit​ 其中, Y i t Y_{it} Yit​为 J J J变量; α \alpha α为截距; δ \delta δ、 λ \lambda λ和 β \beta β为系数值; D i D_i Di​为算法B,干预前为0,干预后为1; T t T_t Tt​为时间,干预前为0,干预后为1; D i × T t D_i \times T_t Di​×Tt​为交叉项; ϵ i t \epsilon_{it} ϵit​为随机项。

对上式取条件期望后,算法增量(上图中的B’)为 β \beta β,计算过程如下表所示。

E ( Y ∣ D , T ) E(Y|D,T) E(Y∣D,T) T = 0 T=0 T=0 T = 1 T=1 T=1 Δ \Delta Δ D = 0 D=0 D=0 α \alpha α α + λ \alpha+\lambda α+λ λ \lambda λ D = 1 D=1 D=1 α + δ \alpha+\delta α+δ α + δ + λ + β \alpha+\delta+\lambda+\beta α+δ+λ+β λ + β \lambda+\beta λ+β Δ \Delta Δ δ \delta δ δ + β \delta+\beta δ+β β \beta β

显然,如果 β > 0 \beta>0 β>0,则认为算法B对指标 J J J有正向促进作用;反之,则认为有负向抵制作用。

简单实例

那么,如何求解 β \beta β值呢?

目前大部分DID的代码都是基于stata实现的。因此,本节主要参考半块土豆切丝的视频,给出一个简单实例的计算过程。

实例描述为:A和B为历史指标的变化保持一致的两个地区,在1994年,B区实行了一项新政策,目标是评估新政策对指标 y y y的影响。相关数据如下。

countryyearyA19901342787840A1991-1899660544A1992-11234363A19932645775360A19943008334848A19953229574144A19962756754176A19972771810560A19983397338880A199939770336B19901342787840B1991-1518985728B19921912769920B19931345690240B19942793515008B19951323696384B1996254524176B19973297033216B19983011820800B19993296283392

此处先直接给出stata代码如下:

// stata代码 gen period = (year>=1994) & !missing(year) // 生成时间虚拟变量D,1994年前为0,反之为1 gen treat = (country>1) & !missing(country) // 生成区域的虚拟变量T,干预为1,反之为0 gen did = period * treat // 生成交叉项D·T diff y, t(treat) p(period) // DID回归:diff方式

为了更好地理解上述代码,把基本公式再抄写一遍 Y i t = α + δ D i + λ T t + β ( D i × T t ) + ϵ i t Y_{it}=\alpha+\delta D_i+\lambda T_t+\beta(D_i \times T_t)+\epsilon_{it} Yit​=α+δDi​+λTt​+β(Di​×Tt​)+ϵit​ 对应到该实例: D D D是政策变量treat,B地区为1,A地区为0,上述第2行代码实现; T T T是时间变量period,1994-1999年为1,1990-1993年为0,第1行代码实现; D i × T t D_i \times T_t Di​×Tt​是交叉项did,第3行代码实现; β \beta β的计算由第4行代码实现。

先看一下计算结果。

Number of observations in the DIFF-IN-DIFF: 20 Before After Control: 4 6 10 Treated: 4 6 10 8 12 -------------------------------------------------------- Outcome var. | y | S. Err. | |t| | P>|t| ----------------+---------+---------+---------+--------- Before | | | | Control | 5.2e+08| | | Treated | 7.7e+08| | | Diff (T-C) | 2.5e+08| 1.0e+09| 0.24 | 0.811 After | | | | Control | 2.5e+09| | | Treated | 2.3e+09| | | Diff (T-C) | -2.0e+08| 8.4e+08| 0.24 | 0.812 | | | | Diff-in-Diff | -4.6e+08| 1.3e+09| 0.34 | 0.737 -------------------------------------------------------- R-square: 0.31 * Means and Standard Errors are estimated by linear regression **Inference: *** p0.05 p>0.05 p < 0.05 p0 β>0无显著效果显著正向效果 β < 0 \beta|t| [0.025 0.975] ------------------------------------------------------------------------------ Intercept 5.194e+08 7.31e+08 0.711 0.488 -1.03e+09 2.07e+09 period 2.015e+09 9.44e+08 2.135 0.049 1.42e+07 4.01e+09 treat 2.511e+08 1.03e+09 0.243 0.811 -1.94e+09 2.44e+09 did -4.556e+08 1.33e+09 -0.341 0.737 -3.28e+09 2.37e+09 ============================================================================== Omnibus: 2.990 Durbin-Watson: 2.288 Prob(Omnibus): 0.224 Jarque-Bera (JB): 2.423 Skew: -0.814 Prob(JB): 0.298 Kurtosis: 2.494 Cond. No. 7.66 ==============================================================================

主要看did行、coef列和P>|t|列的数值。显然,该结果和stata的计算结果是完全一致的。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3