【教程】如何利用bbbrisk一步一步实现评分卡

利用bbbrisk一步一步实现评分卡

  • 一、什么是评分卡
    • 1.1.什么是评分卡
    • 1.2.评分卡有哪些
  • 二、评分卡怎么弄出来的
    • 2.1.如何制作评分卡
    • 2.2.制作评分卡的流程
  • 三、变量的分箱
    • 3.1.数据介绍
    • 3.2.变量自动分箱
    • 3.3.变量的筛选
  • 四、构建评分卡
    • 4.1.评分卡实现代码
    • 4.2.评分卡表
    • 4.3.阈值表与分数分布图

一、什么是评分卡

1.1.什么是评分卡

评分卡,一般是指用于小贷客户质量评分的评分卡表。
评分卡样式如下:
什么是评分卡
来了一个新客户,先根据客户的数据,判断客户在各个特征上属于哪一组
然后在评分卡表中找到对应的分数,对所有特征得分求和,并加上基本分,就是客户的总评分
假设客户在rev、due30、due90、city上的组别为【0、3、1、1】
那么客户在rev、due30、due90、city上的得分为【28、-30、-20、5】
则客户的总得分为28-30-20+5+780=763

1.2.评分卡有哪些

针对评分的使用不同场景,一般分为A、B、C、F卡

  • A卡:Application scorecard,申请评分卡
    A卡用申请数据,建立模型,评估用户是否会坏账
    作用:用于审批放款
  • B卡:Behavior scorecard,行为评分卡
    C卡作用于借贷中的客户。加入贷后还款等行为数据
    多种作用:可用于老客户提额
  • C卡:Collection scorecard,催收评分卡
    作用于借贷中的客户
    作用:预测用户是否会逾期,提前催收
  • F卡:(Fraud scorecard):欺诈评级评分卡
    作用于申请阶段,针对欺诈客户的判断

二、评分卡怎么弄出来的

2.1.如何制作评分卡

评分卡建模的思路与流程如下: 先在原始数据中,衍生并选择出建模的变量, 然后用建模变量与好坏客户标签建立逻辑回归模型。这样就能通过建模变量预测样本是坏客户的概率,最后,把逻辑回归模型的线性部分抽取出来,生成评分卡。
最后的最后,还需要分析当前业务应以哪个分数作为拒绝客户的临界值,以临界值作为评分阈值。

2.2.制作评分卡的流程

评分卡流程

  1. 建模数据准备
    数据准备主要是建模之前,对原始数据进行分箱与变量分析
    筛选出与客户质量相关的变量,作为建模的输入特征
  2. 建模
    (1)数据预处理:归一化,并预留测试数据
    (2)用逐步回归选出尽量少的特征(同时保持建模效果)
    (3)训练逻辑回归模型
    (4)检验AUC是否达标,并检查系数是否都为正
  3. 制作评分卡
    制作评分卡也俗称“模型转评分”
    将3中得到的逻辑回归模型,制作成评分卡表
  4. 确定评分阈值
    确定生产上判定为坏客户的分数阈值
    当分数低于该阈值时,就拒绝客户

三、变量的分箱

在构建评分卡之前,需要先对变量进行分析与分箱,并选择出有效的变量作为建模变量。

3.1.数据介绍

bbbrisk自带的小贷数据共包含10个变量与客户好坏标签,数据包含的10变量和标签如下:
数据介绍
数据共2万条,示例如下:
数据示例

3.2.变量自动分箱

变量的分箱可以使用算法进行自动分箱,常用的分箱算法有:等频分箱、等距分箱、决策树分箱、KS分箱和卡方分箱等等。
bbbrisk包提供了bins.autoBin函数来对多个变量进行自动分箱,具体代码如下:

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)                    # 统计各个变量的分箱情况
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])               # 打印当前变量的分箱统计结果# 选择iv足够大的变量
select_bin_set = {}                                                  # 初始化选择的变量的分箱
for var,stat in bin_stats.items():                                   # 逐个变量循环if (stat['iv'].iloc[-1]>0.1):                                    # 当前变量的iv值是否满足要求select_bin_set[var] =  bin_sets[var]                         # 如果满足,则添加到选择池
print('\n iv > 0.1 的变量与分箱结果:\n',select_bin_set)              # 最终选择的变量的分箱

通过以上的代码,就对变量进行分箱了,它的结果如下:
rev变量分箱结果
age变量分箱结果

loan_num变量分箱结果

3.3.变量的筛选

一般来说,需要通过iv值来筛选出有效的变量。
IV全称为信息价值(Information Value),它常在评分卡中用于筛选变量。IV的原理是通过评估好、坏样本在变量分布上的差异,从而评估变量对y的信息价值。
IV值越高,变量的价值越高,一般来说,IV值与变量对好坏客户的区分度的关系如下:
IV < 0.02 :几乎没有区分度,
0.02 <= IV < 0.1 :有微弱的区分度;
0.1 <= IV < 0.3 :有明显的区分度;
0.3 <= IV :较强的区分度
通考上述的值,来筛选出有效的变量。在本例中,所有变量都是有效的。

