基于 Toad 的评分卡模型全流程详解(内含 Python 源码)

news2024/11/19 1:29:53

不知不觉中,Python 已经在短短几年内一跃成为最热门的编程语言之一,尤其是在数据科学、人工智能和机器学习领域。这除了因为Python相对简单易学,可读性高之外,也有很大一部分原因是因为Python有着良好的开源生态从而产生了许多强大的第三方库,这些库可供直接调用,为开发人员的工作提供了极大的便利。

风控领域亦是如此,以最常用、最经典的信用风险评分卡模型为例,第三方的库就有谢士晨博士开发的Scorecardpy以及今天我们要重点介绍的toad。

toad是针对风险评分卡的建模而开发的工具包,其功能全面,性能强大,从数据探索EDA、特征筛选、特征分箱、WOE变换,到建模、模型评估、转换分数,对评分卡模型的各个步骤都做了完整的封装,极大的简化了建模的复杂程度,深受从业人员的喜爱。

下面我们将根据建模实际的流程,分布为大家介绍toad包的各种功能。

在开始之前先简单说一下toad库的安装与升级,和其他的库一样,直接使用pip即可:

  • 安装:pip install toad

  • 升级:pip install --upgrade toad

文章目录

    • 技术提升
    • 0.导入库与数据读取
    • 1.EDA数据探索
    • 2.使用toad高效分箱并进行特征筛选
    • 3.WOE转化
    • 4.逐步回归特征筛选
    • 5.建模与模型评估
    • 6.转换评分

技术提升

技术要学会分享、交流,不建议闭门造车。

本文由技术群粉丝推荐分享,问题咨询、资料获取、数据、技术交流提升,均可加交流群获取,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友

方式①、添加微信号:dkl88191,备注:来自CSDN
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

0.导入库与数据读取

可以看到,演示数据共有50000条数据,16个特征,包含14个特征变量,一列主键和一列标签(Defaulter)列。其中有若干个离散型变量和连续性变量,且有一定的缺失值。为了后续模型能够检验,我们使用sklearn里的train_test_split将数据划分为训练集(30000条)与测试集(20000条)。

1.EDA数据探索

(1)toad.detect(dataframe)

用于检测数据情况(EDA),方便我们对数据有一个总体的印象。输出每列特征的统计性特征和其他信息,主要的信息包括:缺失值、unique values、数值变量的平均值、离散型变量的众数等。如下面的cell,可以得到以下信息:

  • 坏客户的占比为16.2%:Defaulter的mean为0.162;

  • 部分特征有缺失值,且缺失值不等:注意missing列;

  • 数值型变量和离散型变量有若干个,部分离散型变量的unique values较多,有10多个甚至61个:离散型变量的unique列。

(2)toad.quality(dataframe, target=‘target’, iv_only=False)

输出每个变量的iv值,gini,entropy,和unique values,结果以iv值排序。'target’为目标列,'iv_only’决定是否只输出iv值。

注意:

  • 对于数据量大或高维度数据,建议使用iv_only=True

  • 要去掉主键,日期等高unique values且不用于建模的特征

2.使用toad高效分箱并进行特征筛选

(1)toad.selection.select(dataframe, target=‘target’, empty=0.9, iv=0.02, corr=0.7, return_drop=False, exclude=None)

根据缺失值占比,iv值,和高相关性进行变量筛选,各参数含义为:

  • empty=0.9:若变量的缺失值大于0.9则被删除;

  • iv=0.02:若变量的iv值小于0.02则被删除;

  • corr=0.7:若两个变量的相关性高于0.7时,iv值低的变量则被删除;

  • return_drop=False:若为True,function将返回被删去的变量列;

  • exclude=None:明确不被删去的列名,输入为list格式;

如下面的cell,没有变量由于缺失值高被删除,3个变量因为低iv值被删除,1个相关性高的变量被删除。从14个特征中选出了10个变量。

在实际工作中,只需要根据需求调整各个参数值,即可完成变量的初筛,对于有特殊含义需要保留但不满足筛选要求的变量,也可以在exclude里保留。

(2)分箱toad.transform.Combiner

