基于R语言的申请评分卡

Python012

基于R语言的申请评分卡,第1张

信贷行业中常见的评分卡包括:申请评分卡(Application)、行为评分卡(Behavior)、催收评分卡(Collection)以及反欺诈评分卡(Anti-Fraud),简称为A卡、B卡、C卡和F卡。

A卡,主要应用于贷前准入环节对新用户的信用评级。

B卡,主要应用于贷中管理环节对存量用户的行为预测。

C卡,主要应用于贷后催收环节对存量用户是否催收的预测管理。

F卡,主要应用于贷前准入环节对新用户可能存在的欺诈行为进行预测。

本文通过历史数据建立Logistic回归模型,预测用户出现违约的概率,从而建立申请评分卡模型。

本文数据来自“klaR”包中的German credit data。

加载要用到的数据,并进行初步数据观察:

该数据集包含了1000个样本,每个样本包括21个变量,变量含义如下:

数据清洗主要工作包括缺失值和异常值处理。

查看缺失值情况:

从以上结果可看出,本数据集不存在缺失值。

查看定量指标异常值情况:

从图2可以看出,定量指标中存在异常值。下面,让我们具体来看一下:

根据具体情况来看,定量指标中存在的异常值是基本符合实际情况的,而且数据集样本数量较少,因此不对异常值做处理。(本例比较特殊,实际工作中的情况肯定会比较复杂)

本数据集包含了定量和定性两类指标,接下来我们用不同的方法,筛选出对违约状态影响最大的指标,作为构建模型的变量。

首先,根据简单随机抽样,将数据集划分为训练集和测试集:

以下用随机森林法和Logistic回归方法,寻找对因变量影响最显著的自变量:

综合以上两种方法的结果,我们筛选出了对违约状态影响最显著的四个指标 :duration(3)、age(3)、amount(2)和installment_rate(2)。

通过R中的informationvalue包,计算各指标的IV值,得到各定性指标间的重要性度量,选取其中的high predictive指标:

根据以上结果,我们选择status、credit_history、savings和purpose四个high predictive指标构建模型。

综上,我们共选择了8个变量作为入模变量。

计算定量指标的WOE之前,需要先对定量指标进行分段。下面,优先采用最优分段,其原理是基于条件推理树(conditional inference trees, Ctree)的递归分割算法,核心算法用函数ctree()表示。

从上图可以看出,woe值相差较大,分段效果不错。以下针对amount、age采用相同分段方法。

installment_rate只有1、2、3、4四个值,四个值对应的woe值差别较大,且具有单调性,采用等距分段。

接下来我们需要对定性指标做必要的降维处理,方便计算其WOE值。首先,我们查看一下入模的定性指标的概况:

由以上概况可知,定性指标status、credit_history、和savings的维数最高为5维,最低为4维,维数适中,可以不进行处理。

定性指标purpose的维数多于7维,明显高于其他定性指标。为了避免“维数灾难”,我们根据三条准则进行降维:1.维度间属性相似;2.合并后woe有明显变化;3.单个维度样本量不应过小。

用klaR包中的woe()函数获取入模变量的woe值。

至此,我们已经获得了入模变量对应的woe值。值的注意的是,我们之前将好客户设定为0,坏客户设定为1,所以woe值越大,代表客户违约的概率越大,但traindata中的woe实际是按照好客户为1,坏客户为0计算的,所以与之前变量分箱中计算的woe正好相反。

下面正式开始构建模型,并转换为标准评分卡。

从以上逻辑回归的结果来看,各个变量都通过了显著性检验。同时,为防止多重共线性问题的出现,我们对模型进行VIF检验:

从结果可知,所有变量VIF均小于4,可以判断模型中不存在多重共线性问题。

根据 信用评分卡模型的建立 ,我们可以得到:

获取基础分以及训练集中各变量的分数:

输出CSV格式的标准评分卡:

对测试集中的样本做同样的降维处理:

从以上结果可知,模型准确率ACC为0.77,AUC为0.805,Gini系数为0.61,整体效果尚可。

本文通过对Germancredit数据的挖掘分析,从数据清洗、变量筛选、WOE计算、建模分析到模型验证,创建了一个简单的申请评分卡。

本文用到的数据集比较简单,在实操中,数据清洗应该会占用更多时间和精力。

本文仅进行了一次样本抽样,在实操中,应进行K折交叉检验,提升模型准确度。

开发的模型是基于某一时间的特定样本的,随着时间的推移和信贷政策的变化,样本会发生变化,从而造成模型的区分能力和稳定性变差。一般需要定期对模型的使用情况进行检测并报告模型区分能力和稳定性的变化情况,必要时应采取包括修正模型或重建模型等措施。这是后面需要认真学习的地方!

信用标准评分卡模型开发及实现

信用评分卡模型的建立

可以使用数据标号“text()”函数text()函数跟在画图函数语句后面,即先画出图,再标号。下面为来自R的text()函数使用方法(疑难词汇已经标出) Description text draws the strings given in the vector(矢量) labels at the coordinates(坐标) given by x and y. y may be missing since xy.coords(x, y) is used for construction of the coordinates. Usage text(x, ...) ## Default S3 method: text(x, y = NULL, labels = seq_along(x$x), adj = NULL,pos = NULL, offset = 0.5, vfont = NULL,cex = 1, col = NULL, font = NULL, ...) Arguments x, y numeric(数) vectors(矢量) of coordinates(坐标) where the text labels should be written. If the length of x and y differs, the shorter one is recycled. labels a character vector or expression specifying the text to be written. An attempt is made to coerce(强制) other language objects (names and calls) to expressions, and vectors and other classed objects to character vectors byas.character. If labels is longer than x and y, the coordinate...