本文介绍如何使用bbbrisk来快速实现一个评分卡,并展示和解说运行后得到的结果
包括变量的分箱、模型的AUC、评分卡表、阈值表、分数分布图等等
通过本文,可以知道如何快速实现评分卡,以及如何看评分卡的结果
一、评分卡与bbbrisk简介
1.1 .什么是评分卡
评分卡是小贷风控中的一种常用模型,它最终输出一张用于估计小贷客户质量的评分卡表。
评分卡样式如下:
在来了新用户后,根据以上卡表,算出用户最终的评分。
1.2 .什么是bbbrisk
bbbrisk是python的一个风控包,它提供了快速构建评分卡的功能,bbbrisk的优点是,不仅仅是单纯的提供评分卡模型,而是实际构建评分卡时一切可能用到的功能 。
在使用bbbrisk时,直接pip安装就可以了,如下:
pip install bbbrisk
二、bbbrisk实现评分卡-示例
2.1. 评分卡-数据介绍
bbbrisk自带的小贷数据共包含10个变量与客户好坏标签,
数据包含的10变量和标签如下:
数据共2万条,示例如下:
2.2. 评分卡-代码实现
用bbbrisk实现小贷评分卡的代码如下:
import bbbrisk as br
# 加载数据
data = br.datasets.load_bloan() # 加载数据
x = data.iloc[:,:-1] # 变量数据
y = data['is_bad'] # 标签数据
# 构建评分卡
bin_sets = br.bins.batch.autoBins(x, y,enum_var=['city','marital']) # 自动分箱,如果有枚举变量,必须指出哪些是枚举变量
bin_stats = br.bins.batch.bin_stats(x, y, bin_sets) # 分箱统计
model,card = br.model.scoreCard(x,y,bin_sets,train_param={'random_state':0}) # 构建评分卡,为了使结果能重现,笔者设置了固定的随机种子
score = card.predict(x[card.var]) # 用评分卡进行评分
card.featureScore # 评分卡-特征得分表
card.baseScore # 评分卡-基础分
# 打印结果
print('\n-----【 模型性能评估 】----')
print('* 模型训练AUC:',model.train_auc) # 打印模型训练数据集的AUC
print('* 模型测试AUC:',model.test_auc) # 打印模型测试数据集的AUC
print('* 模型训练KS:',model.train_ks) # 打印模型训练数据集的KS
print('* 模型测试KS:',model.test_ks) # 打印模型测试数据集的KS
print('\n--------【 模型 】---------')
print('* 模型使用的变量:',model.var) # 模型最终使用的变量
print('* 模型权重:',model.w) # 模型的变量权重
print('* 模型阈值:',model.b) # 模型的阈值
# 计算阈值表与分数分布图
thd_tb = br.report.get_threshold_tb(score,y,bin_step=10) # 阈值表
br.report.draw_score_disb(score,y,bin_step=10,figsize=(14, 4)) # 分数分布
代码运行结果如下:
从上面的结果,可以看到模型的训练、测试数据的AUC和KS,以及模型的参数等。
需要注意的是,评分卡在建模时会用逐步回归进行筛选变量,因此最终只保留了5个变量。
三、评分卡结果解说
3.1. 变量的分箱结果
变量的分箱结果记录在bin_stats中,例如rev变量的分箱为
print(bin_stats['rev'])
展示如下:
3.2. 评分卡表
card.featureScore和card.baseScore里分别存放了特征得分与基础分。
两者合并后就是最终的评分卡表,如下:
使用上述卡表进行评分,只需计算出每个特征的得分,再加上基础分,就是总评分
3.3. 阈值表
代码中的report.get_threshold_tb用于计算阈值表, 阈值表计算结果如下:
评分卡的阈值一般参考以上的阈值表来确定,
以第二行为例,它的意义如下:
[640,650)的人共12个,其中2个是好客户,10个是坏客户
如果阈值取为<640,则会:
损失29个客户,占总客户(20000个)中的0.15%,
损失的(29个)客户中有7个好客户,占总好客户(18617个)中的0.04%,
损失的(29个)客户中有22个坏客户(剔除了22个坏客户),即剔除了总体坏客户(1383个)中的1.59%
本组中,坏客户占比为83.33%(10/12),损失客户中,坏客户占比为0.7059(22/29)
3.4. 分数分布图
report.draw_score_disb则用于绘制分数分布图,结果如下:
分数分布图一般呈二八分布,或者正态分布
以上就是一个评分卡的简单实现了,更多可参考: