老饼讲解:一步一步上手学习
本文展示income变量(收入)的详细分箱过程,以及代码实现示例。
income变量是"客户的收入",它是一个数值变量,本节展示income变量的详细分箱过程。
在正式分箱前,先对income变量粗略分箱,试探income变量的取值分布与badrate趋势,由于income是连续变量,不妨先用等距分箱,将它分为10个分箱,统计结果如下:

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

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

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

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

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

ks自动分箱结果如下:

可以看到,卡方分箱和KS分箱都没有手动分箱的结果好,手动分箱的区分度更明显和合理。
本节展示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)运行上述代码,每一步都会打印出如下的结果:

从结果中就可以看到每组的样本数、badrate和IV等等信息。
好了,以上就是income变量的详细分箱过程,以及代码实现了~
收入变量在评分卡中有时是好用的,有时是不好用的,不同产品的表现就会不同,这种不稳定很大原因是因为它非常容易被客户刻意捏造,而如果能够核实(例如通过银行流水核实),那么收入是较重要的一个变量,而不能核实的情况下,收入往往就会成为一个弱变量。
评论