本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com
在评分卡的单变量分箱过程中,往往会以自动分箱的结果来辅助手动分箱
本文讲解单变量进行自动分箱的实践例子,包括卡方分箱、KS分箱以及决策树分箱
通过本文,可以了解如何对连续变量、枚举变量进行自动分箱,以及如何用代码来实现
本节展示如何利用bbbrisk对连续变量进行卡方分箱、KS分箱和决策树分箱
连续变量的自动分箱-实现讲解
在对单个变量进行手动分箱时,往往会使用自动分箱的结果来作为辅助与参考
自动分箱一般指用卡方分箱、KS分箱、决策树分箱算法对变量进行分箱
各个自动分箱算法的简单描述如下:
卡方分箱 :先用等频分箱进行初始分箱,然后根据卡方值逐步合并,直到目标分箱个数
KS分箱 :先将整体作为一个分箱,然后用KS作为切割依据,不断将分箱一分为二,直到分为目标箱数
决策树分箱 :它将需要分箱的单个变量与y进行CART决策树建模,将最终树的叶子节点作为分箱结果
其中,最常用的是卡方分箱,且评分卡的分箱一般目标分箱为3-6个分箱
以rev变量为例,它是一个连续变量,下面使用卡方分箱、KS分箱、决策树分箱对它进行分箱
具体代码示例如下:
import bbbrisk as br
data = br.datasets.load_bloan() # 加载数据
x = data['rev'] # rev变量
y = data['is_bad'] # 样本标签
# 卡方分箱
bin_set = br.bins.merge.chi2(x,y,bin_num=5,init_bin_num=10) # 进行卡方分箱,bin_num是目标箱数,init_bin_num是初始箱数
bin_stat = br.bins.Bins(bin_set).binStat(x,y) # 统计分箱结果
print('\n* 卡方分箱结果:\n',bin_stat) # 显示分箱结果
# KS分箱
bin_set = br.bins.merge.ks(x,y,bin_num=5,min_sample=None) # 进行KS分箱,bin_num是目标箱数,min_sample是最小样本数
bin_stat = br.bins.Bins(bin_set).binStat(x,y) # 统计分箱结果
print('\n* KS分箱结果:\n',bin_stat) # 显示分箱结果
# 决策树分箱
bin_set = br.bins.merge.tree(x,y,max_depth=3,min_sample=None) # 进行决策树分箱,max_depth是树深度,min_sample是叶子最小样本数
bin_stat = br.bins.Bins(bin_set).binStat(x,y) # 统计分箱结果
print('\n* 决策树分箱结果:\n',bin_stat) # 显示分箱结果
运行结果如下:
![]()
可以看到, 卡方分箱、KS分箱、决策树分箱最终的IV值分别为1.05、1.06、1.09
需要注意的是,由于KS分箱有终止条件,所以最终分箱数量不一定等于目标箱数
而决策树分箱则没有直接控制分箱数量的参数,它只能通过调整树深度、叶子最小样本数来控制
本节展示如何利用bbbrisk对枚举变量进行卡方分箱、KS分箱和决策树分箱
枚举变量的自动分箱-实现讲解
一般自动分箱算法不适用于枚举变量,但可以通过将枚举值转换为badRate,从而适用各种自动分箱算法
以city变量为例,它是一个枚举变量,下面使用卡方分箱、KS分箱、决策树分箱对它进行分箱
具体代码示例如下:
import bbbrisk as br
data = br.datasets.load_bloan() # 加载数据
x = data['city'] # city变量
y = data['is_bad'] # 样本标签
# 卡方分箱
bin_set = br.bins.merge.chi2Enum(x,y,bin_num=5,init_bin_num=10) # 进行卡方分箱,bin_num是目标箱数,init_bin_num是初始箱数
bin_stat = br.bins.Bins(bin_set).binStat(x,y) # 统计分箱结果
print('\n* 卡方分箱结果:\n',bin_stat) # 显示分箱结果
# KS分箱
bin_set = br.bins.merge.ksEnum(x,y,bin_num=5,min_sample=None) # 进行KS分箱,bin_num是目标箱数,min_sample是最小样本数
bin_stat = br.bins.Bins(bin_set).binStat(x,y) # 统计分箱结果
print('\n* KS分箱结果:\n',bin_stat) # 显示分箱结果
# 决策树分箱
bin_set = br.bins.merge.treeEnum(x,y,max_depth=3,min_sample=None) # 进行决策树分箱,max_depth是树深度,min_sample是最小样本数
bin_stat = br.bins.Bins(bin_set).binStat(x,y) # 统计分箱结果
print('\n* 决策树分箱结果:\n',bin_stat) # 显示分箱结果
运行结果如下:
![]()
可以看到, 卡方分箱、KS分箱、决策树分箱最终的IV值分别为0.23、0.23、0.24
好了,以上就是如何使用bbbrisk来实现变量的自动分箱了~
End