toad的分箱功能支持数值型数据和离散型分箱,集成了各种常用的分箱方法,包括卡方分箱(默认)、决策树分箱、等频分箱、等距分箱、最优分箱等。

toad.transform.Combiner 是用来分箱的class,具体分箱步骤如下:

  • 初始化:c = toad.transform.Combiner()

  • 训练分箱:c.fit(dataframe, y = ‘target’, method = ‘chi’, min_samples = None, n_bins = None, empty_separate = False)

其中,

y:目标列

Method:分箱方法,支持’chi’ (卡方分箱),‘dt’ (决策树分箱),‘kmean’,‘quantile’ (等频分箱),‘step’(等步长分箱)等

min_samples:每箱至少包含样本量,可以是数字或者占比

n_bins:箱数,若无法分出这么多箱数,则会分出最多的箱数

empty_separate:是否将空箱单独分开

  • 查看分箱节点:c.export()

  • 手动调整分箱:c.load(dict)

  • apply分箱结果:c.transform(dataframe, labels=False)

  • Labels:是否将分箱结果转化成箱标签。False时输出0,1,2…(离散变量根据占比高低排序),True输出(-inf, 0], (0,10], (10, inf)。

注意:记得删去不需要分箱的列,比如是ID列和时间列

(3)观察分箱:toad.plot.bin_plot(dataframe, x = None, target = ‘target’)

toad.plot的module提供了一部分的可视化功能,帮助调整分箱节点。

  • x:需要观察的特征

  • target:目标列

bar代表了样本量占比,红线代表了正样本占比(e.g. 坏账率)

(4)调整分箱:c.update(dict)

update后会更新被修改的箱

3.WOE转化

WOE转化在分箱调整好之后进行,步骤如下:

  • 用调整好的Combiner转化数据:c.transform(dataframe, labels=False)

只会转化被分箱的变量

  • 初始化woe transer:transer = toad.transform.WOETransformer()

  • **fit_transform:**transer.fit_transform(dataframe, target, exclude = None)训练并输出woe转化的数据,用于转化train数据

target:目标列数据(非列名)

Exclude:不需要被WOE转化的列

注意:会转化所有列,包括未被分箱transform的列,通过’exclude’删去不要WOE转化的列,特别是target列

  • 根据训练好的transer,转化test数据:transer.transform(dataframe)

4.逐步回归特征筛选

toad.selection.stepwise(dataframe, target=‘target’, estimator=‘ols’, direction=‘both’, criterion=‘aic’, max_iter=None, return_drop=False, exclude=None)

其中,

  • estimator: 用于拟合的模型,支持’ols’, ‘lr’, ‘lasso’, ‘ridge’

  • direction: 逐步回归的方向,支持’forward’, ‘backward’, ‘both’(推荐)

  • criterion: 评判标准,支持’aic’, ‘bic’, ‘ks’, ‘auc’

  • max_iter: 最大循环次数

  • return_drop: 是否返回被剔除的列名

  • exclude: 不需要被训练的列名,比如ID列和时间列

Tip:经验证,direction = 'both’效果最好。estimator = 'ols’以及criterion = 'aic’运行速度快且结果对逻辑回归建模有较好的代表性。

toad.metrics.PSI(df_train, df_test)

输出每列特征的PSI,可以用于检验WOE转化后的特征稳定性

5.建模与模型评估

首先使用LR建模:

下面评估模型的结果,风控模型常用的评分指标有KS,AUC,PSI等。我们可以用toad快速输出这些指标:

另外,toad还提供了KS bucket功能,输出模型预测分箱后评判信息,包括每组的分数区间,样本量,坏账率,KS等。

toad.metrics.KS_bucket(predicted_proba, y_true, bucket=10, method = ‘quantile’)

  • bucket:分箱的数量

  • method:分箱方法,建议用’quantile’(等人数),或’step’ (等分数步长)

bad_rate为每组坏账率:

  • 组之间的坏账率差距越大越好

  • 可以用于观察是否有跳点

  • 可以用与找最佳切点

  • 可以对比

6.转换评分