四、构建评分卡

在完成变量分箱后,就可以直接使用bbbrisk的评分卡包来构建评分卡,以及打印相关报告
如果没有bbbrisk的包,需要先通过pip安装

pip install bbbrisk

4.1.评分卡实现代码

用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'])   # 自动分箱,必须指出哪些是枚举变量
model,card = br.model.scoreCard(x,y,bin_sets)                          # 构建评分卡
score      = card.predict(x[card.var])                                 # 用评分卡进行评分
# 打印结果
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)                                   # 打印模型测试数据集的KSprint('\n--------【 模型 】---------')                                 
print('* 模型使用的变量:',model.var)                                   # 模型最终使用的变量
print('* 模型权重:',model.w)                                           # 模型的变量权重
print('* 模型阈值:',model.b)                                           # 模型的阈值print('\n--------【 评分卡 】---------')    
print('\n* 特征得分featureScore:   \n' ,card.featureScore      )       # 特征得分
print('\n* 基础得分baseScore:        ' ,card.baseScore         )       # 基础分

运行结果如下:

运行结果
可以看到,通过简单的代码,就可以得到评分卡模型的AUC/KS,以及模型的参数、评分卡表。

4.2.评分卡表

card.featureScore和card.baseScore里分别存放了特征得分与基础,两者合并后就是最终的评分卡表,如下:
评分卡表

4.3.阈值表与分数分布图

阈值表与分数分布图,可以进一步使用report.get_threshold_tb来计算阈值表,以及用report.draw_score_disb则用于绘制分数分布图。代码如下:

# 计算阈值表与分数分布图
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))                 # 分数分布

评分阈值表的结果如下:
评分阈值表
样本的分数分布结果如下:
分数分布
好了,以上就是如何制作一个评分卡了。
更多可以参考:
【1】老饼讲解-评分卡
【2】bbbrisk评分卡API说明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI日报 - 2025年4月2日

&#x1f31f; 今日概览&#xff08;60秒速览&#xff09; ▎&#x1f916; AGI突破 | 研究揭示零RL训练可诱发模型顿悟&#xff0c;Anthropic发布Claude 3.5内部机制研究&#xff0c;简化语言模型推理优化新方法提出。 DeepSeek-R1无需额外指令即可深度推理&#xff1b;Anthro…

探索 Kubernetes 网络穿透:如何从外部访问 K8s Pod 地址

文章目录 探索 Kubernetes 网络穿透&#xff1a;如何从外部访问 K8s Pod 地址为什么需要外部访问 Pod 地址&#xff1f;常见的网络穿透方案NodePortLoadBalancerIngressPort-ForwardHostNetworkkt-connect&#xff1a;为开发调试提供便捷穿透 实践建议与注意事项各方案对比表总…

深入理解 Apache Dagster:数据管道编排实战指南

本文系统介绍了 Apache Dagster 的核心概念与实践方法&#xff0c;涵盖环境搭建、管道定义、运行调试及高级功能&#xff0c;帮助开发者快速掌握这一现代化数据编排工具&#xff0c;提升数据工程效率。 1. 背景与核心优势 随着数据驱动应用的复杂化&#xff0c;传统工具在可维…

Minio集群部署

Minio集群部署 资源规划 IP服务规划配置192.168.116.138minio-116核32G磁盘10T192.168.116.139minio-216核32G磁盘10T192.168.116.140minio-316核32G磁盘10T192.168.116.141minio-416核32G磁盘10T192.168.116.128nginx代理8核16G磁盘500G 基本环境配置 下面命令minio4台设备…

操作系统高频(六)linux内核

操作系统高频&#xff08;六&#xff09;linux内核 1.内核态&#xff0c;用户态的区别⭐⭐⭐ 内核态和用户态的区别主要在于权限和安全性。 权限&#xff1a;内核态拥有最高的权限&#xff0c;可以访问和执行所有的系统指令和资源&#xff0c;而用户态的权限相对较低&#x…

强大而易用的JSON在线处理工具

强大而易用的JSON在线处理工具&#xff1a;程序员的得力助手 在当今的软件开发世界中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;已经成为了数据交换的通用语言。无论是前端还是后端开发&#xff0c;我们都经常需要处理、验证和转换JSON数据。今天&a…

【学习记录】pytorch载入模型的部分参数

需要从PointNet网络框架中提取encoder部分的参数&#xff0c;然后赋予自己的模型。因此&#xff0c;需要从一个已有的.pth文件读取部分参数&#xff0c;加载到自定义模型上面。做了一些尝试&#xff0c;记录如下。 关于模型保存与载入 torch.save(): 使用Python的pickle实用程…

【蓝桥杯14天冲刺课题单】Day 8

