选择最佳的特征值预测银行贷款违约 - 图文

更新时间:2024-01-16 21:00:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

选择最佳的特征值预测银行贷款违约

Zahra Yazdani*, Mohammad Mehdi Sepehri, Babak Teimourpour

*Group of Information Technology Management, Payam Noor University, Tehran, Iran {Department of Industrial Engineering, Tarbiat Modares University, Tehran, Iran

一、简介

对金融公司和银行来说,信用风险评估变得越来越为重要。巴塞尔委员会规定了信用风险评估的流程规则。巴塞尔委员会允许银行选择两种方法来计算其资本需求的信用风险。

一种方法是,采用标准的方法,以标准化的方式度量信用风险,并支持外部的信用评估。另一种方法是,采用内部评级法,这需要银行监管机构明确的批准,允许银行采用内部信用风险的评级制度(BCBS, 2006)。在标准解释的基础上,信用风险的有效内容是违约概率,违约的损失和违约暴露。违约的概率(PD)是其中最重要的一个。根据巴塞尔新资本协议,违约被认为发生是当银行认为债务人不可能偿还其还贷的义务或者/和债务人逾期90天没有向银行提供任何信用义务的材料(BCBS, 2005)。

内部评级法的基础,银行应该根据资产的类型对暴露的风险分类。经过分类的风险,他们需要评估每一项贷款和暴露的风险值(BCBS, 2001).。确定的违约概率是评估其他要素的先决条件,违约概率的评估时间为一年(BCBS, 2006)。

本篇介绍了对违约概率模型数据挖掘的框架,这样做的目的是首先要确定有效的因素来评估违约概率,其次是预测新的贷款中的违约概率。

二、商业问题

近几年来,公司违约的数量已经有了显著的增加。它增加了银行的信贷风险,并要求银行提高其监管资本。根据内部评级法,银行必须根据资产的不同的潜在风险特征进行分类:企业,主权,银行,零售和公平性。

在一般情况下,企业风险被定义为公司,合伙企业或个人独资企业的债务(BCBS, 2001)。

因为违约概率是信贷风险中最重要的部分,目标是确定概率风险中的有效的特征值,并且评估根据公司资产分类的新的信贷的违约概率。有许多特征值,但是一些特征值是不相关的,只有一些特征值可能会影响模型的表现。使用不相关的特征值会导致很差的结果。为了避免陷入使用不相关的特征值,我们需要分析数据,做好准备,去选择有效特征值的最好子集。所提出的方法的最主要的目的是预测违约概率从而降低银行的信贷风险。

三、数据提取

在一些相关研究以及询问业界专家的基础上,我们确定并提取了影响企业信贷违约概率的最有效的特征值。提取的结果氛围四组:贷款特征,企业结构特征,行为特征和系统因素。因为银行不可能去控制系统因素,比如经济危机等。我们不考虑系统因素,仅仅使用银行数据库中存在的因素。

因为现有的数据库中存在了大量的数据,我们将采用采样技术来提取数据。随机选取银行的十家分行作为样本,包括过去15年中的将近140,000例企业贷款。这些数据的时间是从1995年到2010年,在这些所有贷款中,只有极少数的违约发生。

我们将数据分为2个独立的集合:第一个集合包含前面14年[0,14]的所有数据,约有124000个观察例子。另外一个集合是最后一年的数据[14,15],主要有16000例观察数据集。第一个数据集用于产生客户

过去的行为特征,来分析在第二阶段的交易。

目标函数(二元函数)是利用从第二集合所提取的特征和从第一集合产生的特征来预测违约概率。我们通过编程和使用SQL来完成这些步骤。

我们把提取的数据转换成excel文件(http://www.rdatamining.com/books/dmar/),数据集合包含18个不同的特征值,具有不同的值和二元目标值。目标特征值为0或者1。

表格8.1给出独立数据的类型和在附录中对特征值的描述。

四、数据探索和准备

数据挖掘和探索性数据分析是密切相关的。数据探索的本质是数据挖掘。如果没有足够的关于数据的知识,是不可能通过数据挖掘得到有效结果的。在使用数据之前,我们必须对它们深入了解。在应用数据挖掘方法之前对数据进行分析是非常有必要的。还有一些数据可视化工具帮助完成这些。我们提出了一些技术来应用到我们的数据探索中。我们使用不同的预处理技术来建立完美的数据集。数据清理方法,试图填补缺失值,平滑曲线,并纠正不一致的数据。 4.1空值检测

处理缺失值作为预处理阶段的一部分,是数据挖掘中最重要的方面之一。没有一个清晰的数据集,得到有效的结果是非常困难甚至是不可能的。为了建立一个近乎完美的数据集,我们使用一系列技术来填充缺失值。

我们开始使用包VIM里面的aggr()函数来探索数据集(Lang et al.,

2012)。这个软件包对R语言的缺失值或者估算值的可视化引入了新的工具,可用于探索数据和缺失值或者估算值的结构。

aggr()函数计算或者绘制每隔特征值的缺失值/估算值和确定组合的特征值的缺失值/计算值。它代表了数据集中的许多缺失值。

不幸的是,估算所有缺失值是不可能的。结构特征对预测违约概率是非常重要的,因此,我们要删除一些没有足够企业结构信息的观察实例。这会导致更小的数据集。我们失去了一些观察实例,但是剩余的那些是非常的有效。我们同样会失去一些行为特征结构,因为一些客户是新客户。为了得到更高的精确度,我们将数据分成两个集合,并且独立的分析每个集合。在这个章节,我们得到的是一个行为特征分析的结

果。这个数据集包含约有1500个观察实例。图8.1显示空值在数据集之前的分布和消除对象以及划分数据集之后的分布。 4.2异常值检测

另一个有趣的方面,尽管它在数据挖掘中有点棘手,那就是异常值。异常值是一种可能是结果发生偏离的观察实例。数据库中可能包含的对象特征值和其他的特征值差别比较大。因为数据集中包含不同的数据类型,根据数据的类型来研究数据是明智的。我们用两种方法来确定异常值:单变量和多变量。前者,我们分别检查每个特征值。下面是异常值检测的实例: > levels(as.factor(mydata[,“x2”])) [1] “0” “1” “2” “3” “8” > levels(as.factor(mydata[,“x4”]))

[1] “0” “1” “2” “3” “4” “9” “11” “12”

特征值X2必须包含下列数据:1,2,3。特征值X4必须包含下列数据1,2,3,9,11,12。所以我们将不正确的值设置为null。二元变量也被同样检查过。对于数字的特点,我们采用了boxplot 技术。boxplot 是一个简单的发现异常值和提交数据分布的单变量技术。图8.2显示了boxplot技术处理特征值。为了在一个图表中展示所有的boxplot,值转换成[0,1]区间。

为了得到清晰的结果,我们在log规模上对特征比值采用boxplot 技术。它使得特征值的分布更加均匀。

# normalization function norm01 < function(data,x) {

For (j in x) {

data [!(is.na(data[,j])),j]?

(data[!(is.na(data[,j])),j]-min(data[!(is.na(data[,j])),j])) / (max(data[!(is.na(data[,j])),j])-min(data[!(is.na(data[,j])),j])) }

return(data) }

使用标准化的函数,所有的特征值都转化成[0,1]区间,在一张图表上展示boxplot是可能的。 # drawing boxplot

attach (mydata)

c < c(1,5,6,7,11,13,14)

data_norm < norm01(mydata,c) boxplot(data_norm[,c]) c < c(8,9,17,18)

boxplot(log(mydata[,c]))

可能图表8.3显示了boxplot的特征比值,因此,异常值被确定,其值被替换为null。

我们在最后一步用有效的归集技术用null值替换异常值。

基于距离的方法是用于检测异常值的多变量方法之一。一些相关的算法是Fazzy clustering, SOM, Agglomerative Hierarchical Clustering。我们使用Agglomerative Hierarchical算法,因为这个算法的计算是比较简单且易于理解的。它是一种聚类技术。在这个算法中,每个步骤中每个观察实例被假设成一个聚类,每个观察实例是根据它们之间的距离进行归类的(Tan et al., 2005)。后面被分配的观察实例具有较低的排名。可以看出,具有较低排名的观察实例是异常值,因为它们和其它的观察结果有较大的差异(Torgo, 2011)。因此,把它们加入后面的类。为了实现观察实例的异常值,我们使用boxplot,并且观察实例的排名低于下限,则被认为是异常值。

聚类算法需要距离矩阵,因此,我们使用包cluster里面的daisy()函数(Maechler, 2012)。因为数据集里面包含不同的数据类型,我们使用gower metric来计算不同对象之间的距离,下面的代码是给异常值进行排名的:

require(cluster) attach(mydata)

# creating proximity matrix

dist?daisy(mydata[,-19],stand?TRUE,metric?c(“gower”), type ?list(interval?c(1,5,6,7,11,13,14),ratio?c(7,8,17,18), nominal?c(2,12),binary?c(3,4,10,15,16)))

# clustring objects by agglomerative hierarchical clustering # this function obtains a score for each object require(DMwR)

outl?outliers.ranking(dist,test.data?NULL,method?“sizeDiff”, meth ?“ward”)

排名后的对象的分数不在范围内的将被忽略。

五、缺失值估计

一些实例具有缺失值,因此,我们需要确定一个方法来处理缺失值。有两种方法来处理缺失值:单变量估算和多变量估算。前者利用一个变量的信息。例如:变量的缺失值将被相同变量的完整的平均值或者中值所替代,或者被相同变量关联性最大的变量所取代。

然而,后者采用了一种新的数据集,其中包含完整地数据。缺失值完全使用它们和完整数据之间的近似值。这种技术比单变量估算更加强大,因为需要考虑更多的信息。在这种方法下,需要考虑的是多变量估算。我们使用包DMwR里面的knnImputation()函数中的k nearest neighbors算法(Torgo, 2012)。这个函数对数据集中数值的和名义的特征值都可以适用。它使用变体的Euclidean距离算法来确定每个对象的最邻近邻居。距离公式如下:

di是有以下因素确定:

在计算对象的距离之前,数字特征值被规范化,下面的代码是用来进行估算的: require(DMwR) attach(mydata)

# missing data imputation

co?knnImputation(data_norm, k ?5, scale ?T, meth ?“weighAvg”, distData ?NULL)

对于较大的数据集,我们可以将相似的对象进行分组,然后进行估算,这比 k nearest neighbors算法花费的时间更少。 5.1相关性分析

数据集可能包含不相关的或者冗余的特征值,这会使模型变得更加复杂。建立更复杂的模型需要更长的时间,去除冗余的特征值将会加速模型的建立。为了理解特征值之间的关系特征值,我们需要知道数据类型。我们的数据集包含混合的数据类型。

我们通过eclipse中的plotcorr()函数使得相关的矩阵连续和比例特征值。这个函数在eclipse中绘制相关的矩阵(Murdoch et al., 2012)。它使用一种简单的方法展示特征值之间的相关性。两个特征值之间的相关性是独立的。去度量两个特征值之间的联系是非常有用的。表格8.4绘制看相关性。下面的代码展示了相关性:

# correlation matrix using ellipse-shaped glyphs library(package?“ellipse”) c?c(1,5,6,7,8,9,11,13,14,17,18)

plotcorr(cor(mydata[,c]),col?cl

X1,X7,X11和X18之间存在微弱的负相关,对这些特征值不需要采取任何行为。X11和X14之间存在很强的正相关关系,我们需要忽略其中一个,但是经过考虑之后,我们决定把它们都考虑在内。

我们绘制了名义的和二进制特征值的平行坐标图,平行最标图允许可以超过四个纬度去观察特征值。这个想法很简单:相对于在正交坐标系中观察,我们采用在一个平行坐标系中绘制坐标(Ha¨rdle and Simar, 2006)。第一步是将最大的变量设置为1,最小的变量设置为0.这种表示方法是非常有用的高维度数据。然而,变量命令是敏感的。因为数据中的某些模式可以在另一个命令中显示的更为清楚(Hardle and Simar, 2006)。绘制平行坐标图是由包rggobi中的ggobi()函数完成的。

包rggobi提供了一个命令行接口GGobi,是一个交互式和动态图形软件包。Rggobi补充了GGobi的图形用户接口,提供了一种方法使分析和探索之间可以流畅的过度,以及自动化的常见任务(Lang et al., 2012)。 ggobi()函数可以很方便的检索ggobi 数据集。 # rggobi for nominal and binary data c?c(1,seq(5,9,1),11,13,14,17,18) data_norm?norm01(mydata[,c],c) c?c(2,12)

data_nomi[,c]?mydata[,c]/max(mydata[,c]) c?c(3,4,10,15,16,19)

newdata?cbind(data_norm,data_nomi,mydata[,c]) library(rggobi) attach(newdata)

gd < ggobi(newdata)[1]

在绘制PCP之前,将数据集分成更多的子集。表格8.5展示了PCP。根据表格进行思考,我们没有任何相关的特征值。 5.2数据集的平衡

在现实世界中,大多数数据集有不平衡的类分布,这会在分类模型中导致一些问题。大多数学习算法往往忽略较小的类,因为它们不支持统计。因此准确率将不切实际的上升。我们的采样和测试数据集从所有可用对象中随机选取,并且用包DMwR中的SMOTE函数来客服这些问题。该测试数据集包含大约500个观察实例,平衡的数据集约有1500个观察实例。

SMOTE函数使用SMOTE方法来处理不平衡分类,也就是说,它可以生成一个新的“SMOTEd”的数据,以解决该类不平衡问题集。使用这类元素的最邻近邻居人为的产生新的最小类,在样本下的大多数来平衡训练数据集(Torgo, 2011)。下面的代码是用来平衡训练数据集的: library(DMwR) attach(mydata)

tr

data_smot$defn < factor(ifelse(data_smot$defn 技 1, “def”, “nondef”)) data_samp < SMOTE(defn ., data_smot, k?5,perc.over ?500)

图表8.6展示了平衡前后的数据分布。为了描述uzai两种状态下的数据分布,我们采用多为缩放方法(MDS)。

MDS是一种基于对象,主题以及激励之间的相似性来产生这些物品的表征。邻近性表示了数据对象之间的相似性或者相异性(Ha¨rdle and Simar, 2006)。它所代表对象的点之间的距离与邻近的相同对象之间的距离十分接近。在二维空间中绘制对象,可以使用下面的代码: library(cluster)

dist?daisy(data_samp[,-19],stand?TRUE,metric?c(“gower”),

type?list(interval?c(1,5,6,7,11,13,14), ratio?c(7,8,17,18), nominal?c(2,12), binary?c(3,4,10,15,16))),11,15,16))) loc?cmdscale(d,k?2)

x?loc[,1] y?loc[,2]

plot(x,y,type?“n”)

text(x,y,labels?as.expression(as.numeric(data_samp[,19])),col?as.numeric(data_samp [,19]))

5.3特征值选择

在许多应用程序中数据集的大小是非常大的。在现实世界中,特征值的相关性是不确定,许多数据集包含相关的和不相关的特征值,这是一个大的缺点。这些问题实例包括运行时间的增长,得到更差的结果以及更复杂的模式。特征祝选择的目的是找到一个合适的特征值子集,非常接近原始的数据集。

由于每隔特征值对目标特征值都有特殊的影响,使用强大的特征值选择技术是非常有必要的。处理一个大的数据集,我们使用了随机选择特征值的方法,以及软件包randomForest里面的randomForest函数被使用来评估每隔特征值的权重(Breiman et al, 2012)。所提出的方法是从样本中随机挑取一个对象,并产生几棵树基于分类的精度和错误比,特征值的权重进行加权。这个方法有两个步骤。

第一步生成一棵树,所有的特征值都被称为原始树,然后在每一次迭代中消除一个特征值。因此,新产生的书和原始树错误率相对于每个特征值之间的差异将会被计算。基于前一阶段的精确度,我们可以使用更高的精度来对特征值分配一个更高的精度。

