前言
在实现评分卡前,一般需要将变量进行分箱。变量的分箱可能通过手动分箱,也可以使用自动分箱算法来进行分箱,其中常用的自动分箱方法有:等频分箱、等距分箱、卡方分箱、KS分箱、决策树分箱等。下面展示什么是等频等距分箱,以及代码的实现。
一、等频、等距分箱
1.1. 等频分箱
等频分箱是指按相等频数进行分箱,即分组后每组的样本一样多,如下所示:
如图所示,等频分箱就是样本从小到大排列,每n个样本作为一组,即通过等频分箱,最终每组的样本是一致的。
1.2. 等距分箱
等距分箱是指按固定距离进行分箱,每组的组距一致,如下所示:
例如数据的范围为[0,10],设定组距为2,则分箱为[0,2],(2,4],…(8,10]
二、等频、等距分箱-代码实现
2.1. 利用pandas实现等频等距分箱
等频等距分箱在python中可以使用pandas实现,它可以进行简单的分箱,代码如下:
import pandas as pd
from sklearn.datasets import load_iris
# 实现等频、等距分箱
iris = load_iris() # 加载iris数据
x = iris.data[:,0] # 取第0个变量作为分箱变量
# 实现等频分箱
freq_bins = pd.qcut(x , q=5) # 对x进行等频分箱
print("\n等频-分箱结果:", freq_bins.categories) # 分箱结果
print("\n等频-样本箱号:", freq_bins.codes) # 分箱后样本的箱号
# 实现等距分箱
bins = pd.cut(x , bins=5) # 对x进行等距分箱
print("\n等距-分箱结果:", bins.categories) # 分箱结果
print("\n等距-样本箱号:", bins.codes) # 分箱后样本的箱号
代码运行结果如下:
2.2. bbbrisk实现等频等距分箱
利用bbbrisk的分箱函数可以实现更灵活的等频等距分箱。
如果没有bbbrisk,可以先用pip进行安装:
pip install bbbrisk
bbbrisk实现等频等距分箱的示例代码如下:
import bbbrisk as br
# 加载数据
data = br.datasets.load_bloan() # 加载数据
x,y = data['rev'],data['is_bad'] # 变量与标签
br.display.pd.set(width=300,max_colwidth=30,max_rows=30) # 美化pandas的显示方式
# 等频分箱
bin_set = br.bins.merge.eSample(x,bin_sample=2000) # 将变量进行等样本分箱
bin_stat = br.bins.Bins(bin_set).binStat(x,y) # 统计分箱结果
print('\n样本在等频分箱的分布:\n',bin_stat) # 显示样本分布
# 等距分箱
bin_set = br.bins.merge.eDist(x,bin_num=10) # 将变量进行等距分箱
bin_stat = br.bins.Bins(bin_set).binStat(x,y) # 统计分箱结果
print('\n样本在等距分箱的分布:\n',bin_stat) # 显示样本分布
bbbrisk实现等频等距分箱的示例代码如下:
bbbrisk还可以实现分段等距分箱,即如下的效果:
可以看到,它在<1时等距分为5个箱,1到1000等分1个箱,>1000分为1个箱。
具体说明可参考:【说明】bins.merge.eDist
总结
总的来说,等频分箱就是每n个样本作为一箱,等距分箱就是每相距n作为一个分箱。它们的实现可以使用pandas或bbbrisk来实现。