以下内容梳理了潜在结果框架的常用算法和原理,并依据相关论文推理,结合案例做了代码实现:
潜在结果框架:因果推断世界里的平行时空
Uplift Model:S-Learner类增益模型实战
Uplift Model:T-Learner类增益模型实战
Class Transformation Model增益模型
Uplift Tree Model:增益树模型原理
Uplift模型评估指标AUUC
增益树及分裂准则
相比T-Learner/S-Learner这种间接建模增益的元学习类模型,可以利用决策树直接预估单干预下的增益。本文基于Piotr Rzepakowski和Szymon Jaroszewicz的论文《Decision trees for uplift modeling with single and multiple treatments》介绍增益树模型,即Uplift Tree Model。
公众号原文:Uplift Tree Model:增益树模型原理
通过决策树建模干预增益,最关心的问题是“树的分裂规则”。传统的决策树分类模型,训练时的分裂标准是信息增益或信息增益比。对于二分类问题,训练过程树分裂标准是节点分裂后,子节点的纯度变得尽可能高,即区分出各类样本。而Uplift Tree Model训练时的分裂标准是分裂前后干预组与控制组的响应标签分布差异的变化,即通过“分裂” 最大化干预组与控制组的响应标签分布差异。树每一次分裂力求使干预组和控制组的分布最大化不一样,从而区分高增益用户和低增益用户。度量分布差异时,可以使用KL divergence、chi-squared divergence或欧式距离等指标。
注意,这里需要干预组和控制组的分布最大化不一样,关键点在于分裂后左子节点(右子节点)的干预组正负样本占比Tpn、控制组上的正负样本Cpn占比,二者尽可能差异化,而不是要求左子节点都是正样本or负样本。公式描述如下:
D
g
a
i
n
(
A
)
=
D
(
P
T
(
Y
)
:
P
C
(
Y
)
∣
A
)
−
D
(
P
T
(
Y
)
:
P
C
(
Y
)
)
D_{gain}(A)=D(P^T(Y):P^C(Y)~|~A) - D(P^T(Y):P^C(Y))
Dgain(A)=D(PT(Y):PC(Y) ∣ A)−D(PT(Y):PC(Y))
其中,
D
(
P
T
(
Y
)
:
P
C
(
Y
)
∣
A
)
D(P^T(Y):P^C(Y)~|~A)
D(PT(Y):PC(Y) ∣ A)代表基于条件
A
A
A分裂的分裂后干预组和控制组的分布差异,
D
(
P
T
(
Y
)
:
P
C
(
Y
)
)
D(P^T(Y):P^C(Y))
D(PT(Y):PC(Y))代表分裂前干预组和控制组的分布差异,
D
g
a
i
n
(
A
)
D_{gain}(A)
Dgain(A)就是基于条件
A
A
A分裂的增益。
分裂公式举例说明
接下来,结合具体示例说明什么是响应标签分布差异变化。上图中有两类不同样本,绿色正样本,红色负样本。则有如下分布:
分裂前,干预组分布
T
(
0.75
正
,
0.25
负
)
T(0.75正, 0.25负)
T(0.75正,0.25负) ,控制组分布
C
(
0.5
正
,
0.5
负
)
C(0.5正, 0.5负)
C(0.5正,0.5负)。
分裂后左子树,干预组分布
T
(
1
正
,
0
负
)
T(1正, 0负)
T(1正,0负),控制组分布
C
(
0
正
,
1
负
)
C(0正, 1负)
C(0正,1负);
分裂后右子树,干预组分布
T
(
0.5
正
,
0.5
负
)
T(0.5正, 0.5负)
T(0.5正,0.5负),控制组分布
C
(
1
正
,
0
负
)
C(1正, 0负)
C(1正,0负)。
使用欧式距离度量干预组和分布组的分布差异:
分裂前:
D
(
P
T
(
Y
)
:
P
C
(
Y
)
∣
A
)
=
(
p
T
−
p
C
)
2
+
(
n
T
−
n
C
)
2
=
(
0.75
−
0.5
)
2
+
(
0.25
−
0.5
)
2
=
0.125
\begin{aligned} 分裂前:& D(P^T(Y):P^C(Y)~|~A)=(p_T-p_C)^2+(n_T-n_C)^2\\ &= (0.75-0.5)^2+(0.25-0.5)^2 = 0.125 \end{aligned}
分裂前:D(PT(Y):PC(Y) ∣ A)=(pT−pC)2+(nT−nC)2=(0.75−0.5)2+(0.25−0.5)2=0.125
分裂后:
D
(
P
T
(
Y
)
:
P
C
(
Y
)
)
=
N
l
N
[
(
p
T
l
−
p
C
l
)
2
+
(
n
T
l
−
n
C
l
)
2
]
+
N
r
N
[
(
p
T
r
−
p
C
r
)
2
+
(
n
T
r
−
n
C
r
)
2
]
=
4
8
[
(
1
−
0
)
2
+
(
0
−
1
)
2
]
+
4
8
[
(
0.5
−
1
)
2
+
(
0.5
−
0
)
2
]
=
1.25
\begin{aligned} 分裂后:& D(P^T(Y):P^C(Y))\\ &=\frac{N_l}{N}[(p_{Tl}-p_{Cl})^2+(n_{Tl}-n_{Cl})^2]+\frac{N_r}{N}[(p_{Tr}-p_{Cr})^2+(n_{Tr}-n_{Cr})^2]\\ &= \frac{4}{8}[(1-0)^2+(0-1)^2]+\frac{4}{8}[(0.5-1)^2+(0.5-0)^2]=1.25 \end{aligned}
分裂后:D(PT(Y):PC(Y))=NNl[(pTl−pCl)2+(nTl−nCl)2]+NNr[(pTr−pCr)2+(nTr−nCr)2]=84[(1−0)2+(0−1)2]+84[(0.5−1)2+(0.5−0)2]=1.25
于是,使用特征
A
A
A分裂的增益,就是:
D
g
a
i
n
(
A
)
=
D
(
P
T
(
Y
)
:
P
C
(
Y
)
∣
A
)
−
D
(
P
T
(
Y
)
:
P
C
(
Y
)
)
=
1.125
D_{gain}(A)=D(P^T(Y):P^C(Y)~|~A) - D(P^T(Y):P^C(Y))=1.125
Dgain(A)=D(PT(Y):PC(Y) ∣ A)−D(PT(Y):PC(Y))=1.125
分裂度量归一化
和传统的决策树分类模型类似,直接使用信息增益作为分裂标准,会偏向于选择“有大量差异特征值的特征”。因此,会在
D
g
a
i
n
(
A
)
D_{gain}(A)
Dgain(A)的基础上,对“有大量差异特征值的特征”进行额外的惩罚。以欧式距离为例,对应的惩罚项为:
N
T
N
G
i
n
i
(
P
T
(
A
)
)
+
N
C
N
G
i
n
i
(
P
C
(
A
)
)
\frac{N^T}{N}Gini(P^T(A))+\frac{N^C}{N}Gini(P^C(A))
NNTGini(PT(A))+NNCGini(PC(A))
上式就是计算,基于特征
A
A
A分裂后,落在干预组样本和控制组样本的特征分布的Gini指数(Gini指数取值介于0~1,值越接近0表示所有样本都属于同一个类别,值越接近1表示各类别样本均匀分布)。一般,当特征
A
A
A有大量差异特征值时,无论是干预组还是控制组,相应地Gini指数都极有可能包括特征的多个取值,相应的Gini指数就会偏大。
更多内容参考公众号原文:Uplift Tree Model:增益树模型原理
更多内容欢迎关注微信公众号:瑞行AI