第二步或者二次测量计算各特征值降低的平均值。这一步是受Gini 指数影响的,经过计算,我们由一个加权的n*2矩阵:这里的n是特征值,2列是相关的,它们的值代表了特征值之间的重要性。

我们要注意的是。必须使用最佳的精确度来选取特征值,下面的代码被用来使用选取表中的重要特征值:

attach(data_samp) library(randomForest) set.seed(4543)

data.frame(intbo_samp)

rf

varImpPlot(rf)

类型参数指定的类型的重要性措施(1、平均下降的精度。2、Gini指数的平均下降)。据专家介绍,我们希望在第一项措施的基础上,选择最佳相关性的特征值。下面展示了结果和重要的函数:

在获得了特征值的重要性后,我们应该基于某个特定的阀值选择最重要的特征值。这可以通过消除后面的方法来实现。

为了选择它们,我们使用软件包randomForest里面的rfcv()函数,这个函数通过嵌套的交叉验证程序展示了依次减少预测(变量的重要性)交叉验证模型的的性能(Breiman et al., 2012)。上面提到的代码如下:

fo?rfcv(data_samp[,19],data_samp[,19], cv.fold?10, scale?“log”, step?0.9) best < which.max(fo$error.cv)

plot( fo$n.var,rfo$error.cv, type?“h”, main ?“importance”, xlab?“number of features”, ylab ?“classifier error rate”)

