笔记

因果推断(12)——个性化处理偏差

处理效应异质性与最佳个性化变量

二元处理变量

假设我们有一个助推处理 nudge,例如发放优惠券、免费试用、首单折扣。我们希望知道哪些人最应该收到这个处理。

数据中有两个处理前特征:

  • age:年龄。
  • income:收入。

设定中有一个连续的潜在结果,例如用户的购买倾向、产品偏好、内在效用,记为 SS。这个潜在结果越高,用户越可能转化。

一个简化的数据生成过程可以写成:

S(0)=α+βI+εS(0)=\alpha+\beta I+\varepsilon S(1)=α+βI+δ(A)+εS(1)=\alpha+\beta I+\delta(A)+\varepsilon

其中:

  • AA 表示年龄。
  • II 表示收入。
  • ε\varepsilon 是随机扰动。
  • S(0)S(0) 是没有助推时的潜在结果。
  • S(1)S(1) 是有助推时的潜在结果。
  • δ(A)\delta(A) 是助推对潜在结果的提升。

如果模型中设定:

δ(A)=τ0+γA\delta(A)=\tau_0+\gamma A

那么年龄越大,助推在潜在结果尺度上的增量越大。收入 II 只影响基线水平 S(0)S(0),但不影响潜在结果上的处理增量:

S(1)S(0)=δ(A)S(1)-S(0)=\delta(A)

所以,在潜在连续结果尺度上,结论非常清楚:

E[S(1)S(0)A,I]=δ(A)E[S(1)-S(0)\mid A,I]=\delta(A)

这个式子只依赖年龄 AA,不依赖收入 II。因此,如果我们的目标是预测潜在连续结果上的处理效应,age 是好的个性化分组变量,而income 不是,其在不同分组里的处理效应都是一致的。

但在真实世界里,往往我们的业务通常不直接观察潜在结果 SS,而是通过观察转化率。

我们假设二元转化结果可以看成对潜在结果做阈值化:

Y(t)=1{S(t)>c}Y(t)=\mathbb1\{S(t)>c\}

其中 cc 是转化阈值。只有当潜在结果超过阈值时,用户才会转化。虽然 YYSS 有直接关系,但这个关系不是线性的,而是一个阶跃函数:

S(t)1{S(t)>c}S(t)\quad \longrightarrow \quad \mathbb{1}\{S(t)>c\}

但我们应该注意的是,“潜在结果增加多少”和“转化率增加多少”不是同一件事。

  • 如果某个用户本来就远高于阈值,助推让他的潜在结果继续升高,但他无论如何都会转化,转化结果不变。(低敏感度)
  • 如果某个用户远低于阈值,助推虽然提高了潜在结果,但仍然没有越过阈值,转化结果也不变。(低敏感度)
  • 只有那些本来接近阈值、处理后可能越过阈值的人,才会贡献转化率上的处理效应。(高敏感度)

所以,转化率尺度上的处理效应关心的不是单纯的潜在结果提升,而是:

处理能使多少人跨越阈值?

处理的非交互项也可以影响到CATE

我们关心的是转化率上的CATE,从而识别高敏感度人群:

τY(A,I)=E[Y(1)Y(0)A,I]\tau_Y(A,I)=E[Y(1)-Y(0)\mid A,I]

我们把二元转化的定义代入:

τY(A,I)=P(S(1)>cA,I)P(S(0)>cA,I)\tau_Y(A,I) =P(S(1)>c\mid A,I)-P(S(0)>c\mid A,I)

又因为:

S(1)=S(0)+δ(A)S(1)=S(0)+\delta(A)

所以:

τY(A,I)=P(S(0)+δ(A)>cA,I)P(S(0)>cA,I)=P(cδ(A)<S(0)cA,I)\begin{aligned} \tau_Y(A,I) &=P(S(0)+\delta(A)>c\mid A,I)-P(S(0)>c\mid A,I) \\ &=P(c-\delta(A)<S(0)\le c\mid A,I) \end{aligned}

也就是说,转化率上的处理效应,等于“基线潜在结果落在阈值下方一小段区间内”的概率。

