【Python】信用评级项目——个人评分A卡制作

序言

    评分卡模型通常有四个类型:
    A 卡, 又称为申请者评级模型,主要应用于相关融资类业务中新客户的主体评级,适用于个人 和机构融资主体。
    B 卡,又称为行为评级模型,主要应用于相关融资类业务中存量客户在存续期内的理, 如对客户 可能出现的逾期、延期等行为进行预测,仅适用于个人融资主体。
    C 卡,又称为催收评级 模型,主要应用于相关融资类业务中存量客户是否需要催收的预测管理,仅适用于个人融资 主体。
    F卡,又称为欺诈评级模型, 主要应用于相关融资类业务中新客户可能存在的 欺诈行为的预测管理,适用于个人和机构融资主体。 本章讲述的是主体评级模型的开发过程。
    本次主要利用kaggle2011年的竞赛数据(信贷数据):Give Me Some Credit,来进行个人评分A卡的制作,评分卡模型的评判指标是AUC。

1 数据探索

1.1 数据初描述

    在开始之前,先来看看数据的描述,如下图所示:在这里插入图片描述
     英文版的看上去不是那么的舒服,翻译一个中文版本如下:

列名含义
SeriousDlqin2yrs出现90天或更长时间的逾期行为(即定义好坏客户)
RevolvingUtilizationOfUnsecuredLines贷款以及信用卡可用额度与总额度比例
age借款人借款年龄
NumberOfTime30-59DaysPastDueNotWorse过去两年内出现35-59天逾期但是没有发展的更坏的次数
DebtRatio每月偿还债务,赡养费,生活费用除以月总收入
MonthlyIncome月收入
NumberOfOpenCreditLinesAndLoans开放式贷款和信贷数量
NumberOfTimes90DaysLate借款者有90天或更高逾期的次数
NumberRealEstateLoansOrLines抵押贷款和房地产贷款数量,包括房屋净值信贷额度
NumberOfTime60-89DaysPastDueNotWorse过去两年内出现60-89天逾期但是没有发展的更坏的次数
NumberOfDependents家庭中不包括自身的家属人数(配偶,子女等)

     这里对数据整体做一个描述性分析,从结果中可以解读到月收入和家属人数是有缺失值的,而且有三个变量出现了相同最大值,需要对数据进行深入探查,结果见下截图。
在这里插入图片描述
    对所有数据进行重复值检测发现有304个记录重复,查询结果见下截图:
在这里插入图片描述
    检查各变量的缺失值占比,结果见下图,月收入和家属人数两个变量的缺失值占比分别为19.82%、2.62%。

变量缺失值占比
SeriousDlqin2yrs0.000000
RevolvingUtilizationOfUnsecuredLines0.000000
age0.000000
NumberOfTime30_59DaysPastDueNotWorse0.000000
DebtRatio0.000000
MonthlyIncome0.198207
NumberOfOpenCreditLinesAndLoans0.000000
NumberOfTimes90DaysLate0.000000
NumberRealEstateLoansOrLines0.000000
NumberOfTime60_89DaysPastDueNotWorse0.000000
NumberOfDependents0.026160

    查看缺失值在数据中的整体分布,见下图:
在这里插入图片描述
    对数据进行异常值检测,发现第5、6个变量的数据存在明显的异常值。结果见下截图。
在这里插入图片描述

1.2 数据预处理

    对于数据探索,得知数据主要有缺失值、重复值、异常值等问题。这里首先将这些问题处理完后在进入后续的操作。
    缺失值的处理
    缺失值处理方法的选择,主要依据是业务逻辑和缺失值占比,在对预测结果的影响尽可能小的情况下,对缺失值进行处理以满足算法需求,所以要理解每个缺失值处理方法带来的影响,下面的缺失值处理方法没有特殊说明均是对特征(列)的处理:

