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

【介绍】评分卡-bbbrisk-分箱格式

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


评分卡的重点其实在于对变量的分箱,分箱的好坏就决定了模型的效果,所以要构建评分卡就避免不了对变量分箱,在使用bbbrisk前,我们先来说说bbbrisk的分箱格式是怎么一回事,以及它的格式。在这里建议大家先大概的看看就好了,在之后的使用之中有疑问时再回头来详细看。

一、bbbrisk-分箱格式-分箱的用途

我们知道,评分卡的重点其实在于对变量的分箱,而在bbbrisk中,也是以它为重点,只要知道了变量的分箱逻辑,就可以用它来得到我们所想要的一切东西,例如打印变量的badrate分箱效果、构建评分卡、对数据转换等等:

分箱逻辑的三个用途

而我们这张文章,主要目的就是先熟悉一下在bbbrisk中怎么设置分箱,后面再来使用bbbrisk就方便多了。

下面我们不妨先通过几个小场景来简单熟悉一下bbbrisk的分箱格式。

1.1. 看看单个变量的分箱效果

假设我们想看看单个变量按分箱逻辑进行分箱后的效果,例如,要将rev变量分为五个箱:

(0,0.1](-inf,0]或(0.1,0.37](0.37,0.64](0.64,1.2]或(2,inf](1.2,2]

那么我们可以用如下代码来打印出它的分箱效果:

import bbbrisk as br
from  bbbrisk import bins
data = br.datasets.load_bloan()                                                    # 加载数据
bin_set = [[0,0.1],(['-',0],[0.1,0.37]),[0.37,0.64],([0.64,1.2],[2,'+']),[1.2,2]]  # 设置变量的分箱
bin_stat = bins.Bins(bin_set).binStat(data['rev'],data['is_bad'])                  # 统计分箱结果
print(bin_stat)                                                                    # 显示分箱结果

其中,bin_set就是我们的分箱逻辑了,然后按它来统计rev变量分箱后is_bad的分布结果bin_stat,如下:

变量的分箱结果

当然,这是我将结果整理到excel后的结果,直接打印出来虽然可以看到结果,但不够美观。

1.2. 查看所有变量的分箱效果

事实上,看单个变量往往只是分析变量时会使用到,如果我们已经确定了所有变量的分箱逻辑,纯粹的想看看它们的分箱效果(例如写报告时要整理出所有变量的分析结果),那么就可以一次性查看所有变量的分箱效果,如下:

# 本代码展示如何用bbbrisk对变量进行手动分箱,并打印分箱统计信息
# 本代码来自《老饼讲解-评分卡》www.bbblearn.com 
import  bbbrisk  as br

# 加载数据                                                                     
data = br.datasets.load_bloan()                                       # 加载数据
x = data.iloc[:,:-1]                                                  # 变量数据
y = data['is_bad']                                                    # 标签数据

# 变量的分箱
bin_sets = {
    'rev'     :[[0,0.1],(['-',0],[0.1,0.37]),[0.37,0.64],([0.64,1.2],[2,'+']),[1.2,2],]
    ,'age'    :[[80,'+'],[60,80],[45,60],['-',45]]
    ,'city'   :[('J','E','I'),'_other',('D','N','S'),('F','P')]
    ,'income' :[[1000,5000],[5000,9000],(['-',1000],[20000,'+'],None),[9000,16000],[16000,20000]]
    ,'marital':[1,0,2]
    ,'debrate':[([0,0.1],[850,'+']),([0.1,0.5],[5,850]),([0.5,0.8],0),[0.8,5]]
    ,'due30'  :[0,1,2,(3,4),[4,'+']]
    ,'due60'  :[0,1,2,[2,'+']]
    ,'due90'  :[0,1,[1,'+']]
    ,'loan_num':[[3,'+'],(2,3),1,0]
    }
bin_stats  = br.bins.batch.bin_stats(x,y,bin_sets)                     # 统计各个变量的分箱情况
br.display.pd.set(width=300,max_colwidth=30,max_rows=30)               # 美化pandas的显示方式
for var in bin_stats:                                                  # 逐个变量打印分箱结果
    print('\n变量'+var+'的分箱结果:\n',bin_stats[var])                 # 打印当前变量的分箱统计结果

运行上面的代码,就能得到上面各个变量的结果了。

