目录
老饼讲解:一步一步上手学习

【详述】income-详细分箱过程

作者 : 老饼 发表日期 : 2026-03-24 10:38:05 更新日期 : 2026-05-12 15:41:58
老饼讲解-简单易懂,干货满满,爽过嗦螺!


本文展示income变量(收入)的详细分箱过程,以及代码实现示例。

一、income变量-分箱过程

income变量是"客户的收入",它是一个数值变量,本节展示income变量的详细分箱过程。

1.1. income变量-分箱过程

在正式分箱前,先对income变量粗略分箱,试探income变量的取值分布与badrate趋势,由于income是连续变量,不妨先用等距分箱,将它分为10个分箱,统计结果如下:

imcome变量初探结果

由于样本集中在第0个分箱,因此调整为<=156000等距分为10箱,>156000为一箱,但再次分箱后会发现样本仍然集中,因此我们粗暴点,将<=156000等距分为100箱,分箱结果如下:

imcome变量初探结果-调整后

观察结果,可以发现样本在income>25000时较少,且badrate较低,因此调整为income>25000为一箱,income<=25000时等距分为25箱,分箱结果如下:

imcome变量最终初探结果

我们将badrate较连续相似的划分为一箱,即以1000500090001600020000作为切割点,None单独一组,分箱结果如下:

imcome变量初步分箱结果

可以发现,从1000开始,收入income越高,badrate单调变小,同时,可以观察到,收入<1000收入>20000None的badrate相似,它们很可能都是用户乱填、不填的表现,因此我们把它们分为一组,最后得到的分箱如下:

imcome变量分箱结果

1.2. income变量-自动分箱结果

下面我们使用卡方分箱与ks分箱,看看两种算法对income变量的分箱结果。

卡方自动分箱结果如下:

imcome变量卡方分箱结果

ks自动分箱结果如下:

imcome变量KS分箱结果

可以看到,卡方分箱和KS分箱都没有手动分箱的结果好,手动分箱的区分度更明显和合理。

二、income变量-分箱代码

本节展示income变量分箱过程中每一步的详细代码。

2.1. income变量分箱-代码示例

上述分箱的每一步过程,所对应的具体代码实现如下:

import bbbrisk as br
from  bbbrisk import bins

# 加载数据                                                                         
data = br.datasets.load_bloan()                                                    # 加载数据
x = data['income']                                                                 # 变量
y = data['is_bad']                                                                 # 标签
br.display.pd.set(width=300,max_colwidth=30,max_rows=30)                           # 美化pandas的显示方式

# 等距分为10个箱
bin_set = bins.merge.eDist(x,10)
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# 将<=156000分为100箱,>156000作为一箱
bin_set = bins.merge.eDist(x,[('-',156000,100),(156000,'+',1)])
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# <=25000分为25箱,>25000分为1箱
bin_set = bins.merge.eDist(x,[('-',25000,25),(25000,'+',1)])
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# 以1000,5000,9000,16000,20000作为切割点,None单独一组
bin_set = [['-',1000],[1000,5000],[5000,9000],[9000,16000]
           ,[16000,20000],[20000,'+'],None]
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# 调整后的最终分箱
bin_set = [[1000,5000],[5000,9000],(['-',1000],[20000,'+'],None),[9000,16000]
           ,[16000,20000]]
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# 自动分箱-卡方分箱
bin_set = bins.merge.chi2(x,y)
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# 自动分箱-KS分箱
bin_set = bins.merge.ks(x,y)
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

运行上述代码,每一步都会打印出如下的结果:

imcome变量分箱代码运行结果

从结果中就可以看到每组的样本数、badrate和IV等等信息。

好了,以上就是income变量的详细分箱过程,以及代码实现了~

结束语

收入变量在评分卡中有时是好用的,有时是不好用的,不同产品的表现就会不同,这种不稳定很大原因是因为它非常容易被客户刻意捏造,而如果能够核实(例如通过银行流水核实),那么收入是较重要的一个变量,而不能核实的情况下,收入往往就会成为一个弱变量。



图标 评论
添加评论