toad.ScoreCard(combiner = {}, transer = None, pdo = 60, rate = 2, base_odds = 20, base_score = 750, card = None, C=0.1,kwargs)

逻辑回归模型转标准评分卡,支持传入逻辑回归参数,进行调参。

  • combiner:传入训练好的toad.Combiner对象

  • transer:传入先前训练的toad.WOETransformer对象

  • pdo、rate、base_odds、base_score:e.g. pdo=60, rate=2, base_odds=20,base_score=750

实际意义为当比率为1/20,输出基准评分750,当比率为基准比率2倍时,基准分下降60分

  • card: 支持传入专家评分卡

  • kwargs: 支持传入逻辑回归参数(参数详见sklearn.linear_model.LogisticRegression)

注意:评分卡在fit时使用WOE转换后的数据来计算最终的分数,分数一旦计算完成,便无需WOE值,可以直接使用原始数据进行评分。

输出结果:

至此,我们就用toad快速完成了一个评分卡模型的全流程,可以说是非常方便了,没有使用太多第三方库,除了基本的numpy,pandas就只用到了toad和一点点sklearn,这也可以看出toad确实将评分卡的全流程都进行了完整的封装,足以满足大部分工作的需求。

本文以介绍toad库的功能为主要目的,展示了评分卡建模的基础流程,实际工作中只需要根据数据的特点和工作的需求进行流程和参数的一些调整即可。

本文参考资料:

toad官方github主页

https://github.com/amphibian-dev/toad

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

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

相关文章

Golang如何优雅接入多个远程配置中心?

本文基于viper实现了apollo多实例快速接入,授人以渔,带着大家读源码,详解实现思路,封装成自己的工具类并且开源。 前言 viper是适用于go应用程序的配置解决方案,这款配置管理神器,支持多种类型、开箱即用、…

livedata+ lambda遇到的坑

首先抛出个异常FATAL EXCEPTION: mainProcess: com.lion.media, PID: 5513java.lang.IllegalArgumentException: Cannot add the same observer with different lifecyclesat androidx.lifecycle.LiveData.observe(LiveData.java:199)这是在livedata.observe(this) {// ...}触发…

Android studio Logcat 新版使用命令指南 常用命令集合

只过滤自己的包名 package:mine 过滤自己的包名且只看error级别日志 package:mine level:error 指定消息内容包含12288 message:12288 指定内容不包含12288 -message:12288 其中有 message: 、message~、-message和 -message~ -:对当前标签的过滤结果取反…

智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》

智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码)》 目录 智能驾驶 车牌检测和识别(三)《CRNN和LPRNet实现车牌识别(含车牌识别数据集和训练代码&#xf…

2022个人年度总结:拒绝无效努力,实现破圈成长。

在从毕业一直到现在,我都会写一篇关于自己的从技术、商业、人情世故以及未来展望的博文,以至于归纳每个时期的自己, 走在互联网开发的边缘,不得不抽出时间鞭策自己学习新知识,未知的知识是 充满好奇的, 就好…

第五章 ArcGIS数据编辑

文章目录第一节 创建新要素方法1 开始编辑、保存编辑、停止编辑2 捕捉的使用3 创建点、线、面4 编辑器中工具的使用5 根据其他要素创建要素6 注记要素编辑和修改第二节 属性编辑常见方法1 属性编辑2 字段计算器3 字段计算器的特殊应用4 计算几何第三节 模版编辑方法1 定义模版2…

Spring学习笔记(一)【BeanUtils.copyProperties方法】

Spring下的BeanUtils.copyProperties方法是深拷贝还是浅拷贝? 一、浅拷贝深拷贝的理解 简单地说,拷贝就是将一个类中的属性拷贝到另一个中,对于BeanUtils.copyProperties来说,必须保证属性名和类型是相同的,因为它是根…

Windows下安装Python和配置easygui

一、需求说明需要学习Python内容,或者是运行Python程序,需要在Windows系统下进行安装配置Python的相关环境,以便让程序能够正常运行使用。二、安装Python2.1、下载Python安装包打开Python官网下载自己Windows系统需要的Python版本选择【Downl…

大宇无限将全部业务系统都部署在亚马逊云科技上

随着移动互联网的高速发展,人们对精神文化内容消费的追求不断提高,利用互联网技术,便捷地享受资讯内容成为了当代人的诉求。为了实现这个目标,大宇无限面临的首要挑战是如何利用大数据系统高效地分析数据、了解用户的消费行为和国…

1、数据库安装超详细教程(MySql5.0版本)

1.1、SQL概述 SQL,一般发音为sequel,SQL的全称Structured Query Language),SQL用来和数据库打交道,完成和数据库的通信,SQL是一套标准。但是每一个数据库都有自己的特性别的数据库没有,当使用这个数据库特性相关的功能…

