🧠 第九章 政务与教育:AI赋能治理与教学创新实践
📄 一句话概括

真实政策效应 5.0、两组共同的自然增长 2.0。 平行趋势成立时估出 5.02±0.57,91% 的重复实验落在 5±1 内; 处理组本来就涨得快 3.0 时,估成 8.02±0.57,一次都没落进去。 这个偏差加大样本也消不掉——它压的是标准差,不是均值。

📝 本节和前面几节的关系

上一节算的是「等多久」,有明确的物理量。 这一节算的是「这个政策到底有没有用」——没有对照组,没有重复实验,只有一次已经发生的事。

一、最直觉的办法为什么是错的

最直觉的评估方式是「前后对比」:政策前人均办事量 63,政策后 70,涨了 7,就说是政策带来的。 问题在于:就算什么政策都不发,这个数也会涨。经济在增长、人口在流动、系统在变好, 这些因素全都会推着指标往上走。把总涨幅全算成政策功劳,是典型的「把自然增长算成政绩」。 Demo 里这个陷阱看得很清楚:真实政策效应是 5.0,两组共同的自然增长是 2.0, 处理组的前后对比是 7.0——多出来的 2.0 跟政策毫无关系。 光有「前后」不够,还得有「对照」。 找一个没发这个政策、但其他条件差不多的组,看它同期涨了多少,把这块扣掉。 这就是双重差分(DID)的全部想法。

二、双重差分:一句话的算法

(处理组后减前)减去(对照组后减前)。两个括号里的「前」都被减掉了, 两组共同的自然增长在相减时正好抵消。 Demo 各造 100 个样本,重复 300 次,看估计值的分布:

情形 估计均值 标准差 落在 5±1 内
平行趋势成立 5.02 0.57 91%
处理组本来涨得更快 3.0 8.02 0.57 0%
第一行:估出 5.02,真值 5.0,差 0.02。这个差是抽样噪声——重复 300 次的标准差是 0.57,
0.02 远小于它,属于「测不出来」。
91% 的实验落在真值上下 1 的范围内,说明这个方法在前提成立时是可靠的。
第二行才是重点:处理组本来就涨得快 3.0(比如经济好的区先试点),估计变成 8.02,
比真值高 3.0,300 次里一次都没落进 5±1。

三、偏差和误差不是一回事

表里两个标准差都是 0.57,但两行的均值差了 3.0。这就是「系统偏差」和「随机误差」的区别。 随机误差:加大样本能压小。标准差从 0.57 到 0.28、0.18……只要样本够多, 估计会越来越稳地贴着某个值。 系统偏差:加大样本一点用都没有。样本翻十倍,标准差从 0.57 掉到 0.18, 但均值还是 8.02,还是比真值高 3.0。 所以「样本量不够」和「方法有偏」必须分开诊断。看到估计值和预期不符, 第一反应不该是「再加点数据」,而是先问「我的前提成立吗」。 加数据只能让错答案更精确。

四、平行趋势是前提,不是假设可以跳过

双重差分能成立,靠的是一个前提: 如果没有这个政策,处理组和对照组的变化趋势会一样。这叫平行趋势。 这个前提不可检验——因为「没有政策的世界」根本观察不到。但可以做两件事来给它找证据: ① 看政策之前的若干期。把两组在政策前 4 期、6 期的曲线画出来, 如果是平行的,就有理由相信政策后也平行。 如果政策前就分叉,那政策后的差异很可能是这个分叉的延续。 ② 做安慰剂检验。把政策时点往前挪两年,用同样的方法算一遍。 如果这个时候也能算出「显著效应」,说明方法本身有问题,它抓到的是趋势不是政策。 所以做政策评估,画图比算数重要。那张「政策前两组曲线」的图, 是整份报告里最该放第一页的东西——因为它决定后面所有数字能不能用。

五、落地:四个动作

第一步,找对照组。同一政策在不同区县、不同批次推开的时间差,是最好的对照组来源。 没有对照组,就只能做描述,不能做因果。 第二步,画平行趋势图。 政策前至少 4 期,越平越好。不平就换对照组,别硬算。 第三步,算 DID 并报置信区间。 只报点估计是不合格的——政策效应 5.0,如果 95% 区间是 [−1, 11],那这个结论等于「不知道」。 第四步,做安慰剂和替换变量检验。换个指标、换个时点、换个子样本,结论还在不在。 在这四步里,这一步最能筛掉「碰巧算出显著」的结论。 最后提醒:AI 在这里的作用是「把该算的算清楚」,不是「给出结论」。政策要不要继续,取决于代价、 公平、可行性,这些都不在数据里。模型最该做的是把不确定性标清楚, 而不是把一个 5.02 说得像 5.00。

六、动手 Demo:政策评估:真实效应 5.0,有选择偏差时估成 8.0

造两组各 100 个样本。处理组基线高 3 分,两组都服共同的自然增长 2.0,处理组额外加真实政策效应 5.0。 做双重差分:(处理组后减前)减(对照组后减前)。 跑两种情形——平行趋势成立、和处理组本来每年多涨 3.0(选择偏差),各重复 300 次,统计估计均值、 标准差和落在真值上下 1 的比例。