axis(1, best, paste(“best”, best, sep?“\\n”), col ?“red”, col.axis ?“red”)

如表格8.7所示,最佳的特征值是12,因为12在建立的模型中有最高的重要性:x1, x4, x5, x6, x7, x8, x9, x11, x12, x13, x14, x18。 5.6建模

分类是预测分类标签的数据分析形式之一(Han and Kamber, 2006)。鉴于分类标签是已知的,分类方法被用来对新的观察实例进行分类。换句话说,分类是发现一个预测一个类的标签的模型(数学函数)的过程,这些观察实例没有明确的被标识。这种模式可以用不同的方法来说明,例如决策树,分类规则和神经网络。

我们使用决策树技术,得到一个信贷违约概率分类的模型。决策树由一个树形结构,每隔节点代表衡量特征值,每隔分支是一个衡量结果,分类标签通过叶子显示。决策树可以很容易的转换成分类规则。

分类方法包含两步。第一步是利用明显被标记的数据。这个阶段,也称之为监督学习阶段,通过对训练数据集的分析,提出了一种分类模型(算法)。第一步生成的算法将在第二步被用来标记观察实例或者

测试数据集。函数rpart()是被用来建立一个决策树(Therneau et al., 2010),下面的代码是被用来实现rpart()函数的: library(rpart)

