【杂记】一个简单的用户信用风险评分模型(Scorecard)项目


写在前面

整理的几年前的简单课程作业报告,整体思路很简单、很学生化,实际应用价值不大,主要是作记录和思路整理用。

1. 背景及需要解决的问题

随着中国的网络借贷市场的迅速扩大,用户申请手机分期越来越多。手机贷以采集互联网大数据作为主要征信源,进行有效的数据清洗、分析建模、个人信用评分,并与传统金融授信逻辑相结合,实现包含借贷交易的互联网金融平台。本报告将构建基于原始数据以及基于 WOE的逻辑回归模型,建立评分卡,通过2000 名用户申请手机分期的数据集,预测用户逾期未还款的概率,预估用户违约的信用风险。同时与其他分类模型进行分类效果比较,由此为是否给用户发放手机贷款的决策提供参考和建议。

2. 数据探索性分析及预处理

  • 数据集总体分析(正负样本比、样本范围、观察窗口选择)
  • 变量相关性分析(Pearson 相关系数、Spearman相关系数等)
  • 数据集缺失值分析(多种方式替换缺失值)

3. 变量选择

考虑到实际中应用的评分卡模型一般有8至14个变量,因此在模型的变量选择中,将最多选择的变量个数限制在14。

变量的形态可以分为连续变量和分类变量,首先要进行单因子分析,单因子分析主要是为了检测变量对好坏的区分能力。接下来要做挑选出的变量的共线性分析,以保证模型变量的可靠性。

3.1 变量重要性分析

由于采用信用评分卡模型,对变量的重要性的量化分析,主要采用 WOE 值和IV 值进行变量显著性的评价。第二,为确保选取变量的有效性,同时使用了基于变量特征重要性的变量筛选方法,即使用XGBoost与Lightgbm来辅助综合评估变量的重要性。由于IV值的计算是以WOE值为基础的,所以计算IV值之前,首先计算 WOE值(代码:woe.py)。利用决策树获得最优分箱的边界值列表,然后求解每个变量的WOE值,再求解IV值,最终得到了IV值最高的14个指标。

IV值前14的变量有13个都是连续变量。为增强模型的可解释性与合理性,本文挑选了IV值前3的类别型变量加入候选数据。

接下来,继续使用 XGBoost 来辅助提取变量重要性,使用梯度提升算法的好处是在提升树被创建后,可以相对直接地得到每个属性的重要性得分。最终是将一个属性在所有提升树中的结果进行加权求和后然后平均,得到重要性得分。一个属性越多的被用来在模型中构建决策树,它的重要性就相对越高。

可以得到,由XGBoost选出的最重要的8个变量,其中有4个在IV值筛选出的变量中也出现了。最后使用Lightgbm模型进行辅助提取变量重要性。

在这里插入图片描述


此时仅有7个连续型变量在三种方法中至少出现两次,考虑到模型的合理性,加入之前预留的类别型变量中IV值最高的IS_ATTACH。主要依据IV值判断,综合三种方法考虑,最终选择连续型变量7个,类别型变量1个,共计8个变量作为 X 放入模型:

最终选择的变量
月息费
偿债比
LOAN_AMT
MTH_REPAY_AMT
MULTIPLE_LOAN_7D
IS_ATTACH
unionpayinfo_faile_code_51
bairongmultiapplyinfo_al_m12_id_notbank_orgnu

3.2 共线性分析

接下来进行共线性分析(代码:iv.py)。使用方差膨胀系数VIF来进行变量的多重共线性分析。全部变量中 VIF>100 的变量,即存在多重共线性严重的变量占比达到了70%以上,数据集的共线性较为严重。但筛选后的的八个变量的多重共线性大幅降低,可以接受。

4. 模型建立:基于WOE的逻辑回归模型

4.1 变量的WOE编码

要对一个变量进行 WOE 编码,需要首先把这个变量进行分箱处理。对此,采用的是 ChiMerge 算法进行分箱,依赖于卡方检验,具有最小卡方值的相邻区间合并在一起。预先设定一个卡方的阈值,在阈值之下的区间都合并,阈值之上的区间保持分区间,直到满足停止准则。由于评分卡每个变量的取值一般被分为 2 至 6 个区间,因此最大区间数选择为 6,最小区间数选择为 2。

再根据 8 个变量的分箱,分别计算每个分箱的 WOE 值,每个分箱 WOE 的正负,由当前分箱响应和未响应的比例,与样本整体响应和未响应的比例的大小关系决定,当前分箱的比例小于样本整体比例时,WOE 为负,当前分箱的比例大于整体比例时,WOE 为正。

4.2 建立逻辑回归模型

使用 scorecardbundle 库中的逻辑回归函数对数据集进行训练,将数据集以 4:1 的比例划分为训练集和测试集。

5. 模型求解:基于逻辑回归模型建立评分卡

在从 log(odds) 到 score 的转换过程中,常用的是事先指定下述三个参数:
b:基准分值(base point);
o: 基准分值对应的odds(odds at base point);
p: 当odds增加一倍,评分增加的分数(point double odds)。

设置基准比率 o 翻倍对应的分数 p 为-5,其绝对值与分数的离散程度呈正比。因为 p 为负时,模型评分越大、目标变量为正的概率越高,适用于大多数二元分类问题。基准比率 o 对应的预期分值设置为 60。由此,可以对 8 个变量都进行评分,最终汇总,得到最后的评分卡。

代码如下:scorecard.py

6. 结果评估

使用该评分卡对测试集的样本进行评分,结果通过条形图进行展示:

在这里插入图片描述


可以发现大部分样本的评分在 40-80 分之间,这部分客户有较小的逾期还款风险。还有少部分样本评分在 20 分以下,这部分客户有较高的逾期还款风险。然后进行效果评估。使用的方法为 K-S 检验,以及计算 auc 值。利用 python 得到的训练集与测试集分别的 KS 值以及 auc 值如下表:

训练集测试集
KS值0.4970.502
auc值0.80285055198550.7853281853281853

可以得到,这个基于 WOE 的逻辑回归模型建立的评分卡模型auc值较高拟合情况比较理想。模型的KS值较高,说明了模型的区分能力强。综合可以说明这个评分卡对每个样本的评分能够有效地预测客户是否会有逾期还款的风险。


7. 与其他模型的效果比较

例如随机森林模型(代码:randomforest.py

以下是使用MATLAB实现基于评分建立中小微企业信用风险的评估模型的代码示例: 1. 数据预处理 首先,我们需要导入数据并进行预处理,包括数据清洗、变量选择和缺失值处理等。假设我们的数据集为"credit_data.csv",包含了中小微企业的信用评级、财务数据、经营数据等多个变量。我们可以使用MATLAB中的表格数据类型来处理数据: ```matlab % 导入数据 creditData = readtable('credit_data.csv'); % 数据清洗 creditData = creditData(~any(ismissing(creditData), 2), :); % 变量选择 varNames = {'var1', 'var2', 'var3', 'var4', 'var5'}; creditData = creditData(:, varNames); % 缺失值处理 creditData = fillmissing(creditData, 'previous'); ``` 2. 模型开发 接下来,我们可以使用逻辑回归模型来建立评分模型。我们首先需要将数据集分为训练集和测试集,然后使用训练集训练模型,得到训练好的模型。 ```matlab % 将数据集分为训练集和测试集 cvp = cvpartition(size(creditData, 1), 'HoldOut', 0.2); trainData = creditData(training(cvp), :); testData = creditData(test(cvp), :); % 训练逻辑回归模型 mdl = fitglm(trainData, 'ResponseVar', 'target', 'Distribution', 'binomial'); ``` 3. 评分转换 我们可以使用评分转换函数将逻辑回归模型的预测概率转换成具体的信用评分。在MATLAB中,我们可以使用以下代码实现: ```matlab % 评分转换函数 scorecard = fitScorecard(mdl, trainData, 'ResponseVar', 'target', 'ScoreTransform', 'logit'); % 使用评分对测试集进行评分 testScores = predict(scorecard, testData); ``` 4. 评估模型 最后,我们需要使用测试集评估模型的预测效果,并对模型进行调整。在MATLAB中,我们可以使用以下代码实现: ```matlab % 计算模型的预测准确率 labels = testData.target; predictions = testScores >= 0.5; accuracy = sum(labels == predictions) / numel(labels); % 绘制ROC曲线 [X, Y, T, AUC] = perfcurve(labels, testScores, 1); plot(X, Y); xlabel('False positive rate'); ylabel('True positive rate'); title(['ROC Curve (AUC = ' num2str(AUC) ')']); ``` 以上是使用MATLAB实现基于评分建立中小微企业信用风险评估模型的代码示例。需要注意的是,这只是一个简单的示例,实际应用中需要根据具体情况进行调整和改进。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值