评分卡

【实例】评分卡-如何用bbbrisk自动分箱

作者 : 老饼 发表日期 : 2022-06-26 10:20:15 更新日期 : 2025-03-05 15:23:10
本站原创文章,转载请说明来自《老饼讲解-机器学习》www.bbbdata.com



在评分卡的单变量分箱过程中,往往会以自动分箱的结果来辅助手动分箱

本文讲解单变量进行自动分箱的实践例子,包括卡方分箱、KS分箱以及决策树分箱

通过本文,可以了解如何对连续变量、枚举变量进行自动分箱,以及如何用代码来实现






   01.自动分箱-实例讲解(连续变量)    





本节展示如何利用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分箱有终止条件,所以最终分箱数量不一定等于目标箱数
而决策树分箱则没有直接控制分箱数量的参数,它只能通过调整树深度、叶子最小样本数来控制








   02.自动分箱-实例讲解(枚举变量)    





本节展示如何利用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 









联系老饼