缺失值占比处理方案
占比较多:如80%以上删除缺失值所在的列
占比一般:如30%-80%将缺失值作为单独的一个分类;如果特征是连续的,则其他已有值分箱;如果特征是分类的,考虑其他分类是否需要重分箱
占比少:10%-30%多重插补,认为若干特征之间有相关性,则可以相互预测缺失值;需满足的假设:MAR:Missing At Random:数据缺失的概率仅和已观测的数据相关,即缺失的概率与未知的数据无关,即与变量的具体数值无关;迭代(循环)次数可能的话超过40,选择所有的变量甚至额外的辅助变量
占比较少:10%以下单一值替换,如中位数,众数

    决策树中可以将缺失值处理融合到算法里:按比重分配这里的占比并不是固定的,例如缺失值占比只有5%,仍可以用第二种方法,主要依据业务逻辑和算法需求。
    对于信用评分卡来说,由于所有变量都需要分箱,故这里缺失值作为单独的箱子即可对于最后一列NumberOfDependents,缺失值占比只有2.56%,作为单独的箱子信息不够,故做单一值填补,这列表示家庭人口数,有右偏的倾向,且属于计数的数据,故使用中位数填补这里没必要进行多重插补。
    本数据的缺失值经过处理后,检查到全部数据一无缺失值,结果如下图:
在这里插入图片描述
    异常值的处理:删除所在的行;替换成缺失值,与缺失值一起处理;盖帽法处理。
    结合业务逻辑和算法需求判断是否需要处理异常值以及如何处理,一般情况下盖帽法即可,即将极端异常的值改成不那么异常的极值,当然一些算法例如决策树中连续变量的异常值也可以不做处理。
    在评分卡项目中,每个变量都会进行分箱处理,所以对异常值的容忍度比较高,为提升业务效率,不做特殊处理。
    变量的分箱处理
    在进行变量分箱处理前,需要厘清两个WOE(证据权重:与违约比例同方向变动,可以看到不同分箱的重 要性 )、IV(信息值:表示变量的重要性)。两个指标的计算公式:
W O E = ln ⁡ y P c t G o o d y P c t B a d × 100 WOE =\ln\frac{yPctGood}{yPctBad} \times100 WOE=lnyPctBadyPctGood×100
I V = ∑ k = 1 N ( y P c t G o o d − y P c t B a d ) × ln ⁡ y P c t G o o d y P c t B a d IV =\sum_{k=1}^N(yPctGood-yPctBad)\times \ln\frac{yPctGood}{yPctBad} IV=k=1N(yPctGoodyPctBad)×lnyPctBadyPctGood
    IV指标通常用来选取最终模型变量,主要有以下阈值:

阈值意义
IV <0.02对预测几乎无帮助
0.02<= IV < 0.1具有一定帮助
0.1 <= IV <0.3对预测有较大帮助
IV >= 0.3具有很大帮助

    变量分箱的处理利用决策树来进行,具体到每一个变量的操作这里就不一一展示了。这里给出变量 N u m b e r O f D e p e n d e n t s NumberOfDependents NumberOfDependents分箱后得到的WOE、IV指标的结果:

在这里插入图片描述
    所有变量的 I V IV IV值:

变量 I V IV IV
RevolvingUtilizationOfUnsecuredLines1.1487
NumberOfTimes90DaysLate0.8738
NumberOfTimes90DaysLate0.8738
NumberOfTime30_59DaysPastDueNotWorse0.7576
NumberOfTime60_89DaysPastDueNotWorse0.5989
age0.2523
NumberOfOpenCreditLinesAndLoans0.1108
DebtRatio0.0889
MonthlyIncome0.0856
NumberRealEstateLoansOrLines0.0606
NumberOfDependents0.0339

    对各个指标的信息值大小进行排序的条形图如下:
在这里插入图片描述

    从上面的条形图我们可以选取信息值较大的变量进入后期的模型训练,有助于提高模型的效果。

2 数据模型格式化