这个区间是:(也可以通过转化为邻域的表达方式)

(cδ(A), c]orU(cδ(A)2,δ(A)2)(c-\delta(A),\ c] \quad or \quad U(c-\frac{\delta(A)}{2}, \frac{\delta(A)}{2})

它的宽度由年龄决定,年龄越大,处理推动的距离越长。

但这个区间里到底有多少人,还取决于 S(0)S(0) 的位置。而 S(0)S(0) 的均值是:

α+βI\alpha+\beta I

这就意味着收入会通过移动基线潜在结果分布,改变这个区间中的概率质量。即使收入没有出现在潜在结果处理效应 δ(A)\delta(A) 里面,它也会出现在转化率处理效应 τY(A,I)\tau_Y(A,I) 里面。

换句话说,在潜在结果的概率上,助推的处理效应只依靠年龄:

E[S(1)S(0)A,I]=δ(A)E[S(1)-S(0)\mid A,I]=\delta(A)

但在转化率上,,有些东西变了,助推的处理效应变得不仅依靠年龄,还依靠基线时的影响水平:

E[Y(1)Y(0)A,I]h(δ(A))E[Y(1)-Y(0)\mid A,I]\ne h(\delta(A))

它还取决于基线位置 α+βI\alpha+\beta I。所以,我们还是要清楚,我们的目的是什么?如果我们最后就通过年龄进行分组实施不同的助推作用,我们在最终策略上就会犯错了。

详细推理

为了看得更清楚,假设随机扰动服从正态分布:

εN(0,σ2)\varepsilon\sim N(0,\sigma^2)

Φ()\Phi(\cdot) 表示标准正态分布函数。则没有处理时的转化概率是:

p0(A,I)=P(Y(0)=1A,I)=Φ(α+βIcσ)p_0(A,I)=P(Y(0)=1\mid A,I) =\Phi\left(\frac{\alpha+\beta I-c}{\sigma}\right)

有处理时的转化概率是:

p1(A,I)=P(Y(1)=1A,I)=Φ(α+βI+δ(A)cσ)p_1(A,I)=P(Y(1)=1\mid A,I) =\Phi\left(\frac{\alpha+\beta I+\delta(A)-c}{\sigma}\right)

所以转化率上的 CATE 是:

τY(A,I)=Φ(α+βI+δ(A)cσ)Φ(α+βIcσ)\tau_Y(A,I) =\Phi\left(\frac{\alpha+\beta I+\delta(A)-c}{\sigma}\right) -\Phi\left(\frac{\alpha+\beta I-c}{\sigma}\right)

这个式子已经说明了所有问题:

  • 年龄 AA 通过 δ(A)\delta(A) 影响处理带来的潜在提升。
  • 收入 II 通过 α+βIc\alpha+\beta I-c 影响用户距离阈值的位置。
  • 二者共同决定转化率上的处理效应。

因此,收入并不是在潜在连续结果尺度上改变了处理效应;收入是在二元转化率尺度上改变了处理效应。

小效应近似

上面的等式我们可以用泰勒展开得到一个非常有用的近似。

令:

u(I)=α+βIcσu(I)=\frac{\alpha+\beta I-c}{\sigma} d(A)=δ(A)σd(A)=\frac{\delta(A)}{\sigma}

则:

τY(A,I)=ϕ(u(I)+d(A))ϕ(u(I))\tau_Y(A,I)=\phi(u(I)+d(A))-\phi(u(I))

当处理带来的潜在提升不是特别大时,有:

τY(A,I)ϕ(u(I))d(A)\tau_Y(A,I)\approx \phi(u(I))d(A)

其中 ϕ()\phi(\cdot) 是标准正态密度函数。

这个近似非常重要。它告诉我们:

转化率处理效应潜在结果提升×当前位置的转化函数斜率\text{转化率处理效应} \approx \text{潜在结果提升} \times \text{当前位置的转化函数斜率}

具体来看每一项:

  • 年龄影响第一项:潜在结果提升有多大。

  • 收入影响第二项:当前个体处在转化曲线的哪个位置,那里的斜率有多大。

如果收入对基线转化概率的影响很强,那么 ϕ(u(I))\phi(u(I)) 的变化可能比 d(A)d(A) 的变化更大。这时,按收入分组就可能比按年龄分组更能区分转化率上的处理效应。

“潜在结果与转化率有直接关系”不等于“效应排序不变”

通常而言,潜在结果和转化率之间确实有直接关系。潜在结果越高,转化概率通常越高。

但这里真正要比较的是处理效应:

S(1)S(0)S(1)-S(0)

和:

Y(1)Y(0)Y(1)-Y(0)

非线性变换通常不会保持差值的排序。

如果 Y=g(S)Y=g(S),并且 gg 是线性的,例如:

g(S)=a+bSg(S)=a+bS

那么:

g(S+Δ)g(S)=Δbg(S+\Delta)-g(S)=\Delta b

此时处理效应排序只取决于 Δ\Delta。谁的潜在提升大,谁的结果提升也大。

但二元转化率对应的是非线性函数。用平滑的逻辑函数近似时:

g(S)=11+eSg(S)=\frac{1}{1+e^{-S}}

则:

g(S)=g(S)(1g(S))g'(S)=g(S)(1-g(S))

g(S)=0.5g(S)=0.5 时,导数最大;当 g(S)g(S) 接近 0 或 1 时,导数接近 0。

所以,在二元转化问题中,最容易被处理改变的人通常不是基线概率最高的人,也不是基线概率最低的人,而是基线转化概率处在中间、接近决策边界的人。

例子

假设转化概率近似满足逻辑函数:

p=g(η)=11+eηp=g(\eta)=\frac{1}{1+e^{-\eta}}

处理把潜在指数 η\eta 提高 1。考虑三类人:

基线位置 η\eta 基线转化率 g(η)g(\eta) 处理后转化率 g(η+1)g(\eta+1) 转化率提升
-4 0.018 0.047 0.029
0 0.500 0.731 0.231
4 0.982 0.993 0.011

三类人的潜在提升都一样,都是 1。但转化率提升完全不同。

这张表说明:

  • 对极低基线转化率的人,处理后仍然很可能不转化。
  • 对极高基线转化率的人,不处理也很可能转化。
  • 对中间位置的人,处理最可能改变最终转化结果。

如果收入强烈决定 η\eta 的位置,那么收入自然会成为很强的转化率处理效应分组变量。

连续处理变量

前面讨论的是二元处理变量:处理只有 T=0T=0T=1T=1 两种状态。因此我们可以直接定义:

τ(x)=E[Y(1)Y(0)X=x]\tau(x)=E[Y(1)-Y(0)\mid X=x]

然后问:哪个变量最能区分 τ(x)\tau(x)

但如果处理变量不是二元的,比如:

  • 优惠券金额:0 元、5 元、10 元、20 元。
  • 药物剂量:低剂量、中剂量、高剂量。
  • 广告曝光次数:1 次、2 次、5 次、10 次。
  • 商品价格:5 元、10 元、15 元、20 元。

这时就不能再把处理效应理解成一个简单的差值 Y(1)Y(0)Y(1)-Y(0)。因为每一个处理水平 tt 都对应一个潜在结果 Y(t)Y(t) ,此时,个体的处理效应是一条关于处理水平的函数。

我们还是像之前一样定义条件剂量反应函数:

μ(t,x)=E[Y(t)X=x]\mu(t,x)=E[Y(t)\mid X=x]

其中:

  • tt 是处理强度。
  • xx 是个体特征。
  • μ(t,x)\mu(t,x) 表示对特征为 xx 的个体施加处理水平 tt 时的期望结果。

所以,连续处理或多水平处理下的核心问题变成:

哪些变量能帮助我们理解或优化整条剂量反应曲线 μ(t,x)\mu(t,x)

非二元处理下,至少有三种常见目标。不同目标会对应不同的最佳个性化变量。

目标一:比较两个处理水平

如果问题是“把优惠券从 5 元提高到 20 元,对谁最有效”,那么我们关心的是:

τ5,20(x)=E[Y(20)Y(5)X=x]\tau_{5,20}(x)=E[Y(20)-Y(5)\mid X=x]

更一般地,对于两个处理水平 t0t_0t1t_1,定义:

τt0,t1(x)=μ(t1,x)μ(t0,x)\tau_{t_0,t_1}(x)=\mu(t_1,x)-\mu(t_0,x)

这时,好的个性化变量是能够区分这个差值的变量。

应该注意的是,这个变量不一定是“和处理显式交互”的变量(正如我们前面二分类处理变量提到的)。只要结果函数是非线性的,一个只影响基线水平的变量,也可能改变:

μ(t1,x)μ(t0,x)\mu(t_1,x)-\mu(t_0,x)

目标二:判断当前处理水平附近的边际效应

如果问题是“当前已经给了 10 元优惠券,再多给 1 元是否值得”,那么我们关心的不是两个相距很远的处理水平,而是当前处理水平附近的局部变化。

那么,此时我们的目标是边际处理效应

θ(t,x)=μ(t,x)t\theta(t,x)=\frac{\partial \mu(t,x)}{\partial t}

它表示在处理水平 tt 附近,处理强度增加一个很小单位,会让结果变化多少。

这时,好的个性化变量是能够区分局部斜率 θ(t,x)\theta(t,x) 的变量。

如在之前的定价问题中,tt 可以表示价格,YY 表示销量。我们关心的是:

E[Y(t)X=x]t\frac{\partial E[Y(t)\mid X=x]}{\partial t}

如果某类用户的曲线更陡,说明他们对价格更敏感;如果曲线更平,说明他们对价格不敏感。

但是要注意:边际效应不仅取决于人群特征 xx,也取决于当前处理水平 tt

目标三:直接选择最优处理水平

如果业务问题是“每个人应该给多少优惠券”,或者“每个人应该设定什么价格”,那么我们最终关心的是最优处理水平:

t(x)=argmaxtμ(t,x)t^*(x)=\arg\max_t \mu(t,x)

如果处理有成本,比如优惠券金额越高成本越高,就应该写成:

t(x)=argmaxt{μ(t,x)C(t)}t^*(x)=\arg\max_t \{\mu(t,x)-C(t)\}

或者,如果结果 YY 是收益,可以写成:

t(x)=argmaxt{收益(t,x)成本(t)}t^*(x)=\arg\max_t \{\text{收益}(t,x)-\text{成本}(t)\}

这时,好的个性化变量不是单纯让某个处理效应更大,而是能帮助我们改变最优决策 t(x)t^*(x) 的变量。

举例来说,两个用户都可能因为 20 元优惠券而提高转化率,但如果一个用户用 5 元优惠券就能被打动,另一个用户必须用 20 元才行,那么最优策略显然不同。

因此,在最优剂量问题中,个性化变量的价值体现在 t(x)t^*(x) 是否会随着这个变量发生变化。

从二元处理变量到连续处理变量

我们回到一开始二元变量的例子,我们说对于潜在结果而言,年龄是一个很好的个性化变量,但对于转化率来说,收入才是好的个性化变量,我们现在扩展到连续变量上:

假设潜在结果先由一个连续指数 η(t,x)\eta(t,x) 决定,再经过一个非线性函数 g()g(\cdot) 转成最终结果:

μ(t,x)=g(η(t,x))\mu(t,x)=g(\eta(t,x))

其中:

η(t,x)=f0(x)+fT(t)\eta(t,x)=f_0(x)+f_T(t)

这里故意没有写处理和特征的交互项。也就是说,在潜在指数 η\eta 的尺度上,xx 只影响基线,tt 只影响处理强度。

如果 gg 是线性的,例如:

g(z)=a+bzg(z)=a+bz

那么:

μ(t,x)t=bfT(t)t\frac{\partial \mu(t,x)}{\partial t} =b\frac{\partial f_T(t)}{\partial t}

此时边际处理效应不依赖 xx。也就是说,如果没有显式交互项,变量 xx 不会成为好的个性化变量。

但如果 gg 是非线性的,那么:

μ(t,x)t=g(η(t,x))η(t,x)t\frac{\partial \mu(t,x)}{\partial t} =g'(\eta(t,x))\frac{\partial \eta(t,x)}{\partial t}

由于:

η(t,x)=f0(x)+fT(t)\eta(t,x)=f_0(x)+f_T(t)

所以:

μ(t,x)t=g(f0(x)+fT(t))fT(t)\frac{\partial \mu(t,x)}{\partial t} =g'(f_0(x)+f_T(t))f_T'(t)

这说明,即使 xx 没有和 tt 显式交互,它也会通过 f0(x)f_0(x) 改变 gg' 所处的位置,从而改变边际处理效应。

这和前面二元处理变量如何影响 CATE 的逻辑完全一样:

变量可以不改变处理在潜在尺度上的作用,但它可以改变个体处在非线性曲线上的位置,从而改变最终结果尺度上的处理效应。

非线性处理变量

如果处理变量本身的作用也是非线性的,例如:

η(t,x)=f0(x)+fT(t)\eta(t,x)=f_0(x)+f_T(t)

其中我们将处理变量换成二次函数:

fT(t)=atbt2f_T(t)=a t-bt^2

那么处理的边际作用是:

fT(t)=a2btf_T'(t)=a-2bt

这表示处理强度越高,边际作用可能越小,甚至可能变成负数。

同样的,我们还是使用非线性函数将潜在结果转化为我们的最终结果:

μ(t,x)=g(η(t,x))\mu(t,x)=g(\eta(t,x))

代入之后:

μ(t,x)t=g(f0(x)+fT(t))(a2bt)\frac{\partial \mu(t,x)}{\partial t} =g'(f_0(x)+f_T(t))(a-2bt)

我们发现,现在影响的东西又变多了,这个式子里有两个来源会造成处理效应变化:

  1. a2bta-2bt:处理变量自身的边际作用会随着 tt 改变。
  2. g(f0(x)+fT(t))g'(f_0(x)+f_T(t)):个体在非线性结果函数上的位置会随着 xxtt 改变。

所以,在非线性连续处理问题中,个性化变量的判断更加依赖当前位置。

同一个变量可能在低剂量区很重要,在高剂量区不重要;也可能在某个处理区间内区分度很强,在另一个区间内几乎没有区分度。

曲率与斜率

这点和二元变量不一样,如果处理变量是连续的,我们还需要关注曲率:

2μ(t,x)t2\frac{\partial^2\mu(t,x)}{\partial t^2}

一阶导数告诉我们当前多给一点处理会带来多少变化;二阶导数告诉我们边际效应是在增加还是减少。

如果:

2μ(t,x)t2<0\frac{\partial^2\mu(t,x)}{\partial t^2}<0

说明边际收益递减。比如优惠券金额越高,继续加钱带来的额外转化越来越少。

如果:

2μ(t,x)t2>0\frac{\partial^2\mu(t,x)}{\partial t^2}>0

说明边际收益递增。比如某个药物剂量低于阈值时几乎无效,一旦超过某个剂量,效果快速增强。

如果曲率也随 xx 改变,那么个性化变量不仅影响“处理有没有效”,还影响“什么时候开始有效”和“什么时候开始饱和”。

这时,判断最佳个性化变量就不能只看某一个平均处理效应,而要看整条曲线形状是否随变量改变。

定价例子(连续处理变量但是线性)

假设处理变量是价格 pp,结果是购买概率。某个用户群体的购买概率为:

μ(p,x)=g(α(x)β(x)p)\mu(p,x)=g(\alpha(x)-\beta(x)p)

其中 g()g(\cdot) 是Logistics函数:

g(z)=11+ezg(z)=\frac{1}{1+e^{-z}}

其中

  • α(x)\alpha(x) 表示基线购买倾向。
  • β(x)\beta(x) 表示价格敏感度。

价格的边际效应是:

μ(p,x)p=β(x)g(α(x)β(x)p)\frac{\partial \mu(p,x)}{\partial p} =-\beta(x)g'(\alpha(x)-\beta(x)p)

跟我们上面分析的过程一样,最终的价格效应由两部分决定:

  1. β(x)\beta(x):这个群体本身是否价格敏感。
  2. g(α(x)β(x)p)g'(\alpha(x)-\beta(x)p):这个群体在当前价格下是否位于购买曲线最陡的位置。

所以,一个变量有两种方式成为好的个性化变量:

  • 它改变 β(x)\beta(x),也就是改变真实价格敏感度。
  • 它改变 α(x)\alpha(x),也就是改变基线购买倾向,使用户处在不同的曲线位置。

如果某个变量只是提高基线购买倾向 α(x)\alpha(x),但不改变价格敏感度 β(x)\beta(x),它仍然可能影响价格的边际效应。原因是基线购买倾向改变了用户在逻辑曲线上的位置。

优惠券例子(连续处理变量但是非线性)

假设处理变量是优惠券金额 dd,结果是转化概率:

μ(d,x)=g(α(x)+r(x)dbd2)\mu(d,x)=g(\alpha(x)+r(x)d-bd^2)

这里:

  • α(x)\alpha(x) 是基线转化倾向。
  • r(x)r(x) 是个体对优惠的敏感程度。
  • bd2-bd^2 表示优惠券金额存在边际收益递减。

优惠券金额的边际效应是:

μ(d,x)d=g(α(x)+r(x)dbd2)(r(x)2bd)\frac{\partial \mu(d,x)}{\partial d} =g'(\alpha(x)+r(x)d-bd^2)(r(x)-2bd)

这个式子更加复杂,但我们仍然通过两部分进行观察:

  1. r(x)r(x) 大的人,其在两项里面均为正相关,对优惠更敏感。
  2. dd 越大,只影响第二项,r(x)2bdr(x)-2bd 可能越小,说明加优惠的边际收益下降。
  3. α(x)\alpha(x) 只会影响第一项,其会通过 gg' 改变个体处在转化曲线的位置。

所以,判断谁应该拿更大优惠券时,不能只看 r(x)r(x),也不能只看 α(x)\alpha(x)。真正要看的是:不能只看与优惠金额的交互项敏感度

argmaxd{μ(d,x)C(d)}\arg\max_d \{\mu(d,x)-C(d)\}

也就是哪个优惠金额能带来最大的净收益。

三类异质性来源

异质性来源 数学表现 含义
基线异质性 f0(x)f_0(x) 不同 不同人原本的位置不同
斜率异质性 μ(t,x)/t\partial \mu(t,x)/\partial t 不同 不同人对处理强度的局部反应不同
曲率异质性 2μ(t,x)/t2\partial^2\mu(t,x)/\partial t^2 不同 不同人的边际效应递增或递减速度不同

二元处理通常只强调“斜率异质性”或“处理效应异质性”。但在连续处理中,基线、斜率和曲率都会影响最终决策。

交互性与异质性

在之前的线性模型中,我们习惯通过交互项判断异质性。例如:

Y=α+βT+γX+δTX+εY=\alpha+\beta T+\gamma X+\delta TX+\varepsilon

这里如果 δ0\delta\ne 0,就说明 XX 改变了处理效应。

但其实这个判断只在线性结果尺度上比较可靠。

如果真实模型是:

Y=g(α+βT+γX)Y=g(\alpha+\beta T+\gamma X)

但我们即使没有 TXTX 交互项,处理的边际效应是:

E[YT,X]T=g(α+βT+γX)β\frac{\partial E[Y\mid T,X]}{\partial T} =g'(\alpha+\beta T+\gamma X)\beta

只要 gg' 不是常数,XX 也会改变处理的边际效应。

因此,在非线性模型中:

没有显式交互项,不代表没有处理效应异质性。

反过来也要小心:

有交互项,也不代表这个变量一定是最好的个性化变量。

因为另一个变量虽然不改变潜在尺度上的处理斜率,但可能强烈改变个体在非线性曲线上的位置,从而对最终决策更重要。