1.分箱是计算woe前重要的特征工程,能有效避免模型过拟合,提高模型鲁棒性
2.分箱的本质是把连续变量离散化
3.变量分箱分为有监督分箱和无监督分箱两种
4.有监督分箱主要包括卡方分箱和BestKS分箱等
5.无监督分箱主要有等频分箱、等距分箱、聚类分箱等
4.变量分箱应遵循5项原则:箱子样本数占比不少于训练样本数5%;组间差距尽可能大;必须保证好坏样本;箱子数控制在5~8个;尽可能单调
《WOE编码和IV值》介绍了金融风控评分卡相关知识,本文来具体介绍变量分箱操作。
文章链接:WOE编码与IV值
变量分箱是评分卡的核心环节,也是直接决定变量woe和IV值的质量。根据woe的优势,合理的分箱可以消除变量的量纲影响,而且能减少异常值等噪声数据的影响,有效避免模型过拟合,提高模型鲁棒性。
分箱的本质是把连续变量离散化。对于本身就是离散型变量,每一种取值就是一个箱子,或者把几种取值合并为一个箱子即可。我们重点介绍连续型变量分箱的方法。
总体上,变量分箱有两种:有监督分箱和无监督分箱,前者主要包括卡方分箱和BestKS分箱;后者主要有等频分箱、等距分箱、聚类分箱。通常上,变量分箱有五个原则:
两两箱子bad%差距尽可能大
每个箱子样本数占比不少于总体样本数的5%
必须有好、坏分类(否则需要修正的woe计算公式)
每个变量的箱子数控制在5~8个范围内(视训练样本数大小微调)
每个变量的箱子尽可能保证单调性
下面我们针对各种分箱方法做介绍。
1.卡方分箱
根据最大分组数目和卡方阈值来控制最终的分箱数
分箱逻辑:
1)初始时,所有变量值都自成一组,统计频数。
2)然后按照各组起始值从小到大,依次扫描,取出两组拼成计算卡方值。
如果当前计算出的卡方值小于已观察到的最小卡方值,则标记当前坐标,并更新已观察最小卡方值为当前值。
3)扫描一遍后,如果当前分组数大于最大分组数,或者最小卡方值小于阈值,就将最小卡方值对应的两组频数合并,区间也合并。并回第2步执行。
否则,停止合并。输出当前各组的区间切分点。
下面代码实现这个过程:
#计算卡方值
def chi(arr):
'''
:param arr: 变量与标签值的numpy二维数组
:return:返回卡方值
'''
assert(arr.ndim == 2)
R_sum = np.sum(arr,axis=1) #行求和
C_sum = np.sum(arr,axis=0) #列求和
S_sum = np.sum(arr) #样本总量
Likelihood_matrix = (R_sum / S_sum).reshape(len(R_sum), 1) * C_sum.reshape(1, len(C_sum)) #似然估计矩阵
chi_value = np.sum((arr - Likelihood_matrix)**2/Likelihood_matrix) #拟合度求和,得估计的卡方值
return chi_value
# 卡方分箱
def Chimerge(df,col,target,max_group = None,threshold = 3.841):
'''
:param df: pandas数据集
:para