发布时间:2023-04-21 文章分类:电脑百科 投稿人:王小丽 字号: 默认 | | 超大 打印

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

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

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

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

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

文章目录

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

技术提升

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

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

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

0.导入库与数据读取

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

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

1.EDA数据探索

(1)toad.detect(dataframe)

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

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

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

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

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

注意:

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

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

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

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

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

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

(2)分箱toad.transform.Combiner

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

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

其中,

y:目标列

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

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

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

empty_separate:是否将空箱单独分开

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

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

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

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

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

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

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

update后会更新被修改的箱

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

3.WOE转化

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

只会转化被分箱的变量

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

Exclude:不需要被WOE转化的列

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

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

4.逐步回归特征筛选

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

其中,

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

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

toad.metrics.PSI(df_train, df_test)

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

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

5.建模与模型评估

首先使用LR建模:

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

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

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

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

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

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

bad_rate为每组坏账率:

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

6.转换评分

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

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

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

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

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

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

输出结果:

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

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

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

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

本文参考资料:

toad官方github主页

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