处理效应异质性与最佳个性化变量
二元处理变量
假设我们有一个助推处理 nudge,例如发放优惠券、免费试用、首单折扣。我们希望知道哪些人最应该收到这个处理。
数据中有两个处理前特征:
设定中有一个连续的潜在结果,例如用户的购买倾向、产品偏好、内在效用,记为 S。这个潜在结果越高,用户越可能转化。
一个简化的数据生成过程可以写成:
S(0)=α+βI+ε
S(1)=α+βI+δ(A)+ε
其中:
- A 表示年龄。
- I 表示收入。
- ε 是随机扰动。
- S(0) 是没有助推时的潜在结果。
- S(1) 是有助推时的潜在结果。
- δ(A) 是助推对潜在结果的提升。
如果模型中设定:
δ(A)=τ0+γA
那么年龄越大,助推在潜在结果尺度上的增量越大。收入 I 只影响基线水平 S(0),但不影响潜在结果上的处理增量:
S(1)−S(0)=δ(A)
所以,在潜在连续结果尺度上,结论非常清楚:
E[S(1)−S(0)∣A,I]=δ(A)
这个式子只依赖年龄 A,不依赖收入 I。因此,如果我们的目标是预测潜在连续结果上的处理效应,age 是好的个性化分组变量,而income 不是,其在不同分组里的处理效应都是一致的。
但在真实世界里,往往我们的业务通常不直接观察潜在结果 S,而是通过观察转化率。
我们假设二元转化结果可以看成对潜在结果做阈值化:
Y(t)=1{S(t)>c}
其中 c 是转化阈值。只有当潜在结果超过阈值时,用户才会转化。虽然 Y 与 S 有直接关系,但这个关系不是线性的,而是一个阶跃函数:
S(t)⟶1{S(t)>c}
但我们应该注意的是,“潜在结果增加多少”和“转化率增加多少”不是同一件事。
- 如果某个用户本来就远高于阈值,助推让他的潜在结果继续升高,但他无论如何都会转化,转化结果不变。(低敏感度)
- 如果某个用户远低于阈值,助推虽然提高了潜在结果,但仍然没有越过阈值,转化结果也不变。(低敏感度)
- 只有那些本来接近阈值、处理后可能越过阈值的人,才会贡献转化率上的处理效应。(高敏感度)
所以,转化率尺度上的处理效应关心的不是单纯的潜在结果提升,而是:
处理能使多少人跨越阈值?
处理的非交互项也可以影响到CATE
我们关心的是转化率上的CATE,从而识别高敏感度人群:
τY(A,I)=E[Y(1)−Y(0)∣A,I]
我们把二元转化的定义代入:
τY(A,I)=P(S(1)>c∣A,I)−P(S(0)>c∣A,I)
又因为:
S(1)=S(0)+δ(A)
所以:
τY(A,I)=P(S(0)+δ(A)>c∣A,I)−P(S(0)>c∣A,I)=P(c−δ(A)<S(0)≤c∣A,I)
也就是说,转化率上的处理效应,等于“基线潜在结果落在阈值下方一小段区间内”的概率。
这个区间是:(也可以通过转化为邻域的表达方式)
(c−δ(A), c]orU(c−2δ(A),2δ(A))
它的宽度由年龄决定,年龄越大,处理推动的距离越长。
但这个区间里到底有多少人,还取决于 S(0) 的位置。而 S(0) 的均值是:
α+βI
这就意味着收入会通过移动基线潜在结果分布,改变这个区间中的概率质量。即使收入没有出现在潜在结果处理效应 δ(A) 里面,它也会出现在转化率处理效应 τY(A,I) 里面。
换句话说,在潜在结果的概率上,助推的处理效应只依靠年龄:
E[S(1)−S(0)∣A,I]=δ(A)
但在转化率上,,有些东西变了,助推的处理效应变得不仅依靠年龄,还依靠基线时的影响水平:
E[Y(1)−Y(0)∣A,I]=h(δ(A))
它还取决于基线位置 α+βI。所以,我们还是要清楚,我们的目的是什么?如果我们最后就通过年龄进行分组实施不同的助推作用,我们在最终策略上就会犯错了。
详细推理
为了看得更清楚,假设随机扰动服从正态分布:
ε∼N(0,σ2)
令 Φ(⋅) 表示标准正态分布函数。则没有处理时的转化概率是:
p0(A,I)=P(Y(0)=1∣A,I)=Φ(σα+βI−c)
有处理时的转化概率是:
p1(A,I)=P(Y(1)=1∣A,I)=Φ(σα+βI+δ(A)−c)
所以转化率上的 CATE 是:
τY(A,I)=Φ(σα+βI+δ(A)−c)−Φ(σα+βI−c)
这个式子已经说明了所有问题:
- 年龄 A 通过 δ(A) 影响处理带来的潜在提升。
- 收入 I 通过 α+βI−c 影响用户距离阈值的位置。
- 二者共同决定转化率上的处理效应。
因此,收入并不是在潜在连续结果尺度上改变了处理效应;收入是在二元转化率尺度上改变了处理效应。
小效应近似
上面的等式我们可以用泰勒展开得到一个非常有用的近似。
令:
u(I)=σα+βI−c
d(A)=σδ(A)
则:
τY(A,I)=ϕ(u(I)+d(A))−ϕ(u(I))
当处理带来的潜在提升不是特别大时,有:
τY(A,I)≈ϕ(u(I))d(A)
其中 ϕ(⋅) 是标准正态密度函数。
这个近似非常重要。它告诉我们:
转化率处理效应≈潜在结果提升×当前位置的转化函数斜率
具体来看每一项:
如果收入对基线转化概率的影响很强,那么 ϕ(u(I)) 的变化可能比 d(A) 的变化更大。这时,按收入分组就可能比按年龄分组更能区分转化率上的处理效应。
“潜在结果与转化率有直接关系”不等于“效应排序不变”
通常而言,潜在结果和转化率之间确实有直接关系。潜在结果越高,转化概率通常越高。
但这里真正要比较的是处理效应:
S(1)−S(0)
和:
Y(1)−Y(0)
非线性变换通常不会保持差值的排序。
如果 Y=g(S),并且 g 是线性的,例如:
g(S)=a+bS
那么:
g(S+Δ)−g(S)=Δb
此时处理效应排序只取决于 Δ。谁的潜在提升大,谁的结果提升也大。
但二元转化率对应的是非线性函数。用平滑的逻辑函数近似时:
g(S)=1+e−S1
则:
g′(S)=g(S)(1−g(S))
当 g(S)=0.5 时,导数最大;当 g(S) 接近 0 或 1 时,导数接近 0。
所以,在二元转化问题中,最容易被处理改变的人通常不是基线概率最高的人,也不是基线概率最低的人,而是基线转化概率处在中间、接近决策边界的人。
例子
假设转化概率近似满足逻辑函数:
p=g(η)=1+e−η1
处理把潜在指数 η 提高 1。考虑三类人:
| 基线位置 η |
基线转化率 g(η) |
处理后转化率 g(η+1) |
转化率提升 |
| -4 |
0.018 |
0.047 |
0.029 |
| 0 |
0.500 |
0.731 |
0.231 |
| 4 |
0.982 |
0.993 |
0.011 |
三类人的潜在提升都一样,都是 1。但转化率提升完全不同。
这张表说明:
- 对极低基线转化率的人,处理后仍然很可能不转化。
- 对极高基线转化率的人,不处理也很可能转化。
- 对中间位置的人,处理最可能改变最终转化结果。
如果收入强烈决定 η 的位置,那么收入自然会成为很强的转化率处理效应分组变量。
连续处理变量
前面讨论的是二元处理变量:处理只有 T=0 和 T=1 两种状态。因此我们可以直接定义:
τ(x)=E[Y(1)−Y(0)∣X=x]
然后问:哪个变量最能区分 τ(x)?
但如果处理变量不是二元的,比如:
- 优惠券金额:0 元、5 元、10 元、20 元。
- 药物剂量:低剂量、中剂量、高剂量。
- 广告曝光次数:1 次、2 次、5 次、10 次。
- 商品价格:5 元、10 元、15 元、20 元。
这时就不能再把处理效应理解成一个简单的差值 Y(1)−Y(0)。因为每一个处理水平 t 都对应一个潜在结果 Y(t) ,此时,个体的处理效应是一条关于处理水平的函数。
我们还是像之前一样定义条件剂量反应函数:
μ(t,x)=E[Y(t)∣X=x]
其中:
- t 是处理强度。
- x 是个体特征。
- μ(t,x) 表示对特征为 x 的个体施加处理水平 t 时的期望结果。
所以,连续处理或多水平处理下的核心问题变成:
哪些变量能帮助我们理解或优化整条剂量反应曲线 μ(t,x)?
非二元处理下,至少有三种常见目标。不同目标会对应不同的最佳个性化变量。
目标一:比较两个处理水平
如果问题是“把优惠券从 5 元提高到 20 元,对谁最有效”,那么我们关心的是:
τ5,20(x)=E[Y(20)−Y(5)∣X=x]
更一般地,对于两个处理水平 t0 和 t1,定义:
τt0,t1(x)=μ(t1,x)−μ(t0,x)
这时,好的个性化变量是能够区分这个差值的变量。
应该注意的是,这个变量不一定是“和处理显式交互”的变量(正如我们前面二分类处理变量提到的)。只要结果函数是非线性的,一个只影响基线水平的变量,也可能改变:
μ(t1,x)−μ(t0,x)
目标二:判断当前处理水平附近的边际效应
如果问题是“当前已经给了 10 元优惠券,再多给 1 元是否值得”,那么我们关心的不是两个相距很远的处理水平,而是当前处理水平附近的局部变化。
那么,此时我们的目标是边际处理效应:
θ(t,x)=∂t∂μ(t,x)
它表示在处理水平 t 附近,处理强度增加一个很小单位,会让结果变化多少。
这时,好的个性化变量是能够区分局部斜率 θ(t,x) 的变量。
如在之前的定价问题中,t 可以表示价格,Y 表示销量。我们关心的是:
∂t∂E[Y(t)∣X=x]
如果某类用户的曲线更陡,说明他们对价格更敏感;如果曲线更平,说明他们对价格不敏感。
但是要注意:边际效应不仅取决于人群特征 x,也取决于当前处理水平 t。
目标三:直接选择最优处理水平
如果业务问题是“每个人应该给多少优惠券”,或者“每个人应该设定什么价格”,那么我们最终关心的是最优处理水平:
t∗(x)=argtmaxμ(t,x)
如果处理有成本,比如优惠券金额越高成本越高,就应该写成:
t∗(x)=argtmax{μ(t,x)−C(t)}
或者,如果结果 Y 是收益,可以写成:
t∗(x)=argtmax{收益(t,x)−成本(t)}
这时,好的个性化变量不是单纯让某个处理效应更大,而是能帮助我们改变最优决策 t∗(x) 的变量。
举例来说,两个用户都可能因为 20 元优惠券而提高转化率,但如果一个用户用 5 元优惠券就能被打动,另一个用户必须用 20 元才行,那么最优策略显然不同。
因此,在最优剂量问题中,个性化变量的价值体现在 t∗(x) 是否会随着这个变量发生变化。
从二元处理变量到连续处理变量
我们回到一开始二元变量的例子,我们说对于潜在结果而言,年龄是一个很好的个性化变量,但对于转化率来说,收入才是好的个性化变量,我们现在扩展到连续变量上:
假设潜在结果先由一个连续指数 η(t,x) 决定,再经过一个非线性函数 g(⋅) 转成最终结果:
μ(t,x)=g(η(t,x))
其中:
η(t,x)=f0(x)+fT(t)
这里故意没有写处理和特征的交互项。也就是说,在潜在指数 η 的尺度上,x 只影响基线,t 只影响处理强度。
如果 g 是线性的,例如:
g(z)=a+bz
那么:
∂t∂μ(t,x)=b∂t∂fT(t)
此时边际处理效应不依赖 x。也就是说,如果没有显式交互项,变量 x 不会成为好的个性化变量。
但如果 g 是非线性的,那么:
∂t∂μ(t,x)=g′(η(t,x))∂t∂η(t,x)
由于:
η(t,x)=f0(x)+fT(t)
所以:
∂t∂μ(t,x)=g′(f0(x)+fT(t))fT′(t)
这说明,即使 x 没有和 t 显式交互,它也会通过 f0(x) 改变 g′ 所处的位置,从而改变边际处理效应。
这和前面二元处理变量如何影响 CATE 的逻辑完全一样:
变量可以不改变处理在潜在尺度上的作用,但它可以改变个体处在非线性曲线上的位置,从而改变最终结果尺度上的处理效应。
非线性处理变量
如果处理变量本身的作用也是非线性的,例如:
η(t,x)=f0(x)+fT(t)
其中我们将处理变量换成二次函数:
fT(t)=at−bt2
那么处理的边际作用是:
fT′(t)=a−2bt
这表示处理强度越高,边际作用可能越小,甚至可能变成负数。
同样的,我们还是使用非线性函数将潜在结果转化为我们的最终结果:
μ(t,x)=g(η(t,x))
代入之后:
∂t∂μ(t,x)=g′(f0(x)+fT(t))(a−2bt)
我们发现,现在影响的东西又变多了,这个式子里有两个来源会造成处理效应变化:
- a−2bt:处理变量自身的边际作用会随着 t 改变。
- g′(f0(x)+fT(t)):个体在非线性结果函数上的位置会随着 x 和 t 改变。
所以,在非线性连续处理问题中,个性化变量的判断更加依赖当前位置。
同一个变量可能在低剂量区很重要,在高剂量区不重要;也可能在某个处理区间内区分度很强,在另一个区间内几乎没有区分度。
曲率与斜率
这点和二元变量不一样,如果处理变量是连续的,我们还需要关注曲率:
∂t2∂2μ(t,x)
一阶导数告诉我们当前多给一点处理会带来多少变化;二阶导数告诉我们边际效应是在增加还是减少。
如果:
∂t2∂2μ(t,x)<0
说明边际收益递减。比如优惠券金额越高,继续加钱带来的额外转化越来越少。
如果:
∂t2∂2μ(t,x)>0
说明边际收益递增。比如某个药物剂量低于阈值时几乎无效,一旦超过某个剂量,效果快速增强。
如果曲率也随 x 改变,那么个性化变量不仅影响“处理有没有效”,还影响“什么时候开始有效”和“什么时候开始饱和”。
这时,判断最佳个性化变量就不能只看某一个平均处理效应,而要看整条曲线形状是否随变量改变。
定价例子(连续处理变量但是线性)
假设处理变量是价格 p,结果是购买概率。某个用户群体的购买概率为:
μ(p,x)=g(α(x)−β(x)p)
其中 g(⋅) 是Logistics函数:
g(z)=1+e−z1
其中
- α(x) 表示基线购买倾向。
- β(x) 表示价格敏感度。
价格的边际效应是:
∂p∂μ(p,x)=−β(x)g′(α(x)−β(x)p)
跟我们上面分析的过程一样,最终的价格效应由两部分决定:
- β(x):这个群体本身是否价格敏感。
- g′(α(x)−β(x)p):这个群体在当前价格下是否位于购买曲线最陡的位置。
所以,一个变量有两种方式成为好的个性化变量:
- 它改变 β(x),也就是改变真实价格敏感度。
- 它改变 α(x),也就是改变基线购买倾向,使用户处在不同的曲线位置。
如果某个变量只是提高基线购买倾向 α(x),但不改变价格敏感度 β(x),它仍然可能影响价格的边际效应。原因是基线购买倾向改变了用户在逻辑曲线上的位置。
优惠券例子(连续处理变量但是非线性)
假设处理变量是优惠券金额 d,结果是转化概率:
μ(d,x)=g(α(x)+r(x)d−bd2)
这里:
- α(x) 是基线转化倾向。
- r(x) 是个体对优惠的敏感程度。
- −bd2 表示优惠券金额存在边际收益递减。
优惠券金额的边际效应是:
∂d∂μ(d,x)=g′(α(x)+r(x)d−bd2)(r(x)−2bd)
这个式子更加复杂,但我们仍然通过两部分进行观察:
- r(x) 大的人,其在两项里面均为正相关,对优惠更敏感。
- d 越大,只影响第二项,r(x)−2bd 可能越小,说明加优惠的边际收益下降。
- α(x) 只会影响第一项,其会通过 g′ 改变个体处在转化曲线的位置。
所以,判断谁应该拿更大优惠券时,不能只看 r(x),也不能只看 α(x)。真正要看的是:不能只看与优惠金额的交互项敏感度
argdmax{μ(d,x)−C(d)}
也就是哪个优惠金额能带来最大的净收益。
三类异质性来源
| 异质性来源 |
数学表现 |
含义 |
| 基线异质性 |
f0(x) 不同 |
不同人原本的位置不同 |
| 斜率异质性 |
∂μ(t,x)/∂t 不同 |
不同人对处理强度的局部反应不同 |
| 曲率异质性 |
∂2μ(t,x)/∂t2 不同 |
不同人的边际效应递增或递减速度不同 |
二元处理通常只强调“斜率异质性”或“处理效应异质性”。但在连续处理中,基线、斜率和曲率都会影响最终决策。
交互性与异质性
在之前的线性模型中,我们习惯通过交互项判断异质性。例如:
Y=α+βT+γX+δTX+ε
这里如果 δ=0,就说明 X 改变了处理效应。
但其实这个判断只在线性结果尺度上比较可靠。
如果真实模型是:
Y=g(α+βT+γX)
但我们即使没有 TX 交互项,处理的边际效应是:
∂T∂E[Y∣T,X]=g′(α+βT+γX)β
只要 g′ 不是常数,X 也会改变处理的边际效应。
因此,在非线性模型中:
没有显式交互项,不代表没有处理效应异质性。
反过来也要小心:
有交互项,也不代表这个变量一定是最好的个性化变量。
因为另一个变量虽然不改变潜在尺度上的处理斜率,但可能强烈改变个体在非线性曲线上的位置,从而对最终决策更重要。