风控评分卡模型原理与应用(九):评分卡建模实战

发布时间:2026/11/5 21:15:31

风控评分卡模型原理与应用(九):评分卡建模实战 在前面的文章中介绍了风控评分卡及模型的原理本篇使用bbbrisk来实现评分卡来帮助大家理解评分卡建模的流程。数据处理bbbrisk是python的一个风控包目前提供的功能主要是构建评分卡里面包含构建评分卡的相关功能和原始数据首先安装这个包pip install bbbriskbbbrisk依赖于numpy、pandas和sklearn包最好提前安装好上述包首先导入需要的数据并查看数据结构# 加载数据pd.set_option(display.float_format,lambdax:%.2f%x)# 设置输出2位小数防止出现科学计数法不直观databr.datasets.load_bloan()data.head()data.describe()从输出的数据来看bbbrisk自带的小贷数据共包含10个变量与客户好坏标签数据共2万条其中income这个字段的缺失值比较多接着看一下特征之间的相关性figure,axplt.subplots(figsize(15,15))sns.heatmap(data.corr(),squareTrue,annotTrue)可以看出due60和due90这两个特征相关性很高后续可以考虑只保留一个。数据分箱这里我们直接使用bbbrisk进行自动分箱做一个基本的数据分箱并查看结果xdata.iloc[:,:-1]# 变量数据ydata[is_bad]# 自动分箱bin_setsbr.bins.batch.autoBins(x,y,enum_var[city,marital])# 自动分箱,如果有枚举变量,必须指出哪些是枚举变量bin_statsbr.bins.batch.bin_stats(x,y,bin_sets)# 统计各个变量的分箱情况br.display.pd.set(width300,max_colwidth30,max_rows30)# 美化pandas的显示方式forvarinbin_stats:# 逐个变量打印分箱结果print(\n变量var的分箱结果:\n,bin_stats[var])# 打印当前变量的分箱统计结果代码会给出每个特征对应的分箱结果和对应的IV值和Badrate这里给出几个特征的结果美化一下细看一下自动分箱后的结果的问题还是挺多的例如age字段有两个箱体IV值不符合要求同时从badrate看也不单调同样的变量loan_num变量debrat等等也都有这种问题所以自动分箱的结果可以考虑IV值和Badrate单调性符合要求的分箱结果其他不符合要求的可以接着通过之前文章所说的其他分箱方法尝试再次分箱。这里直接给出最后的分箱结果帮助大家先了解相关流程。这里也是直接使用bbrisk的功能实现分箱。在bbbrisk中约定每个变量的分箱都以list来表示list中第i个元素代表第i个分箱简单来说主要就三种情况如果是范围分箱就用[a,b]格式它遵循左开右闭即它实际代表的范围是(a,b]如果要左闭,就把a取小一点如果是枚举值就直接填上枚举值a如果要合并就用小括号()括起来例如([a,b],[c,d],e)# 变量的分箱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_statsbr.bins.batch.bin_stats(x,y,bin_sets)# 统计各个变量的分箱情况br.display.pd.set(width300,max_colwidth30,max_rows30)# 美化pandas的显示方式forvarinbin_stats:# 逐个变量打印分箱结果print(\n变量var的分箱结果:\n,bin_stats[var])# 打印当前变量的分箱统计结果从输出的最终的结果看badrate都有非常明显的趋势它们都是有效的可以作为入模变量。建模与评估构建模型并使用逐步回归来删选最终的变量# 构建评分卡model,cardbr.model.scoreCard(x,y,bin_sets,train_param{random_state:0})# 构建评分卡,为了使结果能重现,笔者设置了固定的随机种子scorecard.predict(x[card.var])# 用评分卡进行评分card.featureScore# 评分卡-特征得分表card.baseScore# 打印结果print(\n-----【 模型性能评估 】----)print(* 模型训练AUC:,model.train_auc)# 打印模型训练数据集的AUCprint(* 模型测试AUC:,model.test_auc)# 打印模型测试数据集的AUCprint(* 模型训练KS:,model.train_ks)# 打印模型训练数据集的KSprint(* 模型测试KS:,model.test_ks)# 打印模型测试数据集的KSprint(\n--------【 模型 】---------)print(* 模型使用的变量:,model.var)# 模型最终使用的变量print(* 模型权重:,model.w)# 模型的变量权重print(* 模型阈值:,model.b)从输出的结果看模型的AUC大于0.8整体效果不错# 计算阈值表与分数分布图thd_tbbr.report.get_threshold_tb(score,y,bin_step10)# 阈值表thd_tbbr.report.draw_score_disb(score,y,bin_step10,figsize(20,8))从分数分布图可看出分数越低坏客户的占比越高当分数⩾790时基本坏客户的占比就较少了同时从分布图还可以看出整体客户质量是较好的分数基本集中在高分段高分段只有个别客户坏账这可以理解为意外情况导致的逾期。(备注在实践中分数分布图一般呈现为正态分布或二八分布在本例中就是二八分布。https://www.bbbdata.com/scorecard/cardhttps://geekdaxue.co/read/yingtaoxianghello/cil23y
延伸阅读

更多相关文章

2026/11/5 16:51:33

EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析

1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被…

2026/11/5 16:26:13

Rust原来很简单二:所有权系统

Part 2 核心篇 —— 所有权系统 本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理 6…

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