数据预处理-分箱(Binning)和 WOE编码
1. 分箱
1.1 理论
1.1.1 定义 分箱就是将连续的特征离散化,以某种方式将特征值映射到几个箱(bin)中。
1.1.2 为什么要进行分箱?
引入非线性变换,增强模型性能。因为原始值和目标值之间可能并不存在线性关系,所以直接使用模型预测起不到很好的效果。
增强模型可解释性。通过分箱可以得到一个分段函数,模型可解释性更强。
对异常值不敏感,增强模型鲁棒性,防止过拟合。异常值终也会被分到一个箱里面,不会影响其他箱内正常特征值,分箱的在一定程度上也可以防止过拟合。
重要的是分箱之后我们还可以对不同的箱做进一步的统计和特征组合。比如WOE编码。
1.1.3 常用分箱方法:
卡方分箱(最稳定,最常用)
卡方值计算公式:
其中:
m: 箱的数量;
k: 类别数量;
Aij: 第i个箱第j类中样本数量(频数);
Eij: 如果箱的划分和类别独立同分布,第i个箱第j类中样本数量的期望值(频数);设箱的划分和类别独立同分布,则样本同时在第i个箱第j类中的概率为:pij = pi * pj,同时在第i个箱第j类中的有样本数量期望值为:pij * N 。
卡方值计算的例子,设m=2, k=2,
表1 实际频数
类别1
类别2
行和
箱1
A11
A12
R1
箱2
A21
A22
R2
列和
C1
C2
表2 期望频数(Eij)
类别1
类别2
箱1
E11 = pi * pj * N =(R1 /N) * (C1 / N) * N = R1 * C1 / N
E12 = R1 * C2 / N
箱2
E21 = R2 * C1 / N
E22 = R2 * C2 / N
表1和表2中的数据带入卡方值计算公式,即可求出箱1和箱2合并的卡方值。卡方值越小,说明真实值与期望值越接近,箱的划分和类别越接近独立同分布(类的划分和箱的划分没有关系),那么两个箱具有相同的标签分布,可以合并。
卡方检验步骤:
(1)初始化:根据连续变量值大小进行排序,构建最初的离散化,即把每一个单独的值视为一个箱体。这样做的目的是从每个单独的个体开始逐渐合并。
(2)合并:遍历相邻两项合并的卡方值,将卡方值最小的两组合并,不断重复直到满足分箱数目的限制。决策树分箱
聚类分箱
使用k-means进行聚类分箱,算法比较简单,不再详细说:先初始化k个类中心,每一次迭代将样本划分到最近的类中,然后修正类中心,直到类中心不再发生变化,停止迭代。
等频分箱
每一个箱中的样本数相同,实现很简单,先排序,按顺序放到对应的箱中即可。
等距分箱
箱的大小相同,例如年龄分箱:0-5岁,5-10岁,10-15岁,…
决策树分箱
将某一列数据作为训练集,将label作为结果,直接训练一个决策树,然后根据决策树的分裂节点的阈值作为分箱的依据。
1.1.4 实验
这个实验使用toad库(https://toad.readthedocs.io/en/stable/tutorial_chinese.html)来做分箱。
数据集使用(https://archive.ics.uci.edu/dataset/350/default+of+