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

2019-08-31 13:32

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

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)


选择最佳的特征值预测银行贷款违约 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:家长委员会申请表

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: