序言
评分卡模型通常有四个类型:
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%。
变量 | 缺失值占比 |
---|---|
SeriousDlqin2yrs | 0.000000 |
RevolvingUtilizationOfUnsecuredLines | 0.000000 |
age | 0.000000 |
NumberOfTime30_59DaysPastDueNotWorse | 0.000000 |
DebtRatio | 0.000000 |
MonthlyIncome | 0.198207 |
NumberOfOpenCreditLinesAndLoans | 0.000000 |
NumberOfTimes90DaysLate | 0.000000 |
NumberRealEstateLoansOrLines | 0.000000 |
NumberOfTime60_89DaysPastDueNotWorse | 0.000000 |
NumberOfDependents | 0.026160 |
查看缺失值在数据中的整体分布,见下图:
对数据进行异常值检测,发现第5、6个变量的数据存在明显的异常值。结果见下截图。
1.2 数据预处理
对于数据探索,得知数据主要有缺失值、重复值、异常值等问题。这里首先将这些问题处理完后在进入后续的操作。
缺失值的处理:
缺失值处理方法的选择,主要依据是业务逻辑和缺失值占比,在对预测结果的影响尽可能小的情况下,对缺失值进行处理以满足算法需求,所以要理解每个缺失值处理方法带来的影响,下面的缺失值处理方法没有特殊说明均是对特征(列)的处理:
缺失值占比 | 处理方案 |
---|---|
占比较多:如80%以上 | 删除缺失值所在的列 |
占比一般:如30%-80% | 将缺失值作为单独的一个分类;如果特征是连续的,则其他已有值分箱;如果特征是分类的,考虑其他分类是否需要重分箱 |
占比少:10%-30% | 多重插补,认为若干特征之间有相关性,则可以相互预测缺失值;需满足的假设:MAR:Missing At Random:数据缺失的概率仅和已观测的数据相关,即缺失的概率与未知的数据无关,即与变量的具体数值无关;迭代(循环)次数可能的话超过40,选择所有的变量甚至额外的辅助变量 |
占比较少:10%以下 | 单一值替换,如中位数,众数 |
决策树中可以将缺失值处理融合到算法里:按比重分配这里的占比并不是固定的,例如缺失值占比只有5%,仍可以用第二种方法,主要依据业务逻辑和算法需求。
对于信用评分卡来说,由于所有变量都需要分箱,故这里缺失值作为单独的箱子即可对于最后一列NumberOfDependents,缺失值占比只有2.56%,作为单独的箱子信息不够,故做单一值填补,这列表示家庭人口数,有右偏的倾向,且属于计数的数据,故使用中位数填补这里没必要进行多重插补。
本数据的缺失值经过处理后,检查到全部数据一无缺失值,结果如下图:
异常值的处理:删除所在的行;替换成缺失值,与缺失值一起处理;盖帽法处理。
结合业务逻辑和算法需求判断是否需要处理异常值以及如何处理,一般情况下盖帽法即可,即将极端异常的值改成不那么异常的极值,当然一些算法例如决策树中连续变量的异常值也可以不做处理。
在评分卡项目中,每个变量都会进行分箱处理,所以对异常值的容忍度比较高,为提升业务效率,不做特殊处理。
变量的分箱处理:
在进行变量分箱处理前,需要厘清两个WOE(证据权重:与违约比例同方向变动,可以看到不同分箱的重 要性 )、IV(信息值:表示变量的重要性)。两个指标的计算公式:
IV指标通常用来选取最终模型变量,主要有以下阈值:
阈值 | 意义 |
---|---|
IV <0.02 | 对预测几乎无帮助 |
0.02<= IV < 0.1 | 具有一定帮助 |
0.1 <= IV <0.3 | 对预测有较大帮助 |
IV >= 0.3 | 具有很大帮助 |
变量分箱的处理利用决策树来进行,具体到每一个变量的操作这里就不一一展示了。这里给出变量 分箱后得到的WOE、IV指标的结果:
所有变量的
值:
变量 | |
---|---|
RevolvingUtilizationOfUnsecuredLines | 1.1487 |
NumberOfTimes90DaysLate | 0.8738 |
NumberOfTimes90DaysLate | 0.8738 |
NumberOfTime30_59DaysPastDueNotWorse | 0.7576 |
NumberOfTime60_89DaysPastDueNotWorse | 0.5989 |
age | 0.2523 |
NumberOfOpenCreditLinesAndLoans | 0.1108 |
DebtRatio | 0.0889 |
MonthlyIncome | 0.0856 |
NumberRealEstateLoansOrLines | 0.0606 |
NumberOfDependents | 0.0339 |
对各个指标的信息值大小进行排序的条形图如下:
从上面的条形图我们可以选取信息值较大的变量进入后期的模型训练,有助于提高模型的效果。
2 数据模型格式化
2.1 变量的筛选
在上图中,可以看到各个变量的 值在0.02以上,变量对评分卡制作的帮助都非常大,所以全部变量都用上。
2.2 值替换数据
对选取的变量进行 变换,结果如下:
变量 | 行1 | 行2 | … |
---|---|---|---|
age_woe | -0.138500 | -0.324900 | … |
NumberOfTime30_59DaysPastDueNotWorse_woe | -1.614200 | 0.540800 | … |
DebtRatio_woe | -0.594700 | 0.111700 | … |
MonthlyIncome_woe | 0.339700 | -0.441700 | … |
NumberOfOpenCreditLinesAndLoans_woe | 0.155700 | 0.155700 | … |
NumberOfTimes90DaysLate_woe | 0.389000 | 0.389000 | … |
NumberRealEstateLoansOrLines_woe | -0.590400 | -0.241300 | … |
NumberOfTime60_89DaysPastDueNotWorse_woe | 0.287400 | 0.287400 | … |
NumberOfDependents_woe | -0.206800 | -0.100100 | … |
3 建立模型
对经过
变换的数据添加监督列(分类列),并进行测试集与训练集的划分。训练集在逻辑回归下得到的结果如下:
Dep. Variable: | SeriousDlqin2yrs | No. Observations: | 104573 |
Model: | GLM | Df Residuals: | 104562 |
Model Family: | Binomial | Df Model: | 10 |
Link Function: | logit | Scale: | 1.0000 |
Method: | IRLS | Log-Likelihood: | -19183. |
Date: | Sat, 19 | Oct 2019 | Deviance: |
Time: | 18:29:28 | Pearson chi2: | 9.05e+04 |
,模型的拟合优度通过检验。模型的结构如下:
变量 | coef | std err | z | P>abs(z) | [0.025 0.975] |
---|---|---|---|---|---|
const | 2.5902 | 0.015 | 172.105 | 0.000 | 2.561 |
RevolvingUtilizationOfUnsecuredLines_woe | 0.5947 | 0.014 | 41.272 | 0.000 | 0.566 |
age_woe | 0.4297 | 0.032 | 13.510 | 0.000 | 0.367 |
NumberOfTime30_59DaysPastDueNotWorse_woe | 0.5073 | 0.016 | 32.411 | 0.000 | 0.477 |
DebtRatio_woe | 0.7051 | 0.050 | 14.076 | 0.000 | 0.607 |
MonthlyIncome_woe | 0.1821 | 0.049 | 3.690 | 0.000 | 0.085 |
NumberOfOpenCreditLinesAndLoans_woe | 0.0059 | 0.041 | 0.142 | 0.887 | -0.075 |
NumberOfTimes90DaysLate_woe | 0.5302 | 0.014 | 38.254 | 0.000 | 0.503 |
NumberRealEstateLoansOrLines_woe | 0.5383 | 0.062 | 8.642 | 0.000 | 0.416 |
NumberOfTime60_89DaysPastDueNotWorse_woe | 0.3749 | 0.017 | 22.125 | 0.000 | 0.342 |
NumberOfDependents_woe | 0.2624 | 0.077 | 3.388 | 0.001 | 0.111 |
其中有两个变量的 统计量 值比较大。进一步计算每个预测变量的vif值,查看是否存在共线性:
变量 | |
---|---|
RevolvingUtilizationOfUnsecuredLines_woe | 1.526123 |
age_woe | 1.206090 |
NumberOfTime30_59DaysPastDueNotWorse_woe | 1.355447 |
DebtRatio_woe | 1.182366 |
MonthlyIncome_woe | 1.122016 |
NumberOfOpenCreditLinesAndLoans_woe | 1.182690 |
NumberOfTimes90DaysLate_woe | 1.421802 |
NumberRealEstateLoansOrLines_woe | 1.192780 |
NumberOfTime60_89DaysPastDueNotWorse_woe | 1.339235 |
NumberOfDependents_woe | 1.129460 |
每个预测变量的vif值都小于10,说明预测变量之间不存在多重共线性。
4 生成评分卡
根据逻辑回归模型和之前筛选得到的列表,给定参数,生成评分卡,调整参数,使得评分卡分数范围满足需求。评分卡如下:
Characteristic | Attribute | Points |
---|---|---|
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 |
MonthlyIncome | nan | 71 |
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 评分卡模型评估
通过
曲线,
曲线来对模型进行评估:
通过
曲线知ks值为0.8,最优阈值为0.5631,
曲线的auc值也高达0.86,说明模型良好。(这里选取两个指标来对比评估模型)
5 小结
不仅仅是在评分卡模型的制作中,在任何数据挖掘工作开展前,对数据进行清洗、格式化、校对的工作必不可少。数据的质量决定了模型优度的上限,一个好的模型可不仅仅得益于数据分析师对模型的把握深度。
数据的清洗格式化包含数据异常值处理、缺失值处理、时间数据的处理、文本字符型数据的处理、离散数据的处理、以及根据业务要求可能需要进行的数据变换以及分箱等。
总的来说就是,建模前要把数据处理成建模算法的“菜”。不同的业务问题需要匹配相应的算法来完成建模,但算法需要吃干净整洁的数据,才能有效高效的为业务效力。~~~
资源 | 链接 |
---|---|
评分卡流程 | https://download.csdn.net/my/uploads |