def did(bias, seed):
    r = np.random.default_rng(seed)
    n1 = n0 = 100
    t_pre = 63.0 + r.normal(0, 4.0, n1)              # 处理组基线高 3
    t_post = t_pre + 2.0 + 5.0 + bias + r.normal(0, 4.0, n1)
    c_pre = 60.0 + r.normal(0, 4.0, n0)
    c_post = c_pre + 2.0 + r.normal(0, 4.0, n0)      # 只涨自然增长
    return ((t_post.mean() - t_pre.mean())
            - (c_post.mean() - c_pre.mean()))

unb = np.array([did(0.0, s) for s in range(300)])    # 平行趋势成立
bad = np.array([did(3.0, s) for s in range(300)])    # 处理组本来涨得快

实跑输出:

--------------------------------------------------------------------
政策评估:真实效应 5.0,有选择偏差时估成 8.0
--------------------------------------------------------------------
  真实政策效应             5.0
  两组共同的自然增长       2.0(被差分抵掉)
  无偏差估计               5.02 ± 0.57
  有选择偏差估计           8.02 ± 0.57
  情形                     估计均值   标准差   落在 5±1 内
  -------------------------------------------------------
  平行趋势成立                 5.02     0.57           91%
  处理组本来涨得更快 3.0       8.02     0.57            0%

  双重差分的算法一句话:(处理组后减前)减(对照组后减前)。
  两组共同的自然增长 2.0 在相减时抵消了。
  平行趋势成立时估计 **5.02**,和真实效应 5.0 差 0.02——这个差是抽样噪声,
  重复 300 次的标准差是 0.57。
  但如果**处理组本来就涨得快**(比如经济好的区先试点),估计变成 **8.02**,高了 3.0。
  **这个偏差不会因为样本变大而消失**——它是系统偏差,不是随机误差。
  加样本只会把标准差从 0.57 压小,**均值还是比真值高 3.0。**
  所以做政策评估,比算 DID 更重要的是**先证明平行趋势**:看政策之前若干期,
  两组曲线是不是本来就平行。**不平行,后面算出来的数就不能用。**
  这也是「双重差分」和「简单前后对比」的全部区别:后者会把自然增长算成政策功劳。
  比如本例的处理组前后对比是 7.0,而真实效应只有 5.0。

done -> _out_39n.txt

先看两组的前后对比:处理组涨了 7.0,对照组涨了 2.0。 如果只做前后对比,结论是「政策带来 7.0」——而真实效应只有 5.0。 双重差分:7.0 − 2.0 = 5.0。这 2.0 的自然增长被差值消掉了,这正是 DID 的核心动作。 300 次重复下估计均值 5.02、标准差 0.57,91% 落在 5±1 内。 说明方法在前提成立时没有系统偏差。 第二行:把处理组的自然增长从 2.0 改成 5.0(多 3.0),估计均值变成 8.02。 真实效应没变,还是 5.0。高的那 3.0 全是选择偏差。 最该记住的是:两行的标准差一模一样(都是 0.57)。 标准差看不出偏差——它只反映随机性。所以「表里误差不大」不能当成「结论可靠」的证据。 要说明:这组数据是我造的,效应值也是我设的。 但 DID 的算法、抽样分布、置信区间的定义都是真的——换成真实面板数据,这套流程一模一样。

30 秒实验

  1. 把处理组的样本量从 100 加到 1000,重跑有偏差那一组。 标准差会缩到 0.18 左右,均值还是 8.0 上下——偏差不会变小。
  2. 把 bias 改成 −3.0(处理组本来涨得慢),看估计值。 会变成 2.0 上下,方向反过来——低估和高校是同一个机制。
  3. 把共同自然增长从 2.0 改成 10.0,看估计值变不变。基本不变:只要两组都是 10.0,相减就抵掉了。

常见误区

  1. 「政策前后涨了 7,所以政策效果是 7」。 把自然增长算进去了,真实效应只有 5.0。必须减掉对照组的同期涨幅。
  2. 「标准误很小,所以结论可靠」。标准差 0.57 的两行里,一行准一行偏 3.0——精度高不等于准。
  3. 「样本不够就加数据」。系统偏差加数据也消不掉,只会让错的答案更精确。先查平行趋势。
自测三问(点开对答案) 1. 为什么「前后对比」会高估政策效果? —— 因为指标本身会随时间自然增长(经济、人口、系统改进)。前后对比把这部分也算成政策功劳。 2. 双重差分的公式是什么,它抵消了什么? —— (处理组后减前)减(对照组后减前)。它抵消了两组共同的自然增长,前提是两组趋势平行。 3. 为什么加大样本消不掉选择偏差? —— 选择偏差是系统性的,不是随机误差。加样本只压小标准差,估计均值仍然偏离真值。

政策评估是「事后算账」,城市治理是「事中分派」。 下一节看一个每天要做上千次的决定:这条工单该派给谁。

相关笔记