1. 项目概述与核心动机在因果推断、政策评估乃至更广泛的计量经济学和机器学习应用中我们常常关心一个“目标参数”比如平均处理效应ATE——也就是某项干预或政策对结果的平均影响。传统上一个非常自然的想法是先用强大的机器学习模型比如随机森林、神经网络去拟合数据得到条件期望函数回归函数的估计然后把这个估计值“代入”一个识别公式里直接算出我们关心的参数。这个方法直观但有个致命问题机器学习模型为了追求预测精度往往会引入复杂的正则化或模型偏差。当你把这个带有偏差的回归函数估计值代入后续计算时这个一阶段偏差会污染最终的目标参数估计导致结果既不准确也不可靠统计性质比如根号n收敛也无法保证。这就引出了“去偏机器学习”这个领域。它的核心思想是构造一种特殊的估计方程——Neyman正交估计方程。你可以把它想象成一个“防抖”装置即使你对回归函数的估计有那么点偏差只要偏差收敛得足够快这个方程能确保最终目标参数的估计量不受一阶段偏差的一阶影响从而得到渐近无偏且高效的估计。实现这一点的关键在于除了回归函数我们还需要估计另一个叫“Riesz表示子”的玩意儿。它本质上是一个纠偏权重用来抵消回归函数估计误差带来的影响。现有的去偏机器学习流程通常是两步走先分别估计回归函数和Riesz表示子再把它们拼接到Neyman正交方程里。但这里有个问题这两步估计是割裂的。我们能不能设计一个更“团结”、更“目标一致”的框架让这两个讨厌参数的估计过程直接朝着“最终估计量更准”这个共同目标努力这就是“直接去偏机器学习”框架诞生的初衷。它不再满足于分而治之而是提出通过最小化“理想”Neyman正交得分用真实参数计算与我们“候选”参数计算得分之间的差异来端到端地联合优化这两个讨厌参数。而衡量这个差异的尺子就是本文的核心工具Bregman散度。2. 核心思路从平方损失看直接去偏为了让你直观感受DDML的妙处我们从一个最简单的例子——使用平方损失MSE进行平均处理效应ATE估计——开始拆解。假设我们有一个二元处理变量D比如是否接受培训协变量Z比如年龄、教育程度结果变量Y比如收入。我们关心的ATE是τ₀ E[Y(1) - Y(0)]。2.1 传统AIPW估计器及其痛点增强逆概率加权AIPW估计器是因果推断里的明星方法它长这样bτ_AIPW (1/n) Σ [ (D/π(Z) - (1-D)/(1-π(Z)) ) * (Y - γ(X)) γ(1,Z) - γ(0,Z) ]这里γ(X) E[Y|X]是回归函数π(Z)P(D1|Z)是倾向得分。这个估计器是“双稳健”的只要回归函数γ或倾向得分π其中一个估计对了最终ATE估计就是一致的。理想情况下如果我们知道真实的γ₀和π₀代入上式就能得到一个“神谕”估计量τ̃。我们实际估计的bτ_AIPW与这个神谕的误差可以拆解为τ₀ - bτ_AIPW (τ₀ - τ̃) (τ̃ - bτ_AIPW)第一部分是即使知道真实参数也存在的固有抽样误差第二部分纯粹是因为我们用估计值bη(bγ, bπ)替代了真实值η₀(γ₀, π₀)引入的误差。DDML的目标就是直接瞄准并最小化这第二部分误差。2.2 Neyman目标估计将误差作为优化目标一个最直接的想法是如果我们能最小化h_AIPW(W; η₀)和h_AIPW(W; η)之间的均方误差MSE不就能得到最好的η估计吗即η* argmin_η E[ (h_AIPW(W; η₀) - h_AIPW(W; η))² ]问题在于这个目标里包含了未知的η₀没法直接优化。但数学的巧妙之处在于经过一番推导主要是利用条件期望和方差的性质这个关于π的优化问题可以等价转化为一个不包含π₀的形式。对于给定的γ最优的π*可以通过最小化以下目标得到π†(γ) argmin_π E[ { -2(1/π(Z) 1/(1-π(Z))) (D/π(Z) - (1-D)/(1-π(Z)))² } * (Y - γ₀(X))² ]看π₀神奇地消失了我们只需要数据(D, Z, Y)和一个对γ₀的初步估计即使有偏就能直接优化π。这个目标函数的第一项惩罚极端倾向得分接近0或1第二项用残差平方加权本质上是在学习一个能稳定AIPW估计的倾向得分模型。注意这里有一个关键技巧。推导中我们利用了E[(Y-γ₀(X))² | X]这个条件方差项。在实际操作中γ₀是未知的我们需要用一个初步估计bγ来代替。这就要求bγ最好是稳健的即使有偏只要条件方差的估计大致合理对π的估计影响相对可控。一种稳健的做法是先用一个简单的线性模型或广义可加模型GAM得到bγ的初始值。对于回归函数γ情况稍微复杂。给定π最小化相同MSE的目标无法完全消除γ₀。但我们可以最小化它的一个上界γ†(π) argmin_γ { E[ D/π(Z) * (1/π(Z)-1) * (Y-γ(1,Z))² ] E[ (1-D)/(1-π(Z)) * (1/(1-π(Z))-1) * (Y-γ(0,Z))² ] }这个目标函数很有意思它是对处理组和对照组分别进行加权最小二乘回归权重是D/π(Z)²和(1-D)/(1-π(Z))²。权重大的样本是那些倾向得分“反直觉”的样本例如一个大概率接受处理却未接受的个体这些样本的回归拟合误差对最终ATE估计的偏差影响更大因此需要更精确的估计。2.3 迭代算法让γ和π互相“教学”基于以上分解一个很自然的算法是迭代执行初始化回归函数用普通最小二乘OLS或任意机器学习方法拟合Y ~ X得到bγ^(0)。更新倾向得分使用上一步的bγ^(t-1)通过最小化2.2节中π†(γ)的样本版本估计bπ^(t)。更新回归函数使用最新的bπ^(t)通过最小化2.2节中γ†(π)的样本版本即加权最小二乘更新得到bγ^(t)。重复步骤2-3直至收敛或达到预设迭代次数。这个迭代过程的美妙之处在于γ和π的估计不再是孤立的。每一步它们都在为“使最终AIPW估计量更接近神谕”这个共同目标而调整自己。bπ的估计会考虑当前bγ的拟合残差而bγ的重新拟合又会根据最新的bπ赋予样本不同的重要性。这比分开独立估计两个模型然后硬拼在一起要和谐得多。3. 统一框架Neyman目标估计与广义Riesz回归上一节的平方损失例子揭示了DDML的核心思想。现在我们把它推广到一个更一般的设定。3.1 问题的一般形式假设我们关心的目标参数θ₀可以表示为某个泛函的期望θ₀ E[ m(W, γ₀) ]。其中m是一个依赖于数据W和回归函数γ的函数。在ATE例子中m(W, γ) γ(1,Z) - γ(0,Z)。根据Riesz表示定理存在一个Riesz表示子α₀(X)使得对于任意γ都有E[m(W, γ)] E[α₀(X) γ(X)]。在ATE中α₀(X) D/π₀(Z) - (1-D)/(1-π₀(Z))。Neyman正交得分函数定义为ψ(W; η, θ) m(W, γ) α(X)(Y - γ(X)) - θ其中η (γ, α)。这个函数在真实值(η₀, θ₀)处期望为零并且对η的Gateaux导数在η₀处也为零这就是“正交”的含义使得θ的估计对η的一阶段估计误差不敏感。3.2 Neyman目标估计瞄准理想得分DDML的第一个支柱是Neyman目标估计。其思想是我们想找到一对(γ, α)使得用构造的得分ψ(W; η, θ)尽可能接近用真实参数构造的“神谕得分”ψ(W; η₀, θ₀)。两者之差可以分解为ψ(W; η₀, θ₀) - ψ(W; η, θ*) [α₀(X)-α(X)][Y-γ₀(X)] - α(X)[γ₀(X)-γ(X)] ...省略号部分均值为零。因此最小化这个差异就等价于同时最小化两项Riesz表示子误差[α₀(X)-α(X)][Y-γ₀(X)]。这衡量了α的估计误差用回归残差加权。回归函数误差-α(X)[γ₀(X)-γ(X)]。这衡量了γ的估计误差用α加权。这就把联合估计问题清晰地分解为两个子问题。对于回归函数γ的估计除了上一节提到的“双重估计”法即分别估计γ和α还有一种重要的方法是目标最大似然估计TMLE。3.3 回归函数估计的TMLE路径TMLE提供了一种精巧的“一步修正”思路。假设我们已经有了一个初始的回归函数估计bγ^(0)和Riesz表示子估计bα。TMLE不重新拟合整个回归模型而是对初始估计做一个针对性的微小调整bγ^(1)(x) bγ^(0)(x) bε * bα(x)其中修正量bε是通过解一个方程得到的Σ [Y_i - (bγ^(0)(X_i) ε bα(X_i))] 0。解得bε Σ bα(X_i)(Y_i - bγ^(0)(X_i)) / Σ bα(X_i)²。这个操作的统计学意义非常深刻它沿着bα的方向移动bγ^(0)使得调整后的bγ^(1)能恰好让样本上的Neyman正交得分之和为零。经过TMLE修正后Neyman目标估计的误差就完全归结为Riesz表示子α的估计误差。也就是说只要我们能把α估计好γ的估计通过TMLE可以自动“校准”到最优状态。这极大地简化了问题让我们可以聚焦于如何更好地估计α。4. 广义Riesz回归Bregman散度登场既然问题的关键落到了Riesz表示子α的估计上DDML的第二个支柱——广义Riesz回归——便闪亮登场。它的核心是用Bregman散度来度量并最小化α的估计误差。4.1 Bregman散度一把可变的尺子Bregman散度是基于一个凸函数g定义的。对于两个点a和b它们的Bregman散度为BR_g(a | b) g(a) - g(b) - g(b)(a - b)你可以把它理解为函数g在b点的函数值与a点函数值在b点切线估计值之间的差距。它不是一个对称的距离但能度量b逼近a的程度。当g(t) t²/2时BR_g(a|b) (a-b)²/2这就是我们熟悉的平方损失。当g(t) t log t - t(定义在t0)时BR_g(a|b) a log(a/b) - (a-b)这近似于KL散度相差一个常数项。Bregman散度的强大之处在于它通过选择不同的凸函数g为我们提供了一整族不同的损失函数从而能够统一看待许多看似不相关的估计方法。4.2 用Bregman散度估计Riesz表示子我们的目标是最小化E[ (α₀(X)-α(X))² (Y-γ₀(X))² ]加权平方误差。更一般地我们用加权的Bregman散度α* argmin_α E[ BR_g(α₀(X) | α(X)) * (Y-γ₀(X))² ]同样这个目标包含未知的α₀。但利用E[α₀(X) φ(X)] E[m(W, φ)]这一Riesz表示子的定义性质对任意函数φ我们可以经过推导得到一个完全可行、不包含α₀的等价目标α* argmin_α E[ -g(α(X)) g(α(X)) α(X) - m(g(α(X))) ]这个公式是广义Riesz回归的基石。我们只需要数据以及一个对γ₀的初步估计bγ用于计算残差平方作为权重就能直接优化α。4.3 从一般框架到具体方法现在让我们看看不同的g函数选择如何“变出”已有的著名方法选择g(t) t²/2(平方损失) 此时g(t)t。代入等价目标经过化简我们得到α* argmin_α E[ (1/2)α(X)² - α(X) * m(Identity) ]其中m(Identity)是一个与数据相关的项。 在ATE的设定下这恰好等价于Riesz回归Chernozhukov et al., 2024和最小二乘重要性拟合LSIFKanamori et al., 2009。它的目标是最小化α的平方与一个线性项的加权和计算上常常归结为一个岭回归或Lasso问题。选择g(t) t log t - t(KL散度) 此时g(t)log t。代入等价目标我们得到α* argmin_α E[ -α(X) log α(X) α(X) - m(log α(X)) ]。 在ATE估计中如果我们把α建模为α(X)D/π(Z) - (1-D)/(1-π(Z))并将π参数化为逻辑回归模型π_β(Z) 1/(1exp(-βᵀΦ(Z)))那么最小化上述目标忽略常数项就等价于最大化以下加权对数似然Σ { D_i log π_β(Z_i) (1-D_i) log (1-π_β(Z_i)) } * w_i其中权重w_i与残差平方(Y_i - bγ(X_i))²有关。更重要的是这个优化问题的一阶条件恰好导出了协变量平衡性质(1/n) Σ [ D_i/π_β(Z_i) * Φ(Z_i) ] (1/n) Σ [ (1-D_i)/(1-π_β(Z_i)) * Φ(Z_i) ]也就是说处理组和对照组在特征函数Φ(Z)上的加权矩自动相等。这正是协变量平衡倾向得分CBPSImai Ratkovic, 2013和熵平衡Hainmueller, 2012方法所追求的目标在DDML框架下它不再是单独假设的目标而是选择特定Bregman散度KL散度和特定模型逻辑回归后自然涌现的性质。我们称之为自动协变量平衡。实操心得选择g函数本质上是选择损失函数它决定了你更关心哪类误差。平方损失对大的误差惩罚很重估计结果通常更稳定但可能对异常值敏感。KL散度或对应的逻辑损失则与概率模型联系紧密能天然产生概率输出如倾向得分在0到1之间并且自动实现矩平衡在协变量维度较高时可能更有优势。在实践中可以尝试不同的g函数如平方损失、逻辑损失、指数损失对应的Bregman散度通过交叉验证选择能使最终目标参数估计方差最小的那个。5. 算法实现与关键细节理论很美妙但最终要落地。下面我将详细拆解DDML框架的一个通用实现流程并穿插关键的实施细节和避坑指南。5.1 DDML端到端算法流程假设我们有一个数据集{W_i(X_i, Y_i)}_{i1}^n目标参数为θ₀ E[m(W, γ₀)]并已确定Riesz表示子模型α(x; ξ)如神经网络、线性模型和回归函数模型γ(x; ω)。步骤一数据准备与样本分割交叉拟合将数据随机划分为K个折通常K5或10。交叉拟合是去偏机器学习保证理论性质避免过拟合导致Donsker条件不满足的关键步骤必须执行。对于每一折k定义其补集为训练集I_k^c该折本身为测试集I_k。步骤二初始化回归函数估计对于每一折k使用训练集I_k^c的数据用任意的监督学习算法如梯度提升树、神经网络、弹性网络拟合模型γ(x)得到初始估计bγ^{(-k, 0)}(x)。这里上标(-k, 0)表示基于除第k折外数据得到的第0轮估计。用这个模型预测测试集I_k中每个样本的bγ^{(-k, 0)}(X_i)并计算残差Y_i - bγ^{(-k, 0)}(X_i)。步骤三迭代估计Riesz表示子与回归函数Neyman目标估计设定最大迭代次数T如T5或直到收敛。对于每一折k进行迭代t1,...,T估计Riesz表示子广义Riesz回归使用训练集I_k^c以当前回归函数估计bγ^{(-k, t-1)}计算的残差方(Y - bγ^{(-k, t-1)}(X))²作为权重。最小化加权经验Bregman风险bξ^(t) argmin_ξ Σ_{i in I_k^c} [ -g(α(X_i; ξ)) g(α(X_i; ξ)) α(X_i; ξ) - m(g(α(X_i; ξ))) ] * (Y_i - bγ^{(-k, t-1)}(X_i))² λ J(ξ)其中J(ξ)是正则化项如L2范数λ通过交叉验证选择。得到Riesz表示子估计bα^{(-k, t)}(x) α(x; bξ^(t))。更新回归函数估计TMLE修正或重新加权拟合方案ATMLE修正这是更高效的做法。对训练集I_k^c计算修正量bε [ Σ_{i in I_k^c} bα^{(-k, t)}(X_i) (Y_i - bγ^{(-k, t-1)}(X_i)) ] / [ Σ_{i in I_k^c} (bα^{(-k, t)}(X_i))² ]然后更新回归函数bγ^{(-k, t)}(x) bγ^{(-k, t-1)}(x) bε * bα^{(-k, t)}(x)。方案B重新加权拟合如果担心TMLE的线性修正不够可以完全重新拟合γ。使用训练集I_k^c以bα^{(-k, t)}(X_i)的某种函数如绝对值或平方作为权重用加权最小二乘或其他加权学习算法重新拟合γ(x)模型得到bγ^{(-k, t)}。检查收敛可以计算前后两次迭代中在训练集上Neyman正交得分函数值的变化或bα和bγ参数的变化。若小于阈值则提前终止迭代。步骤四组装最终估计量对于每一折k我们得到了该折测试集I_k上最终的讨厌参数估计bη_i (bγ_i, bα_i)其中i ∈ I_k且bγ_i和bα_i是使用除第k折外数据训练得到的模型在样本i上的预测值。计算最终的参数估计bθ (1/n) Σ_{i1}^n [ m(W_i, bγ_i) bα_i (Y_i - bγ_i(X_i)) ]或者如果采用了TMLE修正也可以直接使用修正后的bγ_i计算bθ (1/n) Σ_{i1}^n m(W_i, bγ_i)。理论表明两者是渐近等价的但样本有限时可能略有差异。5.2 模型选择与正则化Riesz表示子模型α(x)它的形式通常由目标参数决定。在ATE中α(x)与倾向得分的倒数有关。一个常见的参数化是α(x) D * exp(f(Z; ξ)) - (1-D) * exp(g(Z; ξ))其中f和g是神经网络或线性模型。正则化项J(ξ)至关重要因为α(x)可能取很大值特别是当倾向得分接近0或1时导致数值不稳定。L2正则化岭惩罚是默认选择L1正则化Lasso可用于特征选择。回归函数模型γ(x)可以选择任何灵活的机器学习模型。关键在于初始的bγ^(0)不需要是无偏的但应该尽可能预测准确因为它的残差将作为后续加权估计的权重。集成方法如Super Learner是一个稳健的选择。Bregman凸函数g的选择这是一个超参数。除了平方损失和KL散度还可以考虑g(t) exp(t)对应指数损失、g(t) (1-t)²对应Huber-like损失等。可以通过在验证集上评估最终bθ的估计方差使用自助法或折刀法来选择。注意事项数值稳定性是实施中的最大挑战之一。当倾向得分估计值π(Z)非常接近0或1时α(X)会变得极大导致加权目标函数爆炸。实践中必须对倾向得分进行裁剪Clipping例如限制π(Z)在[0.01, 0.99]或更窄的区间内。同样在计算Bregman散度时对于g(t)t log t - t要确保α(X)的预测值始终为正可以通过在模型输出层加Softplus激活函数实现。6. 常见问题与实战排查指南即使理解了原理和流程在实际操作中依然会踩坑。下面是我在复现和应用DDML过程中遇到的一些典型问题及解决方案。6.1 收敛性问题问题描述迭代算法步骤三不收敛bα和bγ的估计在不同迭代间震荡甚至发散。排查思路与解决学习率/步长如果使用梯度下降法优化bα学习率可能太大。尝试使用自适应学习率优化器如Adam并在初期设置较小的学习率如1e-4。初始化bγ^(0)的初始估计质量太差导致残差平方权重(Y-bγ)²异常大或分布极端。尝试用一个更稳健的模型如仅包含主效应的线性模型做初始化。权重裁剪残差平方权重或bα值可能包含极端值。对权重进行Winsorizing如缩放到99分位数或对bα的输出进行裁剪。简化模型首次尝试时使用线性模型或浅层神经网络作为α和γ的模型确保算法流程能走通再逐步增加复杂度。提前停止不一定需要完全收敛。监控在验证集上最终bθ估计值的变化如果连续几轮迭代变化很小即可停止。6.2 估计量方差过大问题描述最终得到的bθ估计值在不同数据子集或自助法重抽样上波动很大。排查思路与解决检查倾向得分重叠绘制处理组和对照组倾向得分的分布图。如果重叠区域很小意味着存在大量倾向得分接近0或1的样本这必然导致α值巨大方差膨胀。此时需要重新审视研究问题或考虑对样本进行修剪Trimming只保留重叠区域的样本进行分析并在报告中说明。加强正则化增大Riesz表示子模型正则化项λ的强度。这相当于对极端权重进行收缩用偏差的小幅增加换取方差的显著降低。使用交叉验证选择λ时目标可以设为最小化bθ的估计方差通过折刀法近似而非最小化Bregman损失。尝试不同的Bregman散度KL散度对应逻辑损失通常比平方损失产生更平滑的权重分布可能有助于降低方差。增加样本量这可能是最根本但并非总能实现的解决方案。DDML等双稳健方法在小样本下方差可能较大需要足够的数据支撑其复杂模型的估计。6.3 与基准方法结果差异巨大问题描述DDML估计的ATE与简单的差异均值法、逆概率加权IPW或标准的AIPW结果相差甚远。排查思路与解决模型误设检查DDML虽然双稳健但前提是α或γ的模型之一必须被正确指定或两者都正确。检查γ模型的预测性能R²检查基于bα计算的倾向得分是否在0-1之间以及处理组和对照组的加权协变量均值是否平衡自动平衡性质是否近似成立。如果平衡性很差说明α模型可能严重误设。代码实现验证用一个已知数据生成过程DGP的模拟数据测试你的代码。例如从随机对照试验RCT数据生成此时真实ATE已知倾向得分已知如0.5。你的DDML估计量应该能近乎无偏地恢复真实ATE。这是验证算法实现正确性的黄金标准。分步调试单独输出迭代过程中每一折的bγ和bα的预测值检查它们是否在合理范围内。计算每一步的Neyman正交得分观察其均值是否在迭代中趋近于0。比较中间结果将DDML第一步得到的bγ与传统机器学习直接拟合的γ进行比较将DDML估计的倾向得分从bα反推与逻辑回归拟合的倾向得分进行比较。巨大差异可能指向bug或模型设定问题。6.4 计算效率低下问题描述算法运行非常慢尤其是当样本量大、模型复杂时。排查思路与解决减少折数K交叉拟合中K2样本分割有时也能提供足够的去偏效果且计算量减半。可以尝试K2, 5, 10观察结果稳定性。简化模型在早期探索和调试阶段使用线性模型、小规模树模型等。利用暖启动在迭代估计bα和bγ时使用上一轮迭代的参数值作为本轮优化的初始值可以大幅加快收敛。并行化交叉拟合的每一折是独立的可以完全并行计算。利用多核CPU或分布式计算框架。6.5 自动协变量平衡不成立问题描述理论上选择KL散度和逻辑回归模型时应自动实现协变量平衡但实际计算中样本矩并不完全相等。排查思路与解决优化收敛性平衡条件是优化问题的一阶条件梯度为零如果优化算法没有完全收敛平衡条件自然不严格成立。确保优化迭代达到设定的容差。正则化影响如果添加了L1/L2正则化项平衡条件会被修正。此时样本矩的差异应该与正则化项的梯度成正比。这是预期的正则化是为了防止过拟合而牺牲了精确的样本内平衡。模型容量如果Riesz表示子模型如逻辑回归的复杂度不足以完美拟合真正的Riesz表示子那么即使全局最优解也无法实现所有协变量的精确平衡。可以尝试增加模型复杂度如加入高阶交互项或检查平衡的协变量是否仅限于模型中使用的基础特征Φ(Z)。最后我想分享一点个人在实践中的深刻体会。DDML框架的魅力在于它提供了一种“目标导向”的思维范式。传统的机器学习建模往往是“局部最优”的预测模型只管预测准确倾向得分模型只管拟合治疗分配机制。而DDML通过Neyman目标估计将所有这些局部任务统一到一个全局目标下——最小化最终目标参数估计量的误差。这就像让一支足球队的每个队员不再只追求个人数据进球、助攻而是时刻想着如何配合才能赢得比赛。这种框架上的统一不仅带来了理论上的优雅更在实际中通过迭代和联合优化往往能产生更稳定、更高效的估计结果。当你下次面对一个需要纠偏的因果估计问题时不妨从“如何直接最小化最终估计量的误差”这个角度思考DDML或许就能为你提供一个清晰而强大的解决方案蓝图。
直接去偏机器学习:用Bregman散度统一因果推断与协变量平衡
发布时间:2026/5/25 7:41:31
1. 项目概述与核心动机在因果推断、政策评估乃至更广泛的计量经济学和机器学习应用中我们常常关心一个“目标参数”比如平均处理效应ATE——也就是某项干预或政策对结果的平均影响。传统上一个非常自然的想法是先用强大的机器学习模型比如随机森林、神经网络去拟合数据得到条件期望函数回归函数的估计然后把这个估计值“代入”一个识别公式里直接算出我们关心的参数。这个方法直观但有个致命问题机器学习模型为了追求预测精度往往会引入复杂的正则化或模型偏差。当你把这个带有偏差的回归函数估计值代入后续计算时这个一阶段偏差会污染最终的目标参数估计导致结果既不准确也不可靠统计性质比如根号n收敛也无法保证。这就引出了“去偏机器学习”这个领域。它的核心思想是构造一种特殊的估计方程——Neyman正交估计方程。你可以把它想象成一个“防抖”装置即使你对回归函数的估计有那么点偏差只要偏差收敛得足够快这个方程能确保最终目标参数的估计量不受一阶段偏差的一阶影响从而得到渐近无偏且高效的估计。实现这一点的关键在于除了回归函数我们还需要估计另一个叫“Riesz表示子”的玩意儿。它本质上是一个纠偏权重用来抵消回归函数估计误差带来的影响。现有的去偏机器学习流程通常是两步走先分别估计回归函数和Riesz表示子再把它们拼接到Neyman正交方程里。但这里有个问题这两步估计是割裂的。我们能不能设计一个更“团结”、更“目标一致”的框架让这两个讨厌参数的估计过程直接朝着“最终估计量更准”这个共同目标努力这就是“直接去偏机器学习”框架诞生的初衷。它不再满足于分而治之而是提出通过最小化“理想”Neyman正交得分用真实参数计算与我们“候选”参数计算得分之间的差异来端到端地联合优化这两个讨厌参数。而衡量这个差异的尺子就是本文的核心工具Bregman散度。2. 核心思路从平方损失看直接去偏为了让你直观感受DDML的妙处我们从一个最简单的例子——使用平方损失MSE进行平均处理效应ATE估计——开始拆解。假设我们有一个二元处理变量D比如是否接受培训协变量Z比如年龄、教育程度结果变量Y比如收入。我们关心的ATE是τ₀ E[Y(1) - Y(0)]。2.1 传统AIPW估计器及其痛点增强逆概率加权AIPW估计器是因果推断里的明星方法它长这样bτ_AIPW (1/n) Σ [ (D/π(Z) - (1-D)/(1-π(Z)) ) * (Y - γ(X)) γ(1,Z) - γ(0,Z) ]这里γ(X) E[Y|X]是回归函数π(Z)P(D1|Z)是倾向得分。这个估计器是“双稳健”的只要回归函数γ或倾向得分π其中一个估计对了最终ATE估计就是一致的。理想情况下如果我们知道真实的γ₀和π₀代入上式就能得到一个“神谕”估计量τ̃。我们实际估计的bτ_AIPW与这个神谕的误差可以拆解为τ₀ - bτ_AIPW (τ₀ - τ̃) (τ̃ - bτ_AIPW)第一部分是即使知道真实参数也存在的固有抽样误差第二部分纯粹是因为我们用估计值bη(bγ, bπ)替代了真实值η₀(γ₀, π₀)引入的误差。DDML的目标就是直接瞄准并最小化这第二部分误差。2.2 Neyman目标估计将误差作为优化目标一个最直接的想法是如果我们能最小化h_AIPW(W; η₀)和h_AIPW(W; η)之间的均方误差MSE不就能得到最好的η估计吗即η* argmin_η E[ (h_AIPW(W; η₀) - h_AIPW(W; η))² ]问题在于这个目标里包含了未知的η₀没法直接优化。但数学的巧妙之处在于经过一番推导主要是利用条件期望和方差的性质这个关于π的优化问题可以等价转化为一个不包含π₀的形式。对于给定的γ最优的π*可以通过最小化以下目标得到π†(γ) argmin_π E[ { -2(1/π(Z) 1/(1-π(Z))) (D/π(Z) - (1-D)/(1-π(Z)))² } * (Y - γ₀(X))² ]看π₀神奇地消失了我们只需要数据(D, Z, Y)和一个对γ₀的初步估计即使有偏就能直接优化π。这个目标函数的第一项惩罚极端倾向得分接近0或1第二项用残差平方加权本质上是在学习一个能稳定AIPW估计的倾向得分模型。注意这里有一个关键技巧。推导中我们利用了E[(Y-γ₀(X))² | X]这个条件方差项。在实际操作中γ₀是未知的我们需要用一个初步估计bγ来代替。这就要求bγ最好是稳健的即使有偏只要条件方差的估计大致合理对π的估计影响相对可控。一种稳健的做法是先用一个简单的线性模型或广义可加模型GAM得到bγ的初始值。对于回归函数γ情况稍微复杂。给定π最小化相同MSE的目标无法完全消除γ₀。但我们可以最小化它的一个上界γ†(π) argmin_γ { E[ D/π(Z) * (1/π(Z)-1) * (Y-γ(1,Z))² ] E[ (1-D)/(1-π(Z)) * (1/(1-π(Z))-1) * (Y-γ(0,Z))² ] }这个目标函数很有意思它是对处理组和对照组分别进行加权最小二乘回归权重是D/π(Z)²和(1-D)/(1-π(Z))²。权重大的样本是那些倾向得分“反直觉”的样本例如一个大概率接受处理却未接受的个体这些样本的回归拟合误差对最终ATE估计的偏差影响更大因此需要更精确的估计。2.3 迭代算法让γ和π互相“教学”基于以上分解一个很自然的算法是迭代执行初始化回归函数用普通最小二乘OLS或任意机器学习方法拟合Y ~ X得到bγ^(0)。更新倾向得分使用上一步的bγ^(t-1)通过最小化2.2节中π†(γ)的样本版本估计bπ^(t)。更新回归函数使用最新的bπ^(t)通过最小化2.2节中γ†(π)的样本版本即加权最小二乘更新得到bγ^(t)。重复步骤2-3直至收敛或达到预设迭代次数。这个迭代过程的美妙之处在于γ和π的估计不再是孤立的。每一步它们都在为“使最终AIPW估计量更接近神谕”这个共同目标而调整自己。bπ的估计会考虑当前bγ的拟合残差而bγ的重新拟合又会根据最新的bπ赋予样本不同的重要性。这比分开独立估计两个模型然后硬拼在一起要和谐得多。3. 统一框架Neyman目标估计与广义Riesz回归上一节的平方损失例子揭示了DDML的核心思想。现在我们把它推广到一个更一般的设定。3.1 问题的一般形式假设我们关心的目标参数θ₀可以表示为某个泛函的期望θ₀ E[ m(W, γ₀) ]。其中m是一个依赖于数据W和回归函数γ的函数。在ATE例子中m(W, γ) γ(1,Z) - γ(0,Z)。根据Riesz表示定理存在一个Riesz表示子α₀(X)使得对于任意γ都有E[m(W, γ)] E[α₀(X) γ(X)]。在ATE中α₀(X) D/π₀(Z) - (1-D)/(1-π₀(Z))。Neyman正交得分函数定义为ψ(W; η, θ) m(W, γ) α(X)(Y - γ(X)) - θ其中η (γ, α)。这个函数在真实值(η₀, θ₀)处期望为零并且对η的Gateaux导数在η₀处也为零这就是“正交”的含义使得θ的估计对η的一阶段估计误差不敏感。3.2 Neyman目标估计瞄准理想得分DDML的第一个支柱是Neyman目标估计。其思想是我们想找到一对(γ, α)使得用构造的得分ψ(W; η, θ)尽可能接近用真实参数构造的“神谕得分”ψ(W; η₀, θ₀)。两者之差可以分解为ψ(W; η₀, θ₀) - ψ(W; η, θ*) [α₀(X)-α(X)][Y-γ₀(X)] - α(X)[γ₀(X)-γ(X)] ...省略号部分均值为零。因此最小化这个差异就等价于同时最小化两项Riesz表示子误差[α₀(X)-α(X)][Y-γ₀(X)]。这衡量了α的估计误差用回归残差加权。回归函数误差-α(X)[γ₀(X)-γ(X)]。这衡量了γ的估计误差用α加权。这就把联合估计问题清晰地分解为两个子问题。对于回归函数γ的估计除了上一节提到的“双重估计”法即分别估计γ和α还有一种重要的方法是目标最大似然估计TMLE。3.3 回归函数估计的TMLE路径TMLE提供了一种精巧的“一步修正”思路。假设我们已经有了一个初始的回归函数估计bγ^(0)和Riesz表示子估计bα。TMLE不重新拟合整个回归模型而是对初始估计做一个针对性的微小调整bγ^(1)(x) bγ^(0)(x) bε * bα(x)其中修正量bε是通过解一个方程得到的Σ [Y_i - (bγ^(0)(X_i) ε bα(X_i))] 0。解得bε Σ bα(X_i)(Y_i - bγ^(0)(X_i)) / Σ bα(X_i)²。这个操作的统计学意义非常深刻它沿着bα的方向移动bγ^(0)使得调整后的bγ^(1)能恰好让样本上的Neyman正交得分之和为零。经过TMLE修正后Neyman目标估计的误差就完全归结为Riesz表示子α的估计误差。也就是说只要我们能把α估计好γ的估计通过TMLE可以自动“校准”到最优状态。这极大地简化了问题让我们可以聚焦于如何更好地估计α。4. 广义Riesz回归Bregman散度登场既然问题的关键落到了Riesz表示子α的估计上DDML的第二个支柱——广义Riesz回归——便闪亮登场。它的核心是用Bregman散度来度量并最小化α的估计误差。4.1 Bregman散度一把可变的尺子Bregman散度是基于一个凸函数g定义的。对于两个点a和b它们的Bregman散度为BR_g(a | b) g(a) - g(b) - g(b)(a - b)你可以把它理解为函数g在b点的函数值与a点函数值在b点切线估计值之间的差距。它不是一个对称的距离但能度量b逼近a的程度。当g(t) t²/2时BR_g(a|b) (a-b)²/2这就是我们熟悉的平方损失。当g(t) t log t - t(定义在t0)时BR_g(a|b) a log(a/b) - (a-b)这近似于KL散度相差一个常数项。Bregman散度的强大之处在于它通过选择不同的凸函数g为我们提供了一整族不同的损失函数从而能够统一看待许多看似不相关的估计方法。4.2 用Bregman散度估计Riesz表示子我们的目标是最小化E[ (α₀(X)-α(X))² (Y-γ₀(X))² ]加权平方误差。更一般地我们用加权的Bregman散度α* argmin_α E[ BR_g(α₀(X) | α(X)) * (Y-γ₀(X))² ]同样这个目标包含未知的α₀。但利用E[α₀(X) φ(X)] E[m(W, φ)]这一Riesz表示子的定义性质对任意函数φ我们可以经过推导得到一个完全可行、不包含α₀的等价目标α* argmin_α E[ -g(α(X)) g(α(X)) α(X) - m(g(α(X))) ]这个公式是广义Riesz回归的基石。我们只需要数据以及一个对γ₀的初步估计bγ用于计算残差平方作为权重就能直接优化α。4.3 从一般框架到具体方法现在让我们看看不同的g函数选择如何“变出”已有的著名方法选择g(t) t²/2(平方损失) 此时g(t)t。代入等价目标经过化简我们得到α* argmin_α E[ (1/2)α(X)² - α(X) * m(Identity) ]其中m(Identity)是一个与数据相关的项。 在ATE的设定下这恰好等价于Riesz回归Chernozhukov et al., 2024和最小二乘重要性拟合LSIFKanamori et al., 2009。它的目标是最小化α的平方与一个线性项的加权和计算上常常归结为一个岭回归或Lasso问题。选择g(t) t log t - t(KL散度) 此时g(t)log t。代入等价目标我们得到α* argmin_α E[ -α(X) log α(X) α(X) - m(log α(X)) ]。 在ATE估计中如果我们把α建模为α(X)D/π(Z) - (1-D)/(1-π(Z))并将π参数化为逻辑回归模型π_β(Z) 1/(1exp(-βᵀΦ(Z)))那么最小化上述目标忽略常数项就等价于最大化以下加权对数似然Σ { D_i log π_β(Z_i) (1-D_i) log (1-π_β(Z_i)) } * w_i其中权重w_i与残差平方(Y_i - bγ(X_i))²有关。更重要的是这个优化问题的一阶条件恰好导出了协变量平衡性质(1/n) Σ [ D_i/π_β(Z_i) * Φ(Z_i) ] (1/n) Σ [ (1-D_i)/(1-π_β(Z_i)) * Φ(Z_i) ]也就是说处理组和对照组在特征函数Φ(Z)上的加权矩自动相等。这正是协变量平衡倾向得分CBPSImai Ratkovic, 2013和熵平衡Hainmueller, 2012方法所追求的目标在DDML框架下它不再是单独假设的目标而是选择特定Bregman散度KL散度和特定模型逻辑回归后自然涌现的性质。我们称之为自动协变量平衡。实操心得选择g函数本质上是选择损失函数它决定了你更关心哪类误差。平方损失对大的误差惩罚很重估计结果通常更稳定但可能对异常值敏感。KL散度或对应的逻辑损失则与概率模型联系紧密能天然产生概率输出如倾向得分在0到1之间并且自动实现矩平衡在协变量维度较高时可能更有优势。在实践中可以尝试不同的g函数如平方损失、逻辑损失、指数损失对应的Bregman散度通过交叉验证选择能使最终目标参数估计方差最小的那个。5. 算法实现与关键细节理论很美妙但最终要落地。下面我将详细拆解DDML框架的一个通用实现流程并穿插关键的实施细节和避坑指南。5.1 DDML端到端算法流程假设我们有一个数据集{W_i(X_i, Y_i)}_{i1}^n目标参数为θ₀ E[m(W, γ₀)]并已确定Riesz表示子模型α(x; ξ)如神经网络、线性模型和回归函数模型γ(x; ω)。步骤一数据准备与样本分割交叉拟合将数据随机划分为K个折通常K5或10。交叉拟合是去偏机器学习保证理论性质避免过拟合导致Donsker条件不满足的关键步骤必须执行。对于每一折k定义其补集为训练集I_k^c该折本身为测试集I_k。步骤二初始化回归函数估计对于每一折k使用训练集I_k^c的数据用任意的监督学习算法如梯度提升树、神经网络、弹性网络拟合模型γ(x)得到初始估计bγ^{(-k, 0)}(x)。这里上标(-k, 0)表示基于除第k折外数据得到的第0轮估计。用这个模型预测测试集I_k中每个样本的bγ^{(-k, 0)}(X_i)并计算残差Y_i - bγ^{(-k, 0)}(X_i)。步骤三迭代估计Riesz表示子与回归函数Neyman目标估计设定最大迭代次数T如T5或直到收敛。对于每一折k进行迭代t1,...,T估计Riesz表示子广义Riesz回归使用训练集I_k^c以当前回归函数估计bγ^{(-k, t-1)}计算的残差方(Y - bγ^{(-k, t-1)}(X))²作为权重。最小化加权经验Bregman风险bξ^(t) argmin_ξ Σ_{i in I_k^c} [ -g(α(X_i; ξ)) g(α(X_i; ξ)) α(X_i; ξ) - m(g(α(X_i; ξ))) ] * (Y_i - bγ^{(-k, t-1)}(X_i))² λ J(ξ)其中J(ξ)是正则化项如L2范数λ通过交叉验证选择。得到Riesz表示子估计bα^{(-k, t)}(x) α(x; bξ^(t))。更新回归函数估计TMLE修正或重新加权拟合方案ATMLE修正这是更高效的做法。对训练集I_k^c计算修正量bε [ Σ_{i in I_k^c} bα^{(-k, t)}(X_i) (Y_i - bγ^{(-k, t-1)}(X_i)) ] / [ Σ_{i in I_k^c} (bα^{(-k, t)}(X_i))² ]然后更新回归函数bγ^{(-k, t)}(x) bγ^{(-k, t-1)}(x) bε * bα^{(-k, t)}(x)。方案B重新加权拟合如果担心TMLE的线性修正不够可以完全重新拟合γ。使用训练集I_k^c以bα^{(-k, t)}(X_i)的某种函数如绝对值或平方作为权重用加权最小二乘或其他加权学习算法重新拟合γ(x)模型得到bγ^{(-k, t)}。检查收敛可以计算前后两次迭代中在训练集上Neyman正交得分函数值的变化或bα和bγ参数的变化。若小于阈值则提前终止迭代。步骤四组装最终估计量对于每一折k我们得到了该折测试集I_k上最终的讨厌参数估计bη_i (bγ_i, bα_i)其中i ∈ I_k且bγ_i和bα_i是使用除第k折外数据训练得到的模型在样本i上的预测值。计算最终的参数估计bθ (1/n) Σ_{i1}^n [ m(W_i, bγ_i) bα_i (Y_i - bγ_i(X_i)) ]或者如果采用了TMLE修正也可以直接使用修正后的bγ_i计算bθ (1/n) Σ_{i1}^n m(W_i, bγ_i)。理论表明两者是渐近等价的但样本有限时可能略有差异。5.2 模型选择与正则化Riesz表示子模型α(x)它的形式通常由目标参数决定。在ATE中α(x)与倾向得分的倒数有关。一个常见的参数化是α(x) D * exp(f(Z; ξ)) - (1-D) * exp(g(Z; ξ))其中f和g是神经网络或线性模型。正则化项J(ξ)至关重要因为α(x)可能取很大值特别是当倾向得分接近0或1时导致数值不稳定。L2正则化岭惩罚是默认选择L1正则化Lasso可用于特征选择。回归函数模型γ(x)可以选择任何灵活的机器学习模型。关键在于初始的bγ^(0)不需要是无偏的但应该尽可能预测准确因为它的残差将作为后续加权估计的权重。集成方法如Super Learner是一个稳健的选择。Bregman凸函数g的选择这是一个超参数。除了平方损失和KL散度还可以考虑g(t) exp(t)对应指数损失、g(t) (1-t)²对应Huber-like损失等。可以通过在验证集上评估最终bθ的估计方差使用自助法或折刀法来选择。注意事项数值稳定性是实施中的最大挑战之一。当倾向得分估计值π(Z)非常接近0或1时α(X)会变得极大导致加权目标函数爆炸。实践中必须对倾向得分进行裁剪Clipping例如限制π(Z)在[0.01, 0.99]或更窄的区间内。同样在计算Bregman散度时对于g(t)t log t - t要确保α(X)的预测值始终为正可以通过在模型输出层加Softplus激活函数实现。6. 常见问题与实战排查指南即使理解了原理和流程在实际操作中依然会踩坑。下面是我在复现和应用DDML过程中遇到的一些典型问题及解决方案。6.1 收敛性问题问题描述迭代算法步骤三不收敛bα和bγ的估计在不同迭代间震荡甚至发散。排查思路与解决学习率/步长如果使用梯度下降法优化bα学习率可能太大。尝试使用自适应学习率优化器如Adam并在初期设置较小的学习率如1e-4。初始化bγ^(0)的初始估计质量太差导致残差平方权重(Y-bγ)²异常大或分布极端。尝试用一个更稳健的模型如仅包含主效应的线性模型做初始化。权重裁剪残差平方权重或bα值可能包含极端值。对权重进行Winsorizing如缩放到99分位数或对bα的输出进行裁剪。简化模型首次尝试时使用线性模型或浅层神经网络作为α和γ的模型确保算法流程能走通再逐步增加复杂度。提前停止不一定需要完全收敛。监控在验证集上最终bθ估计值的变化如果连续几轮迭代变化很小即可停止。6.2 估计量方差过大问题描述最终得到的bθ估计值在不同数据子集或自助法重抽样上波动很大。排查思路与解决检查倾向得分重叠绘制处理组和对照组倾向得分的分布图。如果重叠区域很小意味着存在大量倾向得分接近0或1的样本这必然导致α值巨大方差膨胀。此时需要重新审视研究问题或考虑对样本进行修剪Trimming只保留重叠区域的样本进行分析并在报告中说明。加强正则化增大Riesz表示子模型正则化项λ的强度。这相当于对极端权重进行收缩用偏差的小幅增加换取方差的显著降低。使用交叉验证选择λ时目标可以设为最小化bθ的估计方差通过折刀法近似而非最小化Bregman损失。尝试不同的Bregman散度KL散度对应逻辑损失通常比平方损失产生更平滑的权重分布可能有助于降低方差。增加样本量这可能是最根本但并非总能实现的解决方案。DDML等双稳健方法在小样本下方差可能较大需要足够的数据支撑其复杂模型的估计。6.3 与基准方法结果差异巨大问题描述DDML估计的ATE与简单的差异均值法、逆概率加权IPW或标准的AIPW结果相差甚远。排查思路与解决模型误设检查DDML虽然双稳健但前提是α或γ的模型之一必须被正确指定或两者都正确。检查γ模型的预测性能R²检查基于bα计算的倾向得分是否在0-1之间以及处理组和对照组的加权协变量均值是否平衡自动平衡性质是否近似成立。如果平衡性很差说明α模型可能严重误设。代码实现验证用一个已知数据生成过程DGP的模拟数据测试你的代码。例如从随机对照试验RCT数据生成此时真实ATE已知倾向得分已知如0.5。你的DDML估计量应该能近乎无偏地恢复真实ATE。这是验证算法实现正确性的黄金标准。分步调试单独输出迭代过程中每一折的bγ和bα的预测值检查它们是否在合理范围内。计算每一步的Neyman正交得分观察其均值是否在迭代中趋近于0。比较中间结果将DDML第一步得到的bγ与传统机器学习直接拟合的γ进行比较将DDML估计的倾向得分从bα反推与逻辑回归拟合的倾向得分进行比较。巨大差异可能指向bug或模型设定问题。6.4 计算效率低下问题描述算法运行非常慢尤其是当样本量大、模型复杂时。排查思路与解决减少折数K交叉拟合中K2样本分割有时也能提供足够的去偏效果且计算量减半。可以尝试K2, 5, 10观察结果稳定性。简化模型在早期探索和调试阶段使用线性模型、小规模树模型等。利用暖启动在迭代估计bα和bγ时使用上一轮迭代的参数值作为本轮优化的初始值可以大幅加快收敛。并行化交叉拟合的每一折是独立的可以完全并行计算。利用多核CPU或分布式计算框架。6.5 自动协变量平衡不成立问题描述理论上选择KL散度和逻辑回归模型时应自动实现协变量平衡但实际计算中样本矩并不完全相等。排查思路与解决优化收敛性平衡条件是优化问题的一阶条件梯度为零如果优化算法没有完全收敛平衡条件自然不严格成立。确保优化迭代达到设定的容差。正则化影响如果添加了L1/L2正则化项平衡条件会被修正。此时样本矩的差异应该与正则化项的梯度成正比。这是预期的正则化是为了防止过拟合而牺牲了精确的样本内平衡。模型容量如果Riesz表示子模型如逻辑回归的复杂度不足以完美拟合真正的Riesz表示子那么即使全局最优解也无法实现所有协变量的精确平衡。可以尝试增加模型复杂度如加入高阶交互项或检查平衡的协变量是否仅限于模型中使用的基础特征Φ(Z)。最后我想分享一点个人在实践中的深刻体会。DDML框架的魅力在于它提供了一种“目标导向”的思维范式。传统的机器学习建模往往是“局部最优”的预测模型只管预测准确倾向得分模型只管拟合治疗分配机制。而DDML通过Neyman目标估计将所有这些局部任务统一到一个全局目标下——最小化最终目标参数估计量的误差。这就像让一支足球队的每个队员不再只追求个人数据进球、助攻而是时刻想着如何配合才能赢得比赛。这种框架上的统一不仅带来了理论上的优雅更在实际中通过迭代和联合优化往往能产生更稳定、更高效的估计结果。当你下次面对一个需要纠偏的因果估计问题时不妨从“如何直接最小化最终估计量的误差”这个角度思考DDML或许就能为你提供一个清晰而强大的解决方案蓝图。