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

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

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


本文展示debrate变量(负债占比)的详细分箱过程,以及代码实现示例。

一、debrate变量-分箱过程

debrate变量是"客户的负债占比",它是一个连续数值变量,下面详细讲解debrate变量的分箱过程。

1.1. debrate变量-分箱过程

在正式分箱前,先对debrate变量粗略分箱,试探debrate变量的取值分布与badrate趋势。

由于debrate是一个占比,因此我们按经验,采用如下分箱:0为一箱,(0,1]分10个箱,(1,10](10,100]各分为9个箱,100以上为一箱,统计结果如下:

debrate变量初探结果

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

debrate变量初步分箱结果

可以看到,当负债率>0时,badrate基本单调增长,即负债越高逾期可能性越大。

比较特殊的是debrate=0dabrate>5的情况,分析如下:

当debrate为0时,可能客户没有贷过款,缺少信贷意识,所以比较差一些,
而当debrate>5时,即debrate较大,说明该客户拥有一定的负债能力,所以略好一些。

最后,我们将两种特殊情况调整到badrate相近的一组,使badrate单调,分箱结果如下:

debrate变量分箱结果

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

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

卡方自动分箱结果如下:

debrate变量卡方分箱结果

ks自动分箱结果如下:

debrate变量KS分箱结果

可以看到,卡方分箱和手动分箱效果类似,而KS分箱则略差,但始终手动分箱的区分度更明显和合理。

1.3. 参考自动分箱-对手动分箱进行调整

在KS分箱中可以看到,debrate>870时坏客户占比极低,因此,对手动分箱的"初步分箱"(本文第2个表)进行调整,把>850独立划为一个分箱,(这里不取870,而取850是为了更好看一些),调整后的"初步分箱"结果如下:

debrate变量初步分箱结果-调整后

进一步地,把第0组合并到第3组,把第5组合并第2组,把第6组并到第1组,调整后的最终分箱结果如下:

debrate变量分箱结果-调整后

可以看到,调整前的分箱IV为0.076,调整后为0.082,略为提升了一点。

二、debrate变量-分箱代码

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

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

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

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

# 0为一箱,(0,1]分10个箱,(1,10]、(10,100]各分为9个箱,100以上为一箱
bin_set = bins.merge.eDist(x,[['-',0,1],[0,1,10],[1,10,9],[10,100,9],[100,'+',1]])
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# 以0,0.1,0.5,0.8,5作为切割点
bin_set =[0,[0,0.1],[0.1,0.5],[0.5,0.8],[0.8,5],[5,'+']]
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# 最终分箱结果
bin_set =[([0,0.1],[5,'+']),[0.1,0.5],([0.5,0.8],0),[0.8,5]]
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)

# 调整后的初步分箱结果
bin_set =[0,[0,0.1],[0.1,0.5],[0.5,0.8],[0.8,5],[5,850],[850,'+']]
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

# 调整后的最终分箱结果
bin_set =[([0,0.1],[850,'+']),([0.1,0.5],[5,850]),([0.5,0.8],0),[0.8,5]]
bin_stat = bins.Bins(bin_set).binStat(x,y)
print(bin_stat)

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

debrate变量分箱代码运行结果

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

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

结束语

这里我们分析的是“占比”变量,可以看到,虽然理论上“占比”是在[0,1]之间,但在实际中,却会出现>1的情况,所以分析的时候要结合实际背景进行分析。对于占比变量,需要注意0(0,0.1](0.1,1)1>1的各自意义,因为0代表的可能是"缺失",或者"从不",而(0,0.1]是有一点,(0.1,1)是较正常的占比,而>1则是特殊情况。



图标 评论
添加评论