1.题目链接&#xff1a;19714 数字诗意 这道题是一道数学题。 先考虑奇数&#xff0c;已知奇数都可以表示为两个相邻的数字之和&#xff0c;2k1k(k1) &#xff0c;那么所有的奇数都不会被计入。 那么就需要考虑偶数什么情况需要被统计。根据打表&#xff0c;其实可以发现除了…

鸿蒙ArkTS开发:微信/系统来电通话监听功能实现

本文将介绍如何在鸿蒙应用中使用ArkTS实现通话监听和录音功能&#xff0c;利用harmony-utils工具库简化开发流程。 工具库地址 一、功能概述 本实现包含以下核心功能&#xff1a; 通话状态监听&#xff1a;检测来电、去电和通话中状态 音频流监控&#xff1a;通过麦克风使用…

NFS 重传次数速率监控

这张图展示的是 NFS 重传次数速率监控&#xff0c;具体解释如下&#xff1a; 1. 指标含义 监控指标 node_nfs_rpc_retransmissions_total 统计 NFS&#xff08;网络文件系统&#xff09;通信中 RPC&#xff08;远程过程调用&#xff09;的重传次数&#xff0c;rate(node_nfs_…

【 <二> 丹方改良:Spring 时代的 JavaWeb】之 Spring Boot 中的国际化:支持多语言的 RESTful API

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、开篇整…

黑帽SEO之搜索引擎劫持-域名劫持原理分析

问题起源 这是在《Web安全深度剖析》的第二章“深入HTTP请求流程”的2.3章节“黑帽SEO之搜索引擎劫持”提到的内容&#xff0c;但是书中描述并不详细&#xff0c;没有讲如何攻击达到域名劫持的效果。 书中对SEO搜索引擎劫持的现象描述如下&#xff1a;直接输入网站的域名可以进…

theos工具来编译xcode的swiftUI项目为ipa文件

Theos 是一个开源的开发工具套件&#xff0c;主要用于为 iOS/macOS 平台开发和编译 越狱插件&#xff08;Tweaks&#xff09;、动态库、命令行工具等。它由 Dustin Howett 创建&#xff0c;并被广泛用于越狱社区的开发中。但这里我主要使用它的打包ipa功能&#xff0c;因为我的…

25.4.1学习总结【Java】

动态规划题 2140. 解决智力问题https://leetcode.cn/problems/solving-questions-with-brainpower/ 给你一个下标从 0 开始的二维整数数组 questions &#xff0c;其中 questions[i] [pointsi, brainpoweri] 。 这个数组表示一场考试里的一系列题目&#xff0c;你需要 按顺…

计算机网络知识点汇总与复习——(二)物理层

Preface 计算机网络是考研408基础综合中的一门课程&#xff0c;它的重要性不言而喻。然而&#xff0c;计算机网络的知识体系庞大且复杂&#xff0c;各类概念、协议和技术相互关联&#xff0c;让人在学习时容易迷失方向。在进行复习时&#xff0c;面对庞杂的的知识点&#xff0c…

string的底层原理

一.构造函数 我们来看一下&#xff0c;string的底层就是一个字符型指针和一个size来表示string的大小&#xff0c;capacity来表示分配的内存大小。 我们来看我们注释掉的第一个构造函数&#xff0c;我们是通过初始化列表来初始化size的大小&#xff0c;再通过size的大小来初始化…

Python FastAPI + Celery + RabbitMQ 分布式图片水印处理系统

FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理 首先创建项目结构&#xff1a; c:\Users\Administrator\Desktop\meitu\ ├── app/ │ ├── __init__.py │ ├── main.py │ ├── celery_app.py │ ├── tasks.py │ └── config.py…

【蓝桥杯】每日练习 Day18

目录 前言 动态求连续区间和 分析 代码 数星星 分析 代码 星空之夜 分析 代码 前言 接下来是今天的题目&#xff08;本来是有四道题的但是有一道题是前面讲过&#xff08;逆序数的&#xff0c;感兴趣的小伙伴可以去看我归并排序的那一篇&#xff09;的我就不再过多赘…

基于银河麒麟桌面服务器操作系统的 DeepSeek本地化部署方法【详细自用版】

一、3种方式使用DeepSeek 1.本地部署 服务器操作系统环境进行,具体流程如下(桌面环境步骤相同): 本例所使用银河麒麟高级服务器操作系统版本信息: (1)安装ollama 方式一:按照ollama官网的下载指南,执行如下命令: curl -fsSL https://ollama.com/install.sh | sh方…

Python入门(7):Python序列结构-字典

字典Dictionary 字典(dictionary)和列表类似&#xff0c;也是可变序列&#xff0c;不过与列表不同&#xff0c;它是无序的可变序列&#xff0c;保存的为容是以“键-值对”的形式存放的。 Python 中的字典相当于 Java 或者 C中的 Map 对象。在C#中,就是Dictionary<TKey,TVa…