https://zhuanlan.zhihu.com/p/362788755
文章目录
概述
有多种方法可以评估ACE(平均因果效应)或ITE(个体因果效应),这里我们关注的是ITE估计,即利用Uplift Modeling的方法,为每个样本(如用户)分别估计干预/不干预时的结果,得到treatment(干预)想退control(不干预)的uplift(增量)值。增量建模有多种分类方法,既可以按照对增量的直接建模和间接建模分,也可以依据实现方式分为Meta-Learning和Tree-Based等。
参考各个文献,为了便于理解,本文将要整理的方法分为4种来介绍:The Class Transformation Method、Meta-Learning Method、Tree-Based Method、NN-Based Method。
The Class Transformation Method
参考[1],该方法应该归于Meta-Learning Method,这里为了不混淆单列出来。该方法适用于Treatment和Outcome都是二类分类的情况,通过将预测目标做单类的转换,从而实现单模型预测。
首先,考虑随机试验的情况,定义新的目标变量
Z
i
=
Y
i
o
b
s
W
i
+
(
1
−
Y
i
o
b
s
)
(
1
−
W
i
)
Z_{i}=Y_{i}^{o b s} W_{i}+\left(1-Y_{i}^{o b s}\right)\left(1-W_{i}\right)
Zi=YiobsWi+(1−Yiobs)(1−Wi)
此时,当Y=1,W=1或Y=0,W=0时,Z=1。那么,对uplift有
τ
(
X
i
)
=
2
P
(
Z
i
=
1
∣
X
i
)
−
1
\tau\left(X_{i}\right)=2 P\left(Z_{i}=1 \mid X_{i}\right)-1
τ(Xi)=2P(Zi=1∣Xi)−1
注:推导过程理解
P ( Z i = 1 ∣ X i ) = P ( Y i = 1 , W i = 1 ∣ X i ) + P ( Y i = 0 , W i = 0 ∣ X i ) P(Z_i=1|X_i)=P(Y_i=1,W_i=1|X_i)+P(Y_i=0,W_i=0|X_i) P(Zi=1∣Xi)=P(Yi=1,Wi=1∣Xi)+P(Yi=0,Wi=0∣Xi)
P ( W i = 1 ∣ X i ) = P ( W i = 0 ∣ X i ) = 1 2 P(W_i=1|X_i)=P(W_i=0|X_i)=\frac{1}{2} P(Wi=1∣Xi)=P(Wi=0∣Xi)=21τ ( X i ) = P ( Y i = 1 ∣ X i , W i = 1 ) − P ( Y i = 1 ∣ X i , W i = 0 ) = P ( Y i = 1 , W i = 1 ∣ X i ) P ( W i = 1 ∣ X i ) − P ( Y i = 1 , W i = 0 ∣ X i ) P ( W i = 0 ∣ X i ) = 2 [ P ( Y i = 1 , W i = 1 ∣ X i ) − P ( Y i = 1 , W i = 0 ∣ X i ) ] = [ P ( Y i = 1 , W i = 1 ∣ X i ) − P ( Y i = 1 , W i = 0 ∣ X i ) ] + [ 1 2 − P ( Y i = 0 , W i = 1 ∣ X i ) − 1 2 + P ( Y i = 0 , W i = 0 ∣ X i ) ] = P ( Z i = 1 ∣ X i ) − P ( Z i = 0 ∣ X i ) = 2 P ( Z i = 1 ∣ X i ) − 1 \tau(X_i)=P(Y_i=1|X_i,W_i=1)-P(Y_i=1|X_i,W_i=0) \\ =\frac{P(Y_i=1,W_i=1|X_i)}{P(W_i=1|X_i)}-\frac{P(Y_i=1,W_i=0|X_i)}{P(W_i=0|X_i)} \\ =2[P(Y_i=1,W_i=1|X_i)-P(Y_i=1,W_i=0|X_i)]\\ =[P(Y_i=1,W_i=1|X_i)-P(Y_i=1,W_i=0|X_i)]\\+[\frac{1}{2}-P(Y_i=0,W_i=1|X_i)-\frac{1}{2}+P(Y_i=0,W_i=0|X_i)]\\ =P(Z_i=1|X_i)-P(Z_i=0|X_i)\\ =2P(Z_i=1|X_i)-1 τ(Xi)=P(Yi=1∣Xi,Wi=1)−P(Yi=1∣Xi,Wi=0)=P(Wi=1∣Xi)P(Yi=1,Wi=1∣Xi)−P(Wi=0∣Xi)P(Yi=1,Wi=0∣Xi)=2[P(Yi=1,Wi=1∣Xi)−P(Yi=1,Wi=0∣Xi)]=[P(Yi=1,Wi=1∣Xi)−P(Yi=1,Wi=0∣Xi)]+[21−P(Yi=0,Wi=1∣Xi)−21+P(Yi=0,Wi=0∣Xi)]=P(Zi=1∣Xi)−P(Zi=0∣Xi)=2P(Zi=1∣Xi)−1
最后,我们考虑一般情况,适用于非平衡非随机试验的数据,可用任意机器学习算法估计(同CATE):
Y
i
∗
=
Y
i
(
1
)
W
i
p
^
(
X
i
)
−
Y
i
(
0
)
(
1
−
W
i
)
(
1
−
p
^
(
X
i
)
)
Y_{i}^{*}=Y_{i}(1) \frac{W_{i}}{\hat{p}\left(X_{i}\right)}-Y_{i}(0) \frac{\left(1-W_{i}\right)}{\left(1-\hat{p}\left(X_{i}\right)\right)}
Yi∗=Yi(1)p^(Xi)Wi−Yi(0)(1−p^(Xi))(1−Wi)
这里p为倾向性得分,则
E
[
Y
i
∗
∣
X
i
]
=
τ
(
X
i
)
E[Y_i^*|X_i]=\tau(X_i)
E[Yi∗∣Xi]=τ(Xi),直接对
Y
i
∗
Y_i^*
Yi∗建模即可。
注:推导过程理解,考虑随机试验的特殊情况,则与上述随机试验的公式一致
Z i = 1 2 Y i ∗ + ( 1 − W i ) Z_i=\frac{1}{2}Y_i^*+(1-W_i) Zi=21Yi∗+(1−Wi)
2 E [ Z i ∣ X i ] = E [ Y i ∗ ∣ X i ] + 1 2E[Z_i|X_i]=E[Y_i^*|X_i]+1 2E[Zi∣Xi]=E[Yi∗∣Xi]+1
Meta-Learning Method
Meta-Learning方法是指基于Meta-Learner进行Uplift预估,其中Meta-Learner可以是任意的既有预测算法,如LR、SVM、RF、GBDT等。根据Meta-Learner的组合不同,通常分为:S-Learner、T-Learner、X-Learner、R-Learner。
【优点】:利用了既有预测算法的预测能力,方便易实现。
【缺点】:不直接建模uplift,效果打折扣。
S-Learner
“S-”是single的意思,是指使用一个预测模型完成uplift估计。具体步骤包括
- Step1:基于变量X和干预W训练预测模型
μ ( x , w ) : = E [ Y o b s ∣ X = x , W = w ] \mu(x,w):=\mathbb{E}[Y^{obs}|X=x,W=w] μ(x,w):=E[Yobs∣X=x,W=w]
- Step2:分别估计干预和不干预时的得分,差值即为增量
τ ^ S ( x ) = μ ^ ( x , 1 ) − μ ^ ( x , 0 ) \hat{\tau}_{S}(x)=\hat{\mu}(x, 1)-\hat{\mu}(x, 0) τ^S(x)=μ^(x,1)−μ^(x,0)
- 评述:
【优点】S-Learner简单直观、直接使用既有预测算法;预测仅依赖一个模型,避免了多模型的误差累积;更多的数据和特征工程对预测准确率有利。
【缺点】但是该方法不直接建模uplift;且需要额外进行特征工程工作(由于模型拟合的是Y,所以若W直接作为一个特征放进去,可能由于对Y的预测能力不足而未充分利用)。
【应用】在因果推断未受关注之前,诸如”优惠券“发放的问题常用该方法,直接建模”对什么人,发放什么面额券,是否会下单“,预测阶段则对User和Coupon交叉组合后进行预测,得到(User,Coupon)组合的下单率,然后再依据预算、ROI或其他约束进行MCKP求解。
T-Learner
”T-“是Two的意思,是指用两个模型分别建模干预、不干预的情况,取差值作为uplift。具体步骤:
- Step1:对treatment组数据和control组数据分别训练预测模型
μ 0 ( x ) = E [ Y ( 0 ) ∣ X = x ] μ 1 ( x ) = E [ Y ( 1 ) ∣ X = x ] \mu_{0}(x)=\mathbb{E}[Y(0) \mid X=x]\\ \mu_{1}(x)=\mathbb{E}[Y(1) \mid X=x] μ0(x)=E[Y(0)∣X=x]μ1(x)=E[Y(1)∣X=x]
- Step2:两个模型分别打分
τ ^ T ( x ) = μ ^ 1 ( x ) − μ ^ 0 ( x ) \hat{\tau}_{T}(x)=\hat{\mu}_{1}(x)-\hat{\mu}_{0}(x) τ^T(x)=μ^1(x)−μ^0(x)
- 评述:
【优点】T-Learner一样简单直观、直接使用既有预测算法;将不同的数据集中的增量效果转换为模型间的差异,不需要太多的特征工程工作;当有随机试验的数据时该方法作为baseline很方便。
【缺点】该方法存在双模型误差累积问题;同时当数据差异过大时(如数据量、采样偏差等),对准确率影响较大。
X-Learner
”X-“表示交叉的意思,该方法主要解决T-Learner对不同Treatment组合Control组间数据量差异过大情况表现不佳的问题。具体步骤:
- Step1:对treatment组数据和control组数据分别训练预测模型
μ 0 ( x ) = E [ Y ( 0 ) ∣ X = x ] μ 1 ( x ) = E [ Y ( 1 ) ∣ X = x ] \mu_{0}(x) =\mathbb{E}[Y(0) \mid X=x] \\ \mu_{1}(x) =\mathbb{E}[Y(1) \mid X=x] μ0(x)=E[Y(0)∣X=x]μ1(x)=E[Y(1)∣X=x]
- Step2:计算一组uplift的近似表示的数据集,用treatment组模型预测control组数据,control组模型预测treatment组数据,分别做与Y的差值得到增量的近似
D ~ i 1 : = Y i 1 − μ ^ 0 ( X i 1 ) D ~ i 0 : = μ ^ 1 ( X i 0 ) − Y i 0 \tilde{D}_{i}^{1}:=Y_{i}^{1}-\hat{\mu}_{0}\left(X_{i}^{1}\right) \\ \tilde{D}_{i}^{0}:=\hat{\mu}_{1}\left(X_{i}^{0}\right)-Y_{i}^{0} D~i1:=Yi1−μ^0(Xi1)D~i0:=μ^1(Xi0)−Yi0
然后,以此为目标再训练两个预测模型,拟合uplift:
τ
1
(
x
)
=
E
[
D
1
∣
X
=
x
]
τ
0
(
x
)
=
E
[
D
0
∣
X
=
x
]
\tau_1(x)=E[D^1|X=x]\\ \tau_0(x)=E[D^0|X=x]
τ1(x)=E[D1∣X=x]τ0(x)=E[D0∣X=x]
- Step3:预测得到两个近似增量,做加权得到uplift结果,加权函数可用倾向性得分
τ ^ ( x ) = g ( x ) τ ^ 0 ( x ) + ( 1 − g ( x ) ) τ ^ 1 ( x ) \hat{\tau}(x)=g(x) \hat{\tau}_{0}(x)+(1-g(x)) \hat{\tau}_{1}(x) τ^(x)=g(x)τ^0(x)+(1−g(x))τ^1(x)
- 评述:
X-Learner在T-Learner基础上,利用了全量的数据进行预测,主要解决Treatment组间数据量差异较大的情况。但流程相对复杂、计算成本较高,有时还会由于多模型误差累积等问题效果不佳。
另外,不论是分类问题还是回归问题,在 τ ( x ) \tau(x) τ(x)步骤时,都需要使用回归模型来拟合。
- 理解:对Step3中,若W=1的比例极小,则 g ( x ) g(x) g(x)极小,则 τ ^ 1 \hat{\tau}_1 τ^1的权重更大,即更倾向于使用 D ~ 1 \tilde{D}^1 D~1的结果,也即倾向于control组数据训练的模型。如论文中的示例,示意图如下
R-Learner
R-Learner的思路是通过将问题转化为定义损失函数(R-loss)的形式进行学习训练,更关注”残差“。该方法原文比较难啃,这里直接列出实现步骤:
- Step1:通过交叉验证的方式,每次预测一组,得到整个数据集的预测结果 m ^ \hat{m} m^和倾向得分 e ^ \hat{e} e^。
e ( x ) = E [ W = 1 ∣ X = x ] m ( x ) = E [ Y = 1 ∣ X = x ] e(x)=E[W=1|X=x]\\ m(x)=E[Y=1|X=x] e(x)=E[W=1∣X=x]m(x)=E[Y=1∣X=x]
- Step2:最小化损失函数,估计增量,其中 q ( i ) q(i) q(i)表示样本i在CV的第几组
L ^ n { τ ( ⋅ ) } = 1 n ∑ i = 1 n [ { Y i − m ^ ( − q ( i ) ) ( X i ) } − { W i − e ^ ( − q ( i ) ) ( X i ) } τ ( X i ) ] 2 \widehat{L}_{n}\{\tau(\cdot)\}=\frac{1}{n} \sum_{i=1}^{n}[\{Y_{i}-\hat{m}^{(-q(i))}(X_{i})\}-\{W_{i}-\hat{e}^{(-q(i))}(X_{i})\} \tau(X_{i})]^{2} L n{τ(⋅)}=n1i=1∑n[{Yi−m^(−q(i))(Xi)}−{Wi−e^(−q(i))(Xi)}τ(Xi)]2
- 注:具体实现时,参考CausalML的实现方式,将损失函数改为
L ^ n { τ ( ⋅ ) } = { W i − e ^ ( − q ( i ) ) ( X i ) } 2 ⋅ 1 n ∑ i = 1 n [ { Y i − m ^ ( − q ( i ) ) ( X i ) } { W i − e ^ ( − q ( i ) ) ( X i ) } − τ ( X i ) ] 2 \widehat{L}_{n}\{\tau(\cdot)\}=\{W_{i}-\hat{e}^{(-q(i))}(X_{i})\}^2 \cdot \frac{1}{n} \sum_{i=1}^{n}[\frac{\{Y_{i}-\hat{m}^{(-q(i))}(X_{i})\}}{\{W_{i}-\hat{e}^{(-q(i))}(X_{i})\}}- \tau(X_{i})]^{2} L n{τ(⋅)}={Wi−e^(−q(i))(Xi)}2⋅n1i=1∑n[{Wi−e^(−q(i))(Xi)}{Yi−m^(−q(i))(Xi)}−τ(Xi)]2
即为一个MSE损失的预测任务,注意除了预测目标变换之外,对每个样本要施加相应的权重。
- 评述:R-Learner相对灵活,但模型效果依赖于 m ^ \hat{m} m^和 e ^ \hat{e} e^的估计精度,
Tree-Based Method
基于树的方法,仿照标准CART树依据对信息增益的大小不断选择最优的分裂特征和分裂点,从而实现精确分层的过程。其核心思想是通过设计分裂规则,使得分裂后对uplift的预测更准确。下面介绍三个Tree-Based算法,Uplift-Tree,CausalForest,CTS。
Uplift-Tree
分布散度可以度量两个概率分布之间的差异,因此我们可以将treatment组和control组理解为两个(关于Y的)概率分布,以此为分裂依据,若分裂后差异变大,则说明这个分裂有区分能力且有益于描述Treatment对Outcome的影响。
分裂步骤
- 首先,计算分布散度 D ( P T ( Y ) : P C ( Y ) ) D(P^{T}(Y): P^{C}(Y)) D(PT(Y):PC(Y)),有下面3种方式,其中 p p p表示treatment组, q q q表示control组, i i i表示取值,如是二分类问题,则 i ∈ { 0 , 1 } i\in\{0,1\} i∈{0,1}:
K L ( P : Q ) = ∑ i p i log p i q i E ( P : Q ) = ∑ i ( p i − q i ) 2 χ 2 ( P : Q ) = ∑ i ( p i − q i ) 2 q i \begin{aligned} K L(P: Q) &=\sum_{i} p_{i} \log \frac{p_{i}}{q_{i}} \\ E(P: Q) &=\sum_{i}\left(p_{i}-q_{i}\right)^{2} \\ \chi^{2}(P: Q) &=\sum_{i} \frac{\left(p_{i}-q_{i}\right)^{2}}{q_{i}} \end{aligned} KL(P:Q)E(P:Q)χ2(P:Q)=i∑pilogqipi=i∑(pi−qi)2=i∑qi(pi−qi)2
- 然后,进行分裂点的增益计算:
D g a i n ( A ) = D ( P T ( Y ) : P C ( Y ) ∣ A ) − D ( P T ( Y ) : P C ( Y ) ) D_{g a i n}(A)=D\left(P^{T}(Y): P^{C}(Y) \mid A\right)-D\left(P^{T}(Y): P^{C}(Y)\right) Dgain(A)=D(PT(Y):PC(Y)∣A)−D(PT(Y):PC(Y))
其中,
P
T
,
P
C
P^T,P^C
PT,PC分别表示treatment组和control组的概率分布,
D
(
⋅
)
D(\cdot)
D(⋅)表示对分布散度的度量,
D
(
⋅
∣
A
)
D(\cdot|A)
D(⋅∣A)表示按照A进行分裂后的度量,有
D
(
P
T
(
Y
)
:
P
C
(
Y
)
∣
A
)
=
∑
a
N
(
a
)
N
D
(
P
T
(
Y
∣
a
)
:
P
C
(
Y
∣
a
)
)
D\left(P^{T}(Y): P^{C}(Y) \mid A\right)=\sum_{a} \frac{N(a)}{N} D\left(P^{T}(Y \mid a): P^{C}(Y \mid a)\right)
D(PT(Y):PC(Y)∣A)=a∑NN(a)D(PT(Y∣a):PC(Y∣a))
-
最后,循环进行上述分裂,直到无增量分裂点,或达到样本量、树深度等限制为止。
-
扩展,引述DiDi的博文中的例子,方便理解树分裂中增益的计算过程
Normalization
在实际应用中,存在模型偏向于高比例类别的问题(参照标准CART);同时要惩罚分裂后control和treatment比例差异大的问题(这可能代表样本与W分配不独立,除了破坏了随机试验的假设,概率计算也会有问题,如极端情况下一个组内全部是control或treatment组数据)。
因此对散度分布计算加上标准化操作,具体地,计算
I
(
A
)
=
H
(
N
T
N
,
N
C
N
)
K
L
(
P
T
(
A
)
:
P
C
(
A
)
)
+
N
T
N
H
(
P
T
(
A
)
)
+
N
C
N
H
(
P
C
(
A
)
)
+
1
2
\begin{aligned} I(A)=& H\left(\frac{N^{T}}{N}, \frac{N^{C}}{N}\right) K L\left(P^{T}(A): P^{C}(A)\right) \\ &+\frac{N^{T}}{N} H\left(P^{T}(A)\right)+\frac{N^{C}}{N} H\left(P^{C}(A)\right)+\frac{1}{2} \end{aligned}
I(A)=H(NNT,NNC)KL(PT(A):PC(A))+NNTH(PT(A))+NNCH(PC(A))+21
J
(
A
)
=
Gini
(
N
T
N
,
N
C
N
)
D
(
P
T
(
A
)
:
P
C
(
A
)
)
+
N
T
N
Gini
(
P
T
(
A
)
)
+
N
C
N
Gini
(
P
C
(
A
)
)
+
1
2
\begin{aligned} J(A)=& \operatorname{Gini}\left(\frac{N^{T}}{N}, \frac{N^{C}}{N}\right) D\left(P^{T}(A): P^{C}(A)\right) \\ &+\frac{N^{T}}{N} \operatorname{Gini}\left(P^{T}(A)\right)+\frac{N^{C}}{N} \operatorname{Gini}\left(P^{C}(A)\right)+\frac{1}{2} \end{aligned}
J(A)=Gini(NNT,NNC)D(PT(A):PC(A))+NNTGini(PT(A))+NNCGini(PC(A))+21
其中,第一部分惩罚分组不平衡问题;第二部分惩罚类别比例过大问题;最后为了避免数值过小导致数值剧烈波动,加个0.5。
最后,标准化后的得分为
K
L
g
a
i
n
(
A
)
I
(
A
)
,
E
g
a
i
n
(
A
)
J
(
A
)
and
χ
g
a
i
n
2
(
A
)
J
(
A
)
\frac{K L_{g a i n}(A)}{I(A)}, \quad \frac{E_{g a i n}(A)}{J(A)} \quad \text { and } \quad \frac{\chi_{g a i n}^{2}(A)}{J(A)}
I(A)KLgain(A),J(A)Egain(A) and J(A)χgain2(A)
Application
论文中提到一个应用场景,当我们的Outcome有收益
v
y
v_y
vy,我们的Treatment有成本
c
c
c时,计算一个落到某叶子节点上的样本,执行treatment时的收益为:
−
c
+
∑
y
v
y
(
P
T
(
y
∣
l
)
−
P
C
(
y
∣
l
)
)
-c+\sum_{y} v_{y}\left(P^{T}(y \mid l)-P^{C}(y \mid l)\right)
−c+y∑vy(PT(y∣l)−PC(y∣l))
Pruning
剪枝是为了使模型具有更好的泛化能力。标准决策树的剪枝有多种方法,最简单的则是看剪枝前后对验证集准确率是否有帮助,但在增量建模中该方法不太好实现。
论文中提出了一个度量方法——maximum class probability difference,核心思想是看结点中Treatment组和Control组的差异,如果单独的根节点更大则剪枝。具体步骤如下:
- Step1:在训练阶段,对每个结点,记录其差异(绝对值)最大的类,以及正负号
y ∗ ( t ) = argmax y ∗ ∣ P T ( y ∗ ∣ t ) − P C ( y ∗ ∣ t ) ∣ y^*(t)=\text{argmax}_{y^*} \left|P^{T}\left(y^{*} \mid t\right)-P^{C}\left(y^{*} \mid t\right)\right| y∗(t)=argmaxy∗∣∣PT(y∗∣t)−PC(y∗∣t)∣∣
s ∗ ( t ) = sgn ( P T ( y ∗ ∣ t ) − P C ( y ∗ ∣ t ) ) s^{*}(t)=\operatorname{sgn}\left(P^{T}\left(y^{*} \mid t\right)-P^{C}\left(y^{*} \mid t\right)\right) s∗(t)=sgn(PT(y∗∣t)−PC(y∗∣t))
- Step2:在验证阶段,利用Step1计算好的 y ∗ , s ∗ y^*,s^* y∗,s∗,以及验证数据计算的概率值,计算叶结点和根节点的得分
d 1 ( r ) = ∑ i = 1 k N ( l i ) N ( r ) s ∗ ( l i ) ( P T ( y ∗ ( l i ) ∣ l i ) − P C ( y ∗ ( l i ) ∣ l i ) ) d 2 ( r ) = s ∗ ( r ) ( P T ( y ∗ ( r ) ∣ r ) − P C ( y ∗ ( r ) ∣ r ) ) \begin{array}{l} d_{1}(r)=\sum_{i=1}^{k} \frac{N\left(l_{i}\right)}{N(r)} s^{*}\left(l_{i}\right)\left(P^{T}\left(y^{*}\left(l_{i}\right) \mid l_{i}\right)-P^{C}\left(y^{*}\left(l_{i}\right) \mid l_{i}\right)\right) \\ d_{2}(r)=s^{*}(r)\left(P^{T}\left(y^{*}(r) \mid r\right)-P^{C}\left(y^{*}(r) \mid r\right)\right) \end{array} d1(r)=∑i=1kN(r)N(li)s∗(li)(PT(y∗(li)∣li)−PC(y∗(li)∣li))d2(r)=s∗(r)(PT(y∗(r)∣r)−PC(y∗(r)∣r))
- Step3:最后,若 d 1 ( r ) ≤ d 2 ( r ) d_1(r)\le d_2(r) d1(r)≤d2(r),(或d1-d2<θ),则剪枝
补充:CausalML中可视化图的解释
1. feature_xx >= xxxx:分裂特征和点位
2. impurity:分布散度
3. total_sample:结点中样本量
4. group_sample:结点中分组样本量
5. uplift_score:T和C组内avg(y)的差,注意有经过n_reg参数处理,详情参考CTS论文
6. uplift p_value:假设检验相关,越小越好
7. validation uplift score:从验证集计算出的uplift_score,没有验证集时与5相等
8. mean treatment,control:叶子节点中(纯粹的)组内y值平均
CausalForest
顾名思义,类比RandomForest,CausalForest是指由多个CausalTree模型融合得到的Forest模型,而对于CausalForest,这里可以是任意单Tree-Based方法。
对于标准的CART树,用叶子节点的Y的均值表示其中样本的结果,这个策略的依据是认为叶子节点
L
(
x
)
L(x)
L(x)足够小,使得结果其中
Y
i
Y_i
Yi近似同分布的。对于CausalTree,我们类比认为叶子节点足够小,使得叶子节点
L
(
x
)
L(x)
L(x)内的
(
Y
i
,
W
i
)
(Y_i,W_i)
(Yi,Wi)对近似取自随机试验。【个人理解:分层分到足够细,近似认为消除了Confounder】,则指定叶子节点的uplift为
τ
^
(
x
)
=
1
∣
{
i
:
W
i
=
1
,
X
i
∈
L
}
∣
∑
{
i
:
W
i
=
1
,
X
i
∈
L
}
Y
i
−
1
∣
{
i
:
W
i
=
0
,
X
i
∈
L
}
∣
∑
{
i
:
W
i
=
0
,
X
i
∈
L
}
Y
i
\begin{aligned} \hat{\tau}(x)=& \frac{1}{\left|\left\{i: W_{i}=1, X_{i} \in L\right\}\right|} \sum_{\left\{i: W_{i}=1, X_{i} \in L\right\}}^{Y_{i}} \\ &-\frac{1}{\left|\left\{i: W_{i}=0, X_{i} \in L\right\}\right|} \sum_{\left\{i: W_{i}=0, X_{i} \in L\right\}}^{Y_{i}} \end{aligned}
τ^(x)=∣{i:Wi=1,Xi∈L}∣1{i:Wi=1,Xi∈L}∑Yi−∣{i:Wi=0,Xi∈L}∣1{i:Wi=0,Xi∈L}∑Yi
基于不同的样本子集训练多个CausalTree,用均值作为最终的结果
τ
^
(
x
)
=
B
−
1
∑
b
=
1
B
τ
^
b
(
x
)
\hat{\tau}(x)=B^{-1} \sum_{b=1}^{B} \hat{\tau}_{b}(x)
τ^(x)=B−1b=1∑Bτ^b(x)
CTS
CTS(Contextual Treatment Selection),是一种Tree-Based的uplift modeling方法,可用于MultiTreatment和General Response Type(分类或回归)的问题。
这里重点介绍其与上述Uplift Tree的区别:
分裂准则:仍是分裂后与分裂前得分之差,区别在于Uplift Tree的得分用的是分布散度,而这里的目标是分裂能够最大化结点内各个Treatment中最大的Y值期望。【个人理解:任务目标是选择何种treatment(包括control组)能带来最大收益,因此分裂出期望最大即可】
这里
Δ
μ
(
s
)
\Delta \mu(s)
Δμ(s)表示分裂点
s
s
s带来的增益;
ϕ
\phi
ϕ表示树结点;
t
t
t表示Treatment编号,共
K
K
K种;
Δ
μ
(
s
)
=
P
{
X
∈
ϕ
l
∣
X
∈
ϕ
}
max
t
l
=
0
,
…
,
K
E
[
Y
∣
X
∈
ϕ
l
,
T
=
t
l
]
+
P
{
X
∈
ϕ
r
∣
X
∈
ϕ
}
max
t
r
=
0
,
…
,
K
E
[
Y
∣
X
∈
ϕ
r
,
T
=
t
r
]
−
max
t
=
0
,
…
,
K
E
[
Y
∣
X
∈
ϕ
,
T
=
t
]
\begin{array}{l} \Delta \mu(s) \\ =P\left\{\mathbf{X} \in \phi_{l} \mid \mathbf{X} \in \phi\right\} \max _{t_{l}=0, \ldots, K} \mathrm{E}\left[Y \mid \mathbf{X} \in \phi_{l}, T=t_{l}\right] \\ +P\left\{\mathbf{X} \in \phi_{r} \mid \mathbf{X} \in \phi\right\} \max _{t_{r}=0, \ldots, K} \mathrm{E}\left[Y \mid \mathbf{X} \in \phi_{r}, T=t_{r}\right] \\ -\max _{t=0, \ldots, K} \mathrm{E}[Y \mid \mathbf{X} \in \phi, T=t] \end{array}
Δμ(s)=P{X∈ϕl∣X∈ϕ}maxtl=0,…,KE[Y∣X∈ϕl,T=tl]+P{X∈ϕr∣X∈ϕ}maxtr=0,…,KE[Y∣X∈ϕr,T=tr]−maxt=0,…,KE[Y∣X∈ϕ,T=t]
uplift score计算:
- 首先,有每个结点的占父节点的比例
p ^ ( ϕ ′ ∣ ϕ ) = ∑ i = 1 N I { x ( i ) ∈ ϕ ′ } ∑ i = 1 N I { x ( i ) ∈ ϕ } \hat{p}\left(\phi^{\prime} \mid \phi\right)=\frac{\sum_{i=1}^{N} \mathbb{I}\left\{\mathbf{x}^{(i)} \in \phi^{\prime}\right\}}{\sum_{i=1}^{N} \mathbb{I}\left\{\mathbf{x}^{(i)} \in \phi\right\}} p^(ϕ′∣ϕ)=∑i=1NI{x(i)∈ϕ}∑i=1NI{x(i)∈ϕ′}
-
然后,为了解决单个节点中Treatment比例过少导致条件期望难以估计的问题,这里用父节点加了个正则。
定义 n t ( ϕ ′ ) n_t(\phi') nt(ϕ′)为结点 ϕ ′ \phi' ϕ′中第 t t t个treatment的样本量,自定义参数 m i n _ s p l i t min\_split min_split表示结点最小样本数, n _ r e g n\_reg n_reg表示正则强度(一个小正整数), y ^ t ( ϕ ′ ) \hat{y}_t(\phi') y^t(ϕ′)表示子结点估计的uplift得分, y ^ t ( ϕ ) \hat{y}_t(\phi) y^t(ϕ)表示父节点估计得分。
If n t ( ϕ ′ ) < m i n _ s p l i t , y ^ t ( ϕ ′ ) = y ^ t ( ϕ ) otherwise, y ^ t ( ϕ ′ ) = ∑ i = 1 N y ( i ) I { x ( i ) ∈ ϕ ′ } I { t ( i ) = t } + y ^ t ( ϕ ) ⋅ n _ r e g ∑ i = 1 N I { x ( i ) ∈ ϕ ′ } I { t ( i ) = t } + n _ r e g \begin{aligned} &\text { If } n_{t}\left(\phi^{\prime}\right)<min\_split ,\hat{y}_{t}\left(\phi^{\prime}\right)=\hat{y}_{t}(\phi)\\ &\text { otherwise, }\\ &\hat{y}_{t}\left(\phi^{\prime}\right)=\frac{\sum_{i=1}^{N} y^{(i)} \mathbb{I}\left\{\mathbf{x}^{(i)} \in \phi^{\prime}\right\} \mathbb{I}\left\{t^{(i)}=t\right\}+\hat{y}_{t}(\phi) \cdot \mathrm{n\_reg}}{\sum_{i=1}^{N} \mathbb{I}\left\{\mathbf{x}^{(i)} \in \phi^{\prime}\right\} \mathbb{I}\left\{t^{(i)}=t\right\}+\mathrm{n\_reg}} \end{aligned} If nt(ϕ′)<min_split,y^t(ϕ′)=y^t(ϕ) otherwise, y^t(ϕ′)=∑i=1NI{x(i)∈ϕ′}I{t(i)=t}+n_reg∑i=1Ny(i)I{x(i)∈ϕ′}I{t(i)=t}+y^t(ϕ)⋅n_reg
- 最后,分裂点 s s s的增量估计如下(对应上述分裂准则),并在每一步取增量最大的分裂点分裂
Δ μ ^ ( s ) = p ^ ( ϕ l ∣ ϕ ) × max t = 0 , … , K y ^ t ( ϕ l ) + p ^ ( ϕ r ∣ ϕ ) × max t = 0 , … , K y ^ t ( ϕ r ) − max t = 0 , … , K y ^ t ( ϕ ) \begin{aligned} \hat{\Delta \mu}(s)=& \hat{p}\left(\phi_{l} \mid \phi\right) \times \max _{t=0, \ldots, K} \hat{y}_{t}\left(\phi_{l}\right) \\ &+\hat{p}\left(\phi_{r} \mid \phi\right) \times \max _{t=0, \ldots, K} \hat{y}_{t}\left(\phi_{r}\right)-\max _{t=0, \ldots, K} \hat{y}_{t}(\phi) \end{aligned} Δμ^(s)=p^(ϕl∣ϕ)×t=0,…,Kmaxy^t(ϕl)+p^(ϕr∣ϕ)×t=0,…,Kmaxy^t(ϕr)−t=0,…,Kmaxy^t(ϕ)
终止条件:
- 结点内每个treatment的样本量都少于 m i n _ s p l i t min\_split min_split时终止
- 不存在能带来非负增益的分裂点时终止
- 所有样本Y值相同时终止
Forest化:与Random Forest类似,CTS会构建多棵树取均值作为最终的模型,对于每棵树会采用特征子集来训练。
算法伪代码:
NN-Based,DragonNet
基于神经网络的方法比较新,这里简单举一个例子——DragonNet。该方法主要工作是将propensity score估计和uplift score估计合并到一个网络实现。
首先,引述了可用倾向性得分代替X做ATE估计
ψ
=
E
[
E
[
Y
∣
g
(
X
)
,
T
=
1
]
−
E
[
Y
∣
g
(
X
)
,
T
=
0
]
]
\psi=\mathbb{E}[\mathbb{E}[Y \mid g(X), T=1]-\mathbb{E}[Y \mid g(X), T=0]]
ψ=E[E[Y∣g(X),T=1]−E[Y∣g(X),T=0]]
然后,为了准确预测ATE而非关注到Y预测上,我们应尽可能使用
X
X
X中与
T
T
T相关的部分特征。
其中一种方法就是首先训练一个网络用X预测T,然后移除最后一层并接上Y的预测,则可以实现将X中与T相关的部分提取出来(即倾向性得分 g ^ \hat{g} g^相关),并用于Y的预测。
显然上述方法过程繁琐,本文将这个过程合并到了一起。网络结构如图,中间分支用于提取T相关的特征;两侧分支用于做Y的预测,以用于增量估计。损失函数为:
θ
^
=
argmin
θ
R
^
(
θ
;
X
)
,
where
R
^
(
θ
;
X
)
=
1
n
∑
i
[
(
Q
n
n
(
t
i
,
x
i
;
θ
)
−
y
i
)
2
+
α
CrossEntropy
(
g
n
n
(
x
i
;
θ
)
,
t
i
)
]
\begin{aligned} \hat{\theta} &=\underset{\theta}{\operatorname{argmin}} \hat{R}(\theta ; \boldsymbol{X}), \quad \text { where } \\ \hat{R}(\theta ; \boldsymbol{X}) &=\frac{1}{n} \sum_{i}\left[\left(Q^{\mathrm{nn}}\left(t_{i}, x_{i} ; \theta\right)-y_{i}\right)^{2}+\alpha \text { CrossEntropy }\left(g^{\mathrm{nn}}\left(x_{i} ; \theta\right), t_{i}\right)\right] \end{aligned}
θ^R^(θ;X)=θargminR^(θ;X), where =n1i∑[(Qnn(ti,xi;θ)−yi)2+α CrossEntropy (gnn(xi;θ),ti)]
最后,本文还提出Targeted Regularization等优化方法,这里就略过了,感兴趣可以看下原文。
参考文献
[1]Causal Inference and Uplift Modeling A review of the literature
[2]Metalearners for estimating heterogeneous treatment effects using machine learning
[3]Quasi-Oracle Estimation of Heterogeneous Treatment Effects
[4]Adapting Neural Networks for the Estimation of Treatment Effects
[5]Decision trees for uplift modeling with single and multiple treatments
[6]Estimation and Inference of Heterogeneous Treatment Effects using Random Forests
[7]Uplift Modeling with Multiple Treatments and General Response Types
[8]Causal ML
[9]其他参考资料:https://zhuanlan.zhihu.com/p/358582762