Quarkus入门体验,22ms启动一个Web服务

简介 Quarkus是类似于Spring Boot的框架,可以方便大家进行Java开发。利用GraalVM的魔力,能更好的适应云原生的场景,极快的启动速度。 创建项目 在IDEA就直接有创建Quarkus项目的初始化工具,直接根据自己需要填好即可&#xff0…

分享一个可以看历史影像的网站

概述 众所周知,由于某些原因,大家以前经常用的历史地图已经看不了了,那么是否有替代的资源呢,答案是肯定的,而且这个网站的所有者大家都非常的熟悉——Esri,该网站名为World Imagery Wayback,这…

【模型↔关系思考法】如何在一个全新的、陌生的领域快速成为专家?模仿 + 一万小时定律 + 创新...

核心基础:形成模型 行业特性,行业名词术语(模型),行业前规则,行业风险 首先搞懂行业内独有的一些专业名词术语(建立“模型”)的含义,这些是基础。 比如餐饮行业的翻台率、开台率,电商的GMV、SKU、SPU; 通过互联网文章,网站,了解行业的趋势和动向、竞品分析等。 了…

NSS_Round#7部分wp

Web ec_RCE 源码: <!-- A EZ RCE IN REALWORLD _ FROM CHINA.TW --> <!-- By 探姬 --> <?PHPif(!isset($_POST["action"]) && !isset($_POST["data"]))show_source(__FILE__);putenv(LANGzh_TW.utf8); $action $_POST["a…

Jenkins入门(二)Jenkins安装及自动构建部署

一、安装环境 1. 机器要求&#xff1a; 256 MB 内存&#xff0c;建议大于 512 MB 10 GB 的硬盘空间&#xff08;用于 Jenkins 和 Docker 镜像&#xff09; 需要安装以下软件&#xff1a; Java 8 ( JRE 或者 JDK 都可以) 2. 安装JDK 检索可用包 yum search java|grep jd…

Java之JDBC-ResultSet(结果集)

之前的dml语句都返回值都是int表示有改动的行数 那么Select可是要展示数据的 SELECT查询的结果 通过这个ResultSet遍历 然后通过next方法来一行行读取数据 类似于迭代器(肯定不是迭代器) 里面还包含获得的数据元素 相当于这个既包含元素&#xff0c;还能迭代自己的元素 具体你…

[Vulnhub] DC-5

下载链接&#xff1a;https://download.vulnhub.com/dc/DC-5.zip 同DC-4 这个靶机也是只有一个flag 不过官方描述说这个可能提高了一点点难度 官方描述&#xff1a; 据我所知&#xff0c;只有一个可利用的入口点可以进入&#xff08;也没有 SSH&#xff09;。这个特定的入口点…

RocketMQ 原理介绍及详细安装教程

一、为什么选择RocketMQ Apache RocketMQ 自诞生以来&#xff0c;因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨&#xff0c;RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案&#xff0c;被广泛…

python使用pywin32库将ppt导出为高清图片

python使用pywin32库将ppt导出为高清图片 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、安装库 需要安装pywin32库 pip install pywin32二、代码原理 WPS高清图片导出需要会…

Fisco Bcos区块链四(WeBase结点前置服务)

文章目录区块链开荒技术文档&#xff1a;https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/index.html5、WeBASE节点前置服务1、前提条件2、拉取代码3. 编译代码4. 修改配置&#xff08;1&#xff09;进入dist目录&#xff08;2&#xff09;进入conf目录复制配置…