笔记

目标转化F_Learner

F-Learner

总结一下,之前学习的内容:

根据潜在结果,我们可以定义个体处理效应为两个潜在结果之差:

τi=Yi(1)Yi(0)\tau_i = Y_i(1) − Y_i(0)

对于连续处理的情况:

τi=Y(t)\tau_i = \partial Y(t)

其中 tt 为处理变量。 我们之前就提出过,我们永远不可能同时观察到一个人两个结果,我们只能观察到一个。(当然如果有穿梭平行时空的能力,也不是不行)

Yiobs(t)={Yi(1),if t=1Yi(0),if t=0\begin{split} Y^{obs}_i(t)= \begin{cases} Y_i(1), & \text{if } t=1\\ Y_i(0), & \text{if } t=0 \end{cases} \end{split}

然后我们就可以进行估计一些因果效应量:

ATE=τ=E[Yi(1)Yi(0)]=E[τi]CATE=τ(x)=E[Yi(1)Yi(0)X]=E[τiX]ATE = \tau = E[Y_i(1) − Y_i(0)] = E[\tau_i] \\ CATE= \tau(x) = E[Y_i(1) − Y_i(0)|X] = E[\tau_i|X]

CATECATE 可以让我们看到异质性的处理效应,让我们能够更好的精确到哪些人对处理具有更高的敏感度,而哪些有低的敏感度。(个性化)

我们一般会用线性回归来估计 CATECATE.

yi=β0+β1ti+β2Xi+β3tiXi+ei.y_i = \beta_0 + \beta_1 t_i + \beta_2 X_i + \beta_3 t_i X_i + e_i. CATE^=τ^(x)=\partyi\partti=β^1+β^3Xi\widehat{CATE} = \hat{\tau}(x) = \frac{\part y_i}{\part t_i} = \hat{\beta}_1 + \hat{\beta}_3 X_i

很显然,我们这里总是有一个假设在于,我们的 XiX_i 总有线性假设。那,万一不是线性的,那么我们估计的 CATE^\widehat{CATE} 就会偏离真实值。那么,此时机器学习就可以拿出来用了,因为它可以捕捉非线性关系。比如梯度提升树和神经网络:

yi=M(Xi,Ti)+eiy_i = M(X_i, T_i) + e_i

但这时候,我们会发现,我们无法直接得到处理效应的估计,因为这个模型输出的是 yi^\hat{y_i} 的预测,而不是我们 τ^(xi)\hat{\tau}(x_i) 的预测。理想情况下,我们希望使用一种机器学习回归模型,它可以最小化处理效应的均方误差

E[(τ(x)iτ^(x)i)2]=E[(Yi(1)Yi(0)τ^(x)i)2]E[(\tau(x)_i - \hat{\tau}(x)_i)^2] = E[(Y_i(1) - Y_i(0) - \hat{\tau}(x)_i)^2]

但我们也说过,由于 τ(x)i\tau(x)_i 是不可观测的,因此我们无法直接针对它优化。但很显然,我们可以通过一些办法,比如通过映射函数的转变来进行目标转换。

目标转换

二元变量

我们先假设是个二元变量开始,然后再推向多元变量

设开展了一项随机实验,a100%a*100 \% 的个体解释处理,另 (1a)100%(1-a)*100 \% 的个体没有处理。

我们想的是怎么把处理变量来变换成结果变量

也就是说,我们想的是实现这个一个例子:

E[YiXi=x]=τ(x)iE[Y_i^*|X_i=x] = \tau(x)_i

我们现在想解的是这里的 YiY_i^* 是什么。

让我们倒推回去

E[YiXi=x]=τ(x)i=E[Y(1)iXi=x]E[Y(0)iXi=x]=a×E[Y(1)iXi=x]×1a(1a)×E[Y(0)iXi=x]×11a=1a×E[Y(1)iXi=x]×E[TiXi=x]11a×E[Y(0)iXi=x]×E[(1Ti)Xi=x]=1a×E[Y(1)iTiXi=x]11a×E[Y(0)i(1Ti)Xi=x]=E[1aY(1)iTi11aY(0)i(1Ti)Xi=x]\begin{aligned} E[Y_i^*|X_i=x] &= \tau(x)_i \\ &= E[Y(1)_i| X_i=x] - E[Y(0)_i| X_i=x] \\ &= a \times E[Y(1)_i| X_i=x] \times \frac{1}{a} - (1-a) \times E[Y(0)_i| X_i=x] \times \frac{1}{1-a} \\ &= \frac{1}{a} \times E[Y(1)_i| X_i=x] \times E[ T_i | X_i=x] - \frac{1}{1-a} \times E[Y(0)_i| X_i=x] \times E[(1-T_i)|X_i=x] \\ &= \frac{1}{a} \times E[Y(1)_i *T_i| X_i=x] - \frac{1}{1-a} \times E[Y(0)_i * (1-T_i)| X_i=x] \\ &= E[\frac{1}{a}*Y(1)_i *T_i - \frac{1}{1-a}*Y(0)_i * (1-T_i)|X_i=x] \end{aligned}

所以我们知道了:

Yi=1aY(1)iTi11aY(0)i(1Ti)Y_i^* =\frac{1}{a}*Y(1)_i *T_i - \frac{1}{1-a}*Y(0)_i * (1-T_i)

又有:

YiTi=Y(1)iTi&Yi(1Ti)=Y(0)i(1Ti)Y_i T_i = Y(1)_i T_i \quad \& \quad Y_i (1-T_i) = Y(0)_i (1-T_i)

所以:

Yi=1aYiTi11aYi(1Ti)=YiTiaa(1a)\begin{aligned} Y_i^* &= \frac{1}{a}Y_i T_i - \frac{1}{1-a}Y_i (1-T_i) \\ &=Y_i\frac{T_i-a}{a(1-a)} \end{aligned}

这样我们就推到了这个变换公式

所以对于之前的

E[(τ(x)iτ^(x)i)2]=E[(Yiτ^(x)i)2]E[(\tau(x)_i - \hat{\tau}(x)_i)^2] = E[(Y^*_i - \hat{\tau}(x)_i)^2]

我们可以用任何的回归机器学习模型预测 YiY_i^* 模型输出的就是处理效应的预测。

那么让我们现在考虑不是随机分配,那么我们就会用到之前所说的倾向性得分 e(Xi)e(X_i)

推导过程一样的,我们只需要:

Yi=YiTie(Xi)e(Xi)(1e(Xi))\begin{aligned} Y_i^* &=Y_i\frac{T_i-e(X_i)}{e(X_i)(1-e(X_i))} \end{aligned}

但需要注意的是,应用目标变换时,我们需要满足条件独立性假设 (Y0,Y1)TX(Y_0,Y_1) \perp T|X

当我们用 YiY_i^* 作为预测去进行机器学习时,实际上这个模型是在估计 τ(x)i\tau(x)_i,换句话说,这个模型输出的是 τ^(x)i\hat{\tau}(x)_i

这个看起来很完美,但其也有明显的缺陷:这个变换后的目标是个体处理效应的极其嘈杂的估计,噪声会传导到你的估计中,从而估计的方差很大。但实际应用里,当我们有足够大的样本量时,这个问题就会显得变小了。

多元离散变量

现在假设处理变量不再是二分类变量,而是有多个互斥取值:

Ti{0,1,2,,K}T_i \in \{0,1,2,\cdots,K\}

我们假设 00 作为控制组,1,,K1,\cdots,K 是不同处理。此时每一个处理都对应一个潜在结果:

Yi(0),Yi(1),,Yi(K)Y_i(0),Y_i(1),\cdots,Y_i(K)

对于每个处理相对于控制组的条件平均处理效应即:

τk(x)=E[Yi(k)Yi(0)Xi=x],k=1,,K\tau_k(x)=E[Y_i(k)-Y_i(0)|X_i=x],\quad k=1,\cdots,K

如果是处理分配是随机的,并且第 kk 个处理的分配概率是 pk=P(T=k)p_k=P(T=k),那么二元处理里的目标转换可以推广为:

Yi,k=Yi(1(Ti=k)pk1(Ti=0)p0)Y^*_{i,k} =Y_i\left(\frac{\mathbb{1}(T_i=k)}{p_k} -\frac{\mathbb{1}(T_i=0)}{p_0}\right)

则CATE可以通过目标转化估计为:

E[Yi,kXi=x]=τk(x)E[Y^*_{i,k}|X_i=x]=\tau_k(x)

如果不是随机分配的处理,则需要把固定概率 pkp_k 换成多元处理的倾向得分:

ek(x)=P(Ti=kXi=x)e_k(x)=P(T_i=k|X_i=x)

此时:

Yi,k=Yi(1(Ti=k)ek(Xi)1(Ti=0)e0(Xi))Y^*_{i,k} =Y_i\left(\frac{\mathbb{1}(T_i=k)}{e_k(X_i)} -\frac{\mathbb{1}(T_i=0)}{e_0(X_i)}\right)

我们需要满足条件独立性假设和重叠性:

(Yi(0),Yi(1),,Yi(K))TiXi(Y_i(0),Y_i(1),\cdots,Y_i(K))\perp T_i|X_i 0<ek(x)<10<e_k(x)<1

于是跟二元处理变量一样,我们通过推理即可:

E[Yi,kXi=x]=E[Yi(1(Ti=k)ek(Xi)1(Ti=0)e0(Xi))|Xi=x]=E[Yi(k)Xi=x]E[Yi(0)Xi=x]=τk(x)\begin{aligned} E[Y^*_{i,k}|X_i=x] &=E\left[ Y_i\left(\frac{\mathbb{1}(T_i=k)}{e_k(X_i)} -\frac{\mathbb{1}(T_i=0)}{e_0(X_i)}\right) \middle|X_i=x\right]\\ &=E[Y_i(k)|X_i=x]-E[Y_i(0)|X_i=x]\\ &=\tau_k(x) \end{aligned}

所以,多元离散变量的目标转换实际上是对每一个处理 kk 都构造一个新的目标变量 Yi,kY^*_{i,k},然后分别训练模型:

τ^k(x)=E^[Yi,kXi=x]\hat{\tau}_k(x)=\widehat{E}[Y^*_{i,k}|X_i=x]

如果我们目标是为每个人选择最优处理,可以将控制组的效应定义为 00,然后选择:

d^(x)=argmaxk{0,1,,K}τ^k(x)\hat{d}(x)=\arg\max_{k\in\{0,1,\cdots,K\}}\hat{\tau}_k(x)

如果不同处理有不同成本 ckc_k,则更合理的是选择净收益最大的处理:

d^(x)=argmaxk{0,1,,K}{τ^k(x)ck}\hat{d}(x)=\arg\max_{k\in\{0,1,\cdots,K\}}\{\hat{\tau}_k(x)-c_k\}

如果我们没有一个明确的控制组,也可以做任意两个处理之间的配对效应(此时需要注意多重检验的问题以及高方差问题):

τk,l(x)=E[Yi(k)Yi(l)Xi=x]\tau_{k,l}(x)=E[Y_i(k)-Y_i(l)|X_i=x]

则对应的目标转换是:

Yi,k,l=Yi(1(Ti=k)ek(Xi)1(Ti=l)el(Xi))Y^*_{i,k,l} =Y_i\left(\frac{\mathbb{1}(T_i=k)}{e_k(X_i)}-\frac{\mathbb{1}(T_i=l)}{e_l(X_i)}\right)

需要注意的是,多元处理的目标转换会比二元处理更容易出现高方差。因为当某个处理组很少时,ek(Xi)e_k(X_i) 会很小,权重会变得很大,模型学到的目标变量就会非常嘈杂。所以在多元处理里,重叠性比二元处理更重要。

连续变量

连续处理变量的问题更麻烦。因为当 TT 是连续变量时,我们不再是在比较“处理”和“不处理”,而是在比较处理强度发生微小变化时,结果会怎么变 (我们先假设是线性的,但显然这个假设在真实世界里很少满足)。

此时我们估计的是剂量反应函数的导数

m(t,x)=E[Yi(t)Xi=x]m(t,x)=E[Y_i(t)|X_i=x] τ(t,x)=m(t,x)t\tau(t,x)=\frac{\partial m(t,x)}{\partial t}

也就是说,连续处理的效应一般应该同时依赖于个体特征 xx 和当前处理水平 tt。只有在处理效应对 tt线性的、或者我们只关心一个局部线性斜率时,才可以写成τ(x)<spanclass="mdmeta"mdinline="strong"></span>\tau(x)<span class="md-meta" md-inline="strong"></span>

连续变量目标转换是:

Yi=(YiYˉ)TiTˉσT2Y_i^*=(Y_i-\bar{Y})\frac{T_i-\bar{T}}{\sigma_T^2}

对于这个转化,其适用范围较窄。它可以被理解为在估计一个条件线性模型中的斜率:

E[YiTi=t,Xi=x]=α(x)+β(x)tE[Y_i|T_i=t,X_i=x]=\alpha(x)+\beta(x)t

此时我们想估计的是

τ(x)=β(x)\tau(x)=\beta(x)

如果 TT 是随机分配的,并且在每个 X=xX=x 的局部区域里都有相同的处理均值和方差,那么:

E[YiXi=x]=E[(YiYˉ)TiTˉσT2|Xi=x]=β(x)E[Y^*_i|X_i=x] = E\left[(Y_i-\bar{Y})\frac{T_i-\bar{T}}{\sigma_T^2}\middle|X_i=x\right]=\beta(x)

直觉上,这个式子就是把条件协方差转成条件斜率:

β(x)=Cov(Yi,TiXi=x)Var(TiXi=x)=(YiYˉ)(TiTˉ)(TiTˉ)2\beta(x)=\frac{Cov(Y_i,T_i|X_i=x)}{Var(T_i|X_i=x)} = \frac{\sum(Y_i- \bar{Y})(T_i - \bar{T})}{\sum (T_i - \bar{T})^2}

所以,这个做法实际上是把每个样本变成一个局部斜率的嘈杂代理变量,再用机器学习去预测这个代理变量。

如果处理不是随机分配的,就不能直接用 TiTˉT_i-\bar{T}。更合理的写法应该是先残差化处理变量:

μT(x)=E[TiXi=x]\mu_T(x)=E[T_i|X_i=x] vT(x)=E[(TiμT(Xi))2Xi=x]v_T(x)=E[(T_i-\mu_T(X_i))^2|X_i=x]

当然,这里仍然需要满足连续处理的条件独立性假设和重叠性:

Yi(t)TiXi,tY_i(t)\perp T_i|X_i,\quad \forall t fTX(tx)>0f_{T|X}(t|x)>0

然后使用:

Yi=(YiμY(Xi))TiμT(Xi)vT(Xi)Y_i^*=(Y_i-\mu_Y(X_i))\frac{T_i-\mu_T(X_i)}{v_T(X_i)}

其中:

μY(x)=E[YiXi=x]\mu_Y(x)=E[Y_i|X_i=x]

那么对于这里的 μY(x)\mu_Y(x),通常我们需要用一个模型去进行额外的估计。

因此,连续变量的目标转换可以作为一个直觉工具,但不能把它当成和二元处理一样标准的、普遍成立的公式。它更适合以下情况:

  • 处理变量近似随机分配,或者混杂已经通过 XX 控制;
  • 处理效应对 TT 近似线性;
  • 只想得到 τ(x)\tau(x) 的排序,而不是严格可解释的边际效应数值;
  • 每个 X=xX=x 附近都有足够的处理强度变化,也就是连续处理版本的重叠性。

如果处理效应是非线性的,比如价格从 1 增加到 2 和从 9 增加到 10 的影响完全不同,正如我们上面提到的,此时应该估计,我们不能忽略参数 tt

τ(t,x)=E[Yi(t)Xi=x]t\tau(t,x)=\frac{\partial E[Y_i(t)|X_i=x]}{\partial t}

或者先估计完整的剂量反应函数 m(t,x)m(t,x),再对 tt 求导。

除此之外,这里通过AI搜索文献去寻找更广泛用途的方式去进行目标转换

  1. 多元处理的倾向得分和广义倾向得分Imbens (2000)Imai and van Dyk (2004)Hirano and Imbens (2004) 把二元处理的 propensity score 推广到多值、连续或更一般的 treatment regime。核心思想是:二元处理里是一个概率 e(x)e(x),多元处理里是一组概率 ek(x)e_k(x),连续处理里则变成条件密度或 propensity function。

  2. 多处理 uplift modeling。Zhao, Fang and Simchi-Levi (2017) 讨论了任意数量处理和一般响应变量的 uplift 建模;Olaya, Coussement and Verbeke (2020) 系统比较了 multitreatment uplift 的方法;Zhao and Harinen (2020) 进一步把不同处理成本纳入决策。这个方向更关心个体层面的最优 treatment assignment,而不只是估计某一个处理效应。

  3. Doubly robust pseudo-outcome。多元处理下可以先估计每个处理的结果模型 μk(x)=E[YT=k,X=x]\mu_k(x)=E[Y|T=k,X=x] 和倾向得分 ek(x)e_k(x),再构造:

ϕk=μ^k(Xi)+1(Ti=k)e^k(Xi)(Yiμ^k(Xi))\phi_k =\hat{\mu}_k(X_i) +\frac{\mathbb{1}(T_i=k)}{\hat{e}_k(X_i)} (Y_i-\hat{\mu}_k(X_i))

然后用:

ϕkϕ0\phi_k-\phi_0

作为更稳健的伪结果去学习 τk(x)\tau_k(x)。它比单纯的目标转换更复杂,但通常方差和偏差性质更好。

  1. R-Learner 和 Double Machine Learning。Nie and Wager (2021) 的 R-Learner 不是直接转换 YY,而是先残差化结果和处理,再学习异质性处理效应:
minτi((Yim^(Xi))τ(Xi)(Tie^(Xi)))2\min_{\tau}\sum_i\left((Y_i-\hat{m}(X_i))-\tau(X_i)(T_i-\hat{e}(X_i))\right)^2

对于连续处理,e^(Xi)\hat{e}(X_i) 可以理解为 μ^T(Xi)\hat{\mu}_T(X_i)。这个写法适合把连续处理效应理解为一个条件线性斜率;如果要估计完整的 τ(t,x)\tau(t,x),还需要专门的 continuous-treatment 扩展。

  1. Causal Forest、Generalized Random Forest 和 Orthogonal Random Forest。Athey, Tibshirani and Wager (2019) 的 Generalized Random Forest 可以把问题写成局部矩方程来估计,因此不只适用于二元处理,也可以处理条件平均偏导数等问题。Oprescu, Syrgkanis and Wu (2019)的 Orthogonal Random Forest 则另外结合正交化思想,用来处理高维控制变量下的离散或连续处理异质性效应。

  2. 连续处理的剂量反应函数。Kennedy et al. (2017) 提出了连续处理下的 doubly robust kernel smoothing,用于估计 dose-response curve;Tübbicke (2023) 讨论了用 entropy balancing 估计连续处理的剂量反应函数及其导数;Zhang, Kong and Yang (2025 revision) 则讨论了 continuous treatment 下的 R-Learner。这个方向比简单目标转换更适合非线性连续处理效应。

非线性处理效应

我们在之前的例子都是假定处理效应是线性的,但这种假设往往不合理,处理效应通常会以某种形式呈现饱和(显然,容忍度不可能是无限的)。

这个问题在于弹性或处理效应会随处理水平而变化。通常而言,我们会选用一些变量转换方法:

比如我们在Pearson关联性分析的时候,其变量需要满足正态分布,这时候我们往往可以通过对数转化来使得变量满足正态分布。这个思想也可以用于非线性处理效应。我们可以通过对数转化或平方根转化等函数转化的方式去分别拟合,通过绘制图像的方式去观察其趋势,最后根据AUUC或者Qini系数去评估模型的优劣。但无论如何,这一步需要做大量的尝试。