https://zhuanlan.zhihu.com/p/363866684
【Uplift】特征选择篇
本文主要参考论文《Feature Selection Methods for Uplift Modeling》介绍Uplift Modeling中的特征筛选问题,主要包括”Filter方法“和”Embed方法“。具体实现参考CausalML源码。
做好特征选择可以带来很多好处,包括计算效率、维护成本、可解释性、减少过拟合等。机器学习中有一系列进行特征选择的方法,主要可以分为3类,即”过滤方法“、”封装方法“、”嵌入方法“,下图是《美团机器学习实践》中的一个比较图。
简单说,”过滤方法“是通过特征变量和目标变量的一些指标计算并设定阈值做过滤;”封装方法“是通过不断尝试特征组合并借助模型效果来打分;”嵌入方法“是用模型训练过程中附带的关于特征重要性的描述作为依据。
Filter方法
过滤方法计算快,复杂度为 O ( m ⋅ n ) O(m\cdot n) O(m⋅n),m为特征数,n为样本数。
这里介绍了3种过滤方法,分别是F-filter、LR-filter、Bin-Based filter
F-filter和LR-filter
- F-filter首先用相关特征训练线性回归模型,特征包括”treatment、目标feature、二者交叉、常数项“,然后用交叉项系数的F-statistic作为得分
statsmodels.regression.linear_model.OLSResults.f_test
- LR-filter则基于逻辑回归模型,用交叉项系数的likelihood ratio test statistic作为得分
statsmodels.discrete.discrete_model.LogitResults.llf
Bin-Based方法
Step1:对目标特征排序,并按比例分为K组。
Step2:分别计算每组内,T组和C组中,outcome的分布散度,并求和。即
Δ
=
∑
k
=
1
K
N
k
N
D
(
P
k
:
Q
k
)
\Delta=\sum_{k=1}^{K} \frac{N_{k}}{N} D\left(P_{k}: Q_{k}\right)
Δ=k=1∑KNNkD(Pk:Qk)
其中,假设outcome共有C类,
P
k
=
(
p
k
1
,
.
.
.
,
p
k
C
)
P_k=(p_{k1},...,p_{kC})
Pk=(pk1,...,pkC)和
Q
k
=
(
q
k
1
,
.
.
.
,
q
k
C
)
Q_k=(q_{k1},...,q_{kC})
Qk=(qk1,...,qkC)分别表示T组和C组概率分布,
N
k
N
\frac{N_k}{N}
NNk表示第
k
k
k组的样本占比,
D
D
D表示分布散度,介绍了3种计算方法
- KL算法,Kullback-Leibler divergence
K L ( P k : Q k ) = ∑ i = 1 n p k i log p k i q k i KL\left(P_{k}: Q_{k}\right)=\sum_{i=1}^{n} p_{k i} \log \frac{p_{k i}}{q_{k i}} KL(Pk:Qk)=i=1∑npkilogqkipki
- 欧式距离,Euclidean distance
E D ( P k : Q k ) = ∑ i = 1 n ( p k i − q k i ) 2 E D\left(P_{k}: Q_{k}\right)=\sum_{i=1}^{n}\left(p_{k i}-q_{k i}\right)^{2} ED(Pk:Qk)=i=1∑n(pki−qki)2
- 卡方散度,chi-squared divergence
Chi ( P k : Q k ) = ∑ i = 1 n ( p k i − q k i ) 2 q k i \operatorname{Chi}\left(P_{k}: Q_{k}\right)=\sum_{i=1}^{n} \frac{\left(p_{k i}-q_{k i}\right)^{2}}{q_{k i}} Chi(Pk:Qk)=i=1∑nqki(pki−qki)2
Embed方法
嵌入方法的特征重要性取自模型训练过程中得到的中间数值,这里提出两种嵌入式方法和一种作为对比的嵌入式方法
- two-model method:基于meta-learning中的T-learner,取目标特征在两个模型中的特征重要性之和。
- Uplift-tree(KL divergence):在训练uplift tree过程中,每次分裂会计算分布散度的增益,取该特征的 Δ \Delta Δ之和,本文中 D D D取KL散度。
Δ = ∑ k = left, right D ( P k : Q k ) − D ( P : Q ) \Delta=\sum_{k=\text { left, right }} D\left(P_{k}: Q_{k}\right)-D(P: Q) Δ=k= left, right ∑D(Pk:Qk)−D(P:Q)
- 作为对比的outcome embeded方法:直接对Y训练模型,并取模型给出的目标特征重要性做过滤。
特征过滤的效果
- 首先,对不同类型有效特征的提取能力。下图是指通过100次模拟试验,不同过滤方法筛选出的top6的特征,是实际有效特征的比例。可以看到,Bin-Based方法整体好于其他,尤其是平方、三角函数类型特征。
- 其次,看筛选后的模型效果。下图是不同meta-learner、不同uplift model、不同feature selection方法,选择top20特征时的AUUC值对比 。可以看出RLearner-RF模型,配KL-filter可以取得最佳的效果。
- 最后,看时间成本。Filter方法都很快,Embed-KL由于是纯python实现所以很慢,Embed的其他方法由于使用scikit-learn有Cython实现所以很快。
个人理解
在标准的机器学习预测模型中,特征筛选能够减少维护成本,提高训练速度,但并不能(或很少)带来准确率提升。而uplift modeling不同,该类问题对于无效特征更为敏感,如果能更准确的剔除无效特征,对准确率是会有提升效果的。
在实操中,使用Meta-Learning方法时,泛化能力更强的RF可以优先考虑;结合上述结果,bin-based(KL)方法和KL-embed方法是不错的选择。