2.1 变量的筛选

    在上图中,可以看到各个变量的 I V IV IV值在0.02以上,变量对评分卡制作的帮助都非常大,所以全部变量都用上。

2.2 w o e woe woe值替换数据

    对选取的变量进行 w o e woe woe变换,结果如下:

变量行1行2
age_woe-0.138500-0.324900
NumberOfTime30_59DaysPastDueNotWorse_woe-1.6142000.540800
DebtRatio_woe-0.5947000.111700
MonthlyIncome_woe0.339700-0.441700
NumberOfOpenCreditLinesAndLoans_woe0.1557000.155700
NumberOfTimes90DaysLate_woe0.3890000.389000
NumberRealEstateLoansOrLines_woe-0.590400-0.241300
NumberOfTime60_89DaysPastDueNotWorse_woe0.2874000.287400
NumberOfDependents_woe-0.206800-0.100100

3 建立模型

    对经过 w o e woe woe变换的数据添加监督列(分类列),并进行测试集与训练集的划分。训练集在逻辑回归下得到的结果如下:
G e n e r a l i z e d L i n e a r M o d e l R e g r e s s i o n R e s u l t s Generalized Linear Model Regression Results GeneralizedLinearModelRegressionResults

Dep. Variable:SeriousDlqin2yrsNo. Observations:104573
Model:GLMDf Residuals:104562
Model Family:BinomialDf Model:10
Link Function:logitScale:1.0000
Method:IRLSLog-Likelihood:-19183.
Date:Sat, 19Oct 2019Deviance:
Time:18:29:28Pearson chi2:9.05e+04

     P e a r s o n c h i 2 = 0.0009 Pearson chi2=0.0009 Pearsonchi2=0.0009,模型的拟合优度通过检验。模型的结构如下:

变量coefstd errzP>abs(z)[0.025 0.975]
const2.59020.015172.1050.0002.561
RevolvingUtilizationOfUnsecuredLines_woe0.59470.01441.2720.0000.566
age_woe0.42970.03213.5100.0000.367
NumberOfTime30_59DaysPastDueNotWorse_woe0.50730.01632.4110.0000.477
DebtRatio_woe0.70510.05014.0760.0000.607
MonthlyIncome_woe0.18210.0493.6900.0000.085
NumberOfOpenCreditLinesAndLoans_woe0.00590.0410.1420.887-0.075
NumberOfTimes90DaysLate_woe0.53020.01438.2540.0000.503
NumberRealEstateLoansOrLines_woe0.53830.0628.6420.0000.416
NumberOfTime60_89DaysPastDueNotWorse_woe0.37490.01722.1250.0000.342
NumberOfDependents_woe0.26240.0773.3880.0010.111

    其中有两个变量的 Z Z Z统计量 P P P值比较大。进一步计算每个预测变量的vif值,查看是否存在共线性:

变量 v i f vif vif
RevolvingUtilizationOfUnsecuredLines_woe1.526123
age_woe1.206090
NumberOfTime30_59DaysPastDueNotWorse_woe1.355447
DebtRatio_woe1.182366
MonthlyIncome_woe1.122016
NumberOfOpenCreditLinesAndLoans_woe1.182690
NumberOfTimes90DaysLate_woe1.421802
NumberRealEstateLoansOrLines_woe1.192780
NumberOfTime60_89DaysPastDueNotWorse_woe1.339235
NumberOfDependents_woe1.129460

每个预测变量的vif值都小于10,说明预测变量之间不存在多重共线性。

4 生成评分卡

    根据逻辑回归模型和之前筛选得到的列表,给定参数,生成评分卡,调整参数,使得评分卡分数范围满足需求。评分卡如下:

CharacteristicAttributePoints
RevolvingUtilizationOfUnsecuredLines(-0.001, 0.132]118
RevolvingUtilizationOfUnsecuredLines(0.132, 0.301]94
RevolvingUtilizationOfUnsecuredLines(0.301, 0.495]74
RevolvingUtilizationOfUnsecuredLines(0.495, 0.698]55
RevolvingUtilizationOfUnsecuredLines(0.698, 0.863]38
RevolvingUtilizationOfUnsecuredLines(0.863, 1.003]24
RevolvingUtilizationOfUnsecuredLines(1.003, 50708.0]-9
age(-0.001, 36.5]54
age(36.5, 43.5]60
age(43.5, 55.5]65
age(55.5, 62.5]77
age(62.5, 109.0]94
NumberOfTime30_59DaysPastDueNotWorse(-0.001, 0.5]86
NumberOfTime30_59DaysPastDueNotWorse(0.5, 1.5]40
NumberOfTime30_59DaysPastDueNotWorse(1.5, 2.5]18
NumberOfTime30_59DaysPastDueNotWorse(2.5, 3.5]5
NumberOfTime30_59DaysPastDueNotWorse(3.5, 98.0]-9
DebtRatio(-0.001, 1.3e-05]53
DebtRatio(1.3e-05, 0.0163]99
DebtRatio(0.0163, 0.423]73
DebtRatio(0.423, 0.654]59
DebtRatio(0.654, 3.973]43
DebtRatio(3.973, 329664.0]78
MonthlyIncome(-0.001, 930.5]73
MonthlyIncome(930.5, 3332.5]64
MonthlyIncome(3332.5, 5320.5]66
MonthlyIncome(5320.5, 6643.5]69
MonthlyIncome(6643.5, 3008750.0]72
MonthlyIncomenan71
NumberOfOpenCreditLinesAndLoans(-0.001, 0.5]68
NumberOfOpenCreditLinesAndLoans(0.5, 1.5]68
NumberOfOpenCreditLinesAndLoans(1.5, 3.5]68
NumberOfOpenCreditLinesAndLoans(3.5, 13.5]69
NumberOfOpenCreditLinesAndLoans(13.5, 58.0]69
NumberOfTimes90DaysLate(-0.001, 0.5]81
NumberOfTimes90DaysLate(0.5, 1.5]4
NumberOfTimes90DaysLate(1.5, 98.0]-24
NumberRealEstateLoansOrLines(-0.001, 0.5]60
NumberRealEstateLoansOrLines(0.5, 3.5]76
NumberRealEstateLoansOrLines(3.5, 54.0]49
NumberOfTime60_89DaysPastDueNotWorse(-0.001, 0.5]75
NumberOfTime60_89DaysPastDueNotWorse(0.5, 1.5]26
NumberOfTime60_89DaysPastDueNotWorse(1.5, 98.0]4
NumberOfDependents(-0.001, 0.5]71
NumberOfDependents(0.5, 1.5]67
NumberOfDependents(1.5, 2.5]65
NumberOfDependents(2.5, 3.5]64
NumberOfDependents(3.5, 20.0]61

5 评分卡模型评估

    通过 k − s k-s ks曲线, r o c roc roc曲线来对模型进行评估:
在这里插入图片描述
在这里插入图片描述
    通过 k − s k-s ks曲线知ks值为0.8,最优阈值为0.5631, r o c roc roc曲线的auc值也高达0.86,说明模型良好。(这里选取两个指标来对比评估模型)

5 小结

    不仅仅是在评分卡模型的制作中,在任何数据挖掘工作开展前,对数据进行清洗、格式化、校对的工作必不可少。数据的质量决定了模型优度的上限,一个好的模型可不仅仅得益于数据分析师对模型的把握深度。
    数据的清洗格式化包含数据异常值处理、缺失值处理、时间数据的处理、文本字符型数据的处理、离散数据的处理、以及根据业务要求可能需要进行的数据变换以及分箱等。
    总的来说就是,建模前要把数据处理成建模算法的“菜”。不同的业务问题需要匹配相应的算法来完成建模,但算法需要吃干净整洁的数据,才能有效高效的为业务效力。~~~

资源链接
评分卡流程https://download.csdn.net/my/uploads
  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落花生@u

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值