数据分桶是一种数据预处理技术,用于减少次要观察误差的影响,是一种将多个连续值分组为较少数量的“桶”的方法。
例如,例如我们有一组关于人年龄的数据,如下图所示:
现在我们希望将他们的年龄分组到更少的间隔中,可以通过设置一些条件来实现:
分桶的数据不一定必须是数字,它们可以是任意类型的值,如“猫”、“狗”等。分桶也可用于图像处理,通过将相邻像素组合成单个像素,可用于减少数据量。
一般在建立分类模型时,需要对连续变量离散化,特征离散化后,模型会更稳定,降低了模型过拟合的风险。比如在建立申请评分卡模型时用logistic作为基模型就需要对连续变量进行离散化,离散化通常采用分桶法。
为什么要进行数据分桶?
- 离散后稀疏向量内积乘法运算速度更快,计算结果也方便存储,容易扩展;
- 离散后的特征对异常值更具鲁棒性,如 age>30 为 1 否则为 0,对于年龄为 200 的也不会对模型造成很大的干扰;
- LR 属于广义线性模型,表达能力有限,经过离散化后,每个变量有单独的权重,这相当于引入了非线性,能够提升模型的表达能力,加大拟合;
- 离散后特征可以进行特征交叉,提升表达能力,由 M+N 个变量编程 M*N 个变量,进一步引入非线形,提升了表达能力;
- 特征离散后模型更稳定,如用户年龄区间,不会因为用户年龄长了一岁就变化;
- 可以将缺失作为独立的一类带入模型;
- 将所有的变量变换到相似的尺度上。
分桶方法
分桶方法分为无监督分桶和有监督分桶。
(1)常用的无监督分桶方法有等频分桶、等距分桶和聚类分桶。
(2) 有监督分桶主要有best-ks分桶和卡方分桶。
卡方分桶
卡方分箱是自底向上的(即基于合并的)数据离散化方法。
它依赖于卡方检验:具有最小卡方值的相邻区间合并在一起,直到满足确定的停止准则。
基本思想:对于精确的离散化,相对类频率在一个区间内应当完全一致。因此,如果两个相邻的区间具有非常类似的类分布,则这两个区间可以合并;否则,它们应当保持分开。而低卡方值表明它们具有相似的类分布。
分桶步骤:
第0步:预先设定一个卡方的阈值;
第一步:初始化
根据要离散的属性对实例进行排序:每个实例属于一个区间
第二步:合并区间
(1)计算每一对相邻区间的卡方值;
(2)将卡方值最小的一对区间合并
X 2 = ∑ 2 i = 1 ∑ 2 j = 1 ( A i j − E i j ) 2 E i j X 2 = ∑ i = 12 ∑ j = 12 ( A i j − E i j )