sdf?data.frame(train)

fit?rpart(train$x19 .,data?sdf,method?“class”)

数由于类标签(X19)是一个因子,方法=’class’被假设。软件包repart让决策树停止生长来缩减实现的复杂度。它产生了一组子树和在cp,精度和树的大小方面相比可选择的树。这个软件包的printcp()函数对repart对象展示了合适的cp表。函数在下面写出。 > printcp(fit)

Classification tree:

rpart(formula ?train$x19 ., data ?sdf, method ?“class”)

构建树的过程中实际使用的变量: [1] x11 x12 x13 x14 x18 x8 x9 根节点的错误:552/1472=0.375 n=1472

最后一棵树是最好的一个,将被选做最终模型。图8.8展示了这棵树。绘制树的命令如下: plot(fit, uniform?TRUE,main?“Classification Tree”) text(fit, use.n?TRUE, cex?1)

七、模型评估

要选出最好的模型,使用模型评估技术是非常必要的。模型评估是建模过程的子过程。有几种评估过程中的变量。

我们使用holdout和交叉验证相结合的方法。第一步,我们将数据集分为两个子集:训练数据集和测试数据集。每个观察实例被选为两个子集的机率是相等的。三分之二的数据被选为训练数据集。测试数据集独立于训练数据集。测试观察实例使用10-fold 交叉验证来建立模型。使用这种方式,将测试数据集分为10段。每一段被假定为一个测试数据平均误差率被认为是迭代十次后的最终的错误率,这个任务是由rpart()函数完成的。

