一.定义
分箱就是将连续变量离散化
二.好处
- 储存空间小
- 将所有变量变换到相似的尺度上
- 对异常数据有很强的鲁棒性
- 引入了非线性
- 使模型会更稳定,降低了模型过拟合的风险,提升模型表达能力,加大拟合
三.方法
关于变量分箱主要分为两大类:有监督型和无监督型
A. 无监督:
(1) 等宽 (2) 等频 (3) 聚类
#coding:utf-8
from sklearn.cluster import KMeans
import numpy as np
import pandas as pd
pd.cut(np.array([.2, 1.4, 2.5, 6.2, 9.7, 2.1]),3, labels=["good", "medium", "bad"])#等宽
pd.qcut(range(5), 3, labels=["good", "medium", "bad"])#等频
#聚类
k=4
data = np.array([1]*10+[2]*5+[100]*4+[3000]*100)
kmodel = KMeans(n_clusters = k)
kmodel.fit(data.reshape(-1,1))
c = pd.DataFrame(kmodel.cluster_centers_).sort_values(0)
w = c.rolling(2).mean().iloc[1:]
w = [data.min()-1] + list(w[0]) + [data.max()+1]
data_kmean = pd.cut(data, w, labels = range(k))
B.有监督
因变量为离散:
一.卡方分箱法(ChiMerge):
卡方值:类分布的相似性。低卡方值表明它们具有相似的类分布。
算法:
二.Best-KS分箱
KS值:KS值越大,表示该变量越能将正,负客户的区分程度越大。
KS的计算方式:
- 计算每个评分区间的好坏账户数。
- 计算各每个评分区间的累计好账户数占总好账户数比率(good%)和累计坏账户数占总坏账户数比率(bad%)。
- 计算每个评分区间累计坏账户比与累计好账户占比差的绝对值(累计good%-累计bad%),然后对这些绝对值取最大值记得到KS值。
算法:
- 将特征值值进行从小到大的排序。
- 计算出KS最大的那个值,即为切点,记为D。然后把数据切分成两部分。
- 重复步骤2,进行递归,D左右的数据进一步切割。直到KS的箱体数达到我们的预设阈值即可。
Best-KS分箱的特点:
- 连续型变量:分箱后的KS值<=分箱前的KS值
- 分箱过程中,决定分箱后的KS值是某一个切点,而不是多个切点的共同作用。这个切点的位置是原始KS值最大的位置。
因变量为连续:
单变量决策树算法