发布时间:2026/7/24 22:25:02
风控评分卡模型原理与应用(九):评分卡建模实战 在前面的文章中介绍了风控评分卡及模型的原理本篇使用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/7/24 23:55:15

3分钟解锁Mac NTFS读写自由:告别跨平台文件传输烦恼

3分钟解锁Mac NTFS读写自由:告别跨平台文件传输烦恼 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for …

2026/7/24 23:55:15

Wand-Enhancer终极指南:三步实现WeMod专业版永久免费解锁

Wand-Enhancer终极指南:三步实现WeMod专业版永久免费解锁 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer Wand-Enhancer是一款专为WeMo…

2026/7/24 23:55:15

游戏卡池流水排名分析:从数据来源到运营策略实战指南

在游戏运营和数据分析领域,卡池流水是衡量角色商业表现和玩家参与度的核心指标之一。对于《绝区零》这类持续更新的游戏,分析特定版本卡池(如3.0版本的诺姆与千夏卡池)在不同服务器和平台(如国服、日服、韩服、Steam&a…

2026/7/24 23:55:15

MSP430 USCI模块SPI通信配置与实战指南

1. 项目概述:深入MSP430的SPI通信核心如果你正在使用德州仪器(TI)的MSP430系列微控制器,并且需要与SPI接口的传感器、存储器或显示屏通信,那么你绕不开的就是它的通用串行通信接口(USCI)模块。S…

2026/7/24 23:55:15

AI agents代码开发原则

5 skills in vibe coding(对应项目开发的流程):thinking:逻辑——>分析——>computing thinking——>procedural thinkingframeworks:哪些框架可以允许我做...;checkpoints/version:如…

2026/7/24 23:50:08

AI学术写作助手:提升论文效率与质量的关键技术

1. 项目概述:当AI写作助手遇上学术论文去年指导表弟毕业论文时,我亲眼见证了一个拖延症晚期患者的"奇迹"——在答辩前72小时,他抱着台旧笔记本冲进我家,屏幕上开着十几个文献网页,Word文档里却只有孤零零的标…

2026/7/23 12:54:51

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述:为什么我们需要一个本地通信服务器?在游戏开发、数字孪生、仿真训练等众多领域,Unity作为强大的实时3D内容创作平台,其核心逻辑通常由C#驱动。然而,当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/24 0:03:10

不同品牌斜齿行星减速机如何替换?以PX与PAG系列为例

不同品牌斜齿行星减速机如何替换?以 PX 与 PAG 系列为例 一、系列对应不等于型号直接互换 PX 与 PAG 都属于斜齿、方法兰、输出轴式精密行星减速机,结构形式和应用方向具有对应关系。 原设备使用PX系列时,可以优先从PAG系列中寻找替换型号。但…

2026/7/24 0:03:10

jdk8 把list 扁平化成String 多个以逗号分隔

在 JDK 8 中&#xff0c;将 List 扁平化为以逗号分隔的 String&#xff0c;有几种非常简洁且高效的方法。&#x1f680; 推荐方案&#xff1a;使用 Collectors.joining()这是最标准的 Java 8 写法&#xff0c;适用于 List<String>。javaimport java.util.stream.Collecto…

2026/7/24 0:03:10

java 两个 long id 怎么合并成一个long id 并且不重复

“把两个 Long ID 合并成一个唯一的 Long ID&#xff0c;且保证不重复”这个需求&#xff0c;在 Java 里直接做数学上的“完美合并”是不可能的。因为两个 Long&#xff08;各 64 位&#xff09;要合并成一个 Long&#xff08;64 位&#xff09;&#xff0c;在信息论上是有损压…

2026/7/23 23:42:43

3个高效策略:快速掌握Axure中文界面配置

3个高效策略&#xff1a;快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…