八、发现和部署模型

分类模型中的部署是针对预测酚类标签中的新的对象。我们测试的模型是由predict()函数产生的测试数据集中新的对象。下面是代码和一些预测的测试数据作为示例: > sdfto?data.frame(test) > a?predict(fit,sdfto) > a

我们假设每笔贷款的预测违约概率大雨50%,然后,我们通过这段代码计算混淆矩阵: > table(predict(fit, test, type?“class”,na.action?na.pass), test[, “x19”])

表格8.2展示了由混淆矩阵计算的共同度量值。

九、总结与讨论

在这篇论文中,我们提出了确定企业信贷违约概率的有效特征值的框架,并且去衡量其重要性。这些特征值被使用来预测一年内的被标记的信贷的违约概率。违约概率的评估可以帮助银行避免预期的损失。我们是基于数据挖掘的方法和从一个大银行采集到我们需要的数据的方法来完成任务的。由于预处理阶段非常重要,并且也是一个耗时的步骤,我们使用了分类和聚类的技术让数据在有效的方式内可用。

预处理步骤之后,实现了一颗决策树用来预测被标记的新的信贷中潜在的违约概率。从选定的18个独立参数中,选择了12个最重要的来建立模型。我们使用R中的软件包来准备数据并且建立分类模型。R中的软件包在实现数据挖掘技术以及数据可视化方法上是非常有用的。

附录:选择最佳特征值预测银行的信贷违约 特征值描述

X1:公司的成立年限(年)

X2:所有权(1、公开 2、合作 3、政府) X3:类型(1、公司 2、机构)

X4:股票类型(1、公共股份 2、私人股份 3、有限公司) X5:管理人员数量

X6:管理人员的平均年龄(年) X7:管理人员总的股份 X8:资产资本的比率

X9:抵押物与信贷数目的比率

X10:在这一阶段的活动背景(0:没有任何背景 1:有背景) X11:收回借款人的义务剩余的月份 X12:抵押代码

X13:到目前为止违约的时间(年) X14:到目前为止最后支付的时间(年) X15:到期后付款(0:否 1:是) X16:以前是否违约(0:是 1:否) X17:过去的债务与以前的信用值的比率 X18:违约率与以前信用值的比率 X19:类标签(0:非违约 1:违约)

References

BCBS, 2001. The Consultative Document: The Internal Ratings-Based Approach. Bank for International Settlements.

BCBS, 2005. Working Paper No. 14: Studies on the Validation of Internal Ratings Systems. Bank for International Settlements.

BCBS, 2006. International Convergence of Capital Measurement and Capital Standards.

Breiman, L., Cutler, A., Liaw, A., Wiener, Matthew, 2012. Breiman and cutler’s random forests for classi_cation and regression. R package version 3.1-46.

Han, J., Kamber, M., 2006. Data Mining: Concepts and Techniques. Morgan Kaufmann, San Francisco. Ha¨rdle, W., Simar, L., 2006. Applied Multivariate Statistical Analysis. Springer, Berlin Heidelberg.

Lang, D.T., Swayne, D., Wickham, H., Lawrence, M., 2012. Interface between r and ggobi, R package version 2.1.19.

Maechler, M., 2012. Cluster analysis extended rousseeuw et al, R package version 1.14.2.

Murdoch, D., Chow, E.D., Celayeta, J.M.F., 2012. Functions for drawing ellipses and ellipse-like con_dence regions, R package version 0.3-7.

Tan, P.-N., Stainbach, M., Kumar, V., 2005. Introduction to Data Mining. Pearson Education, Boston.

Therneau, T.M., Atkinson, B., Ripley, B., 2010. Recursive partitioning, R package version 3.1-54. Torgo, L., 2011. Data Mining with R: Learning with Case Studies. Chapman Hall/CRC, Boca Raton. Torgo, L., 2012. Functions and data for “data mining with r” R package version 0.2.3.

本文来源:https://www.bwwdw.com/article/y2fo.html

Top