例如rev变量打印出来的统计信息结果如下:

rev变量打印出来的分箱统计信息结果

下面我们简单来看看每行代码是怎么一回事:

6-8行是导入数据;

11-22行是设置各个变量的分箱规则;

23行是调用batch.bin_stats函数,按分箱设置bin_sets来对数据x,y进行分箱信息统计;

25-26行就是逐个打印变量的分箱统计信息了。

在这里大家不必着急学习代码,后面会慢慢接触的,知道可以这么干就可以了。

1.3. 将变量按分箱进行建模

在bbbrisk中建模是非常简单的,只需要设置好变量的分箱逻辑,然后调用scoreCard函数就可以一步到位建模了。

具体的代码示例如下:

import bbbrisk as br

data = br.datasets.load_bloan()                                                    # 加载数据
x = data.iloc[:,:-1]                                                               # 变量数据
y = data['is_bad']                                                                 # 标签数据

# 变量的分箱设置
bin_sets = {
    'rev'     :[[0,0.1],(['-',0],[0.1,0.37]),[0.37,0.64],([0.64,1.2],[2,'+']),[1.2,2],]
    ,'age'    :[[80,'+'],[60,80],[45,60],['-',45]]
    ,'city'   :[('J','E','I'),'_other',('D','N','S'),('F','P')]
    ,'income' :[[1000,5000],[5000,9000],(['-',1000],[20000,'+'],None),[9000,16000],[16000,20000]]
    ,'marital':[1,0,2]
    ,'debrate':[([0,0.1],[850,'+']),([0.1,0.5],[5,850]),([0.5,0.8],0),[0.8,5]]
    ,'due30'  :[0,1,2,(3,4),[4,'+']]
    ,'due60'  :[0,1,2,[2,'+']]
    ,'due90'  :[0,1,[1,'+']]
    ,'loan_num':[[3,'+'],(2,3),1,0]
    }
# 构建评分卡
model,card = br.model.scoreCard(x,y,bin_sets)                                      # 构建评分卡

如上面的代码所示,只需要设置好各个变量的分箱,然后scoreCard函数就可以帮我们构建整个评分卡了。

其中model,card = br.model.scoreCard(x,y,bin_sets),代表的就是用x,y来构建评分卡,其中x按bin_set的分箱逻辑来进行分箱,之后就会返回评分卡的逻辑回归模型,以及最终的评分卡表了,具体效果后面的文章再详述。

二、bbbrisk-分箱格式-说明

通过上面的展示大家会发现,其实在评分卡中无非就是两部分:"怎么确定分箱"和"怎么根据分箱得到各种结果":

评分卡的两个部分

bbbrisk正是围绕这个思想所设计的,大家可以围绕"怎么得到"和"怎么使用"分箱逻辑来理解bbbrisk的功能。

好了,既然分箱逻辑在评分卡中这么重要,下面我们就来说说bbbrisk是如何定义分箱的格式的。

在上面的代码中,我们设置了分箱格式:

在bbbrisk中,约定每个变量的分箱都以list来表示,如下:

其中,list中第i个元素代表第i个分箱,因此我们只需要关注单个箱体的书写格式就可以了。

  • 单箱体的表示格式

单个箱体的表示方法,简单来说,主要就三种情况:

1. 如果是范围分箱,就用[a,b]格式。

   它遵循左开右闭,即[a,b]实际代表的范围是(a,b],如果要左闭,就把a取小一点。

2. 如果是枚举值就直接填上枚举值,例如:a

3. 如果要合并,就用小括号()括起来,例如([a,b],[c,d],e)

  • 分箱例子解说

下面举几个例子就熟悉了:

[0 ,[0,2],[2,'+']]代表0作为一个分箱,(0,2]作为一个分箱,>2作为一个分箱。

[(0,[2,'+]),[0,2],'_other']代表0与>2作为一个分箱,(0,2]作为一个分箱,其它作为一个分箱。

详细说明可以参见《bbbrisk-分箱配置格式》,但不太建议直接看,只需跟随着课程积累就行了。

结束语

在这一节,我们大概熟悉了bbbrisk的分箱配置格式,同时也了解了一些bbbrisk的使用方式,以及它的设计核心,总的来说,其实就是设置好分箱格式,就可以得到变量的分箱效果、建模效果等等内容了。



图标 评论
添加评论