主要内容

信用评级装袋决策树

这个例子展示了如何构建一个自动信用评级工具。

信贷风险管理的基本任务之一是分配借款人信用等级。成绩用于客户根据他们认为信誉:更好的成绩意味着低风险客户;类似的成绩意味着类似的风险水平。成绩有两种类别:信用评级和信用评分。信用评级是一个小数量的离散类,通常标有字母,如“AAA”,“BB -”,等等。信用评分是数字的成绩,如“640”或“720”。信用等级在监管框架的一个关键元素,如巴塞尔协议II(见巴塞尔银行监管委员会(3])。

分配一个信用等级包括分析借款人的信息。如果借款人是一个个体,感兴趣的信息可以被个人的收入,未偿债务(抵押贷款、信用卡)、家庭规模、住宅状况,等等。企业借款人,可以考虑某些财务比率(例如,销售除以总资产),行业,等等。这些信息称为借款人特性预测。不同的机构使用不同的预测,他们可能也有不同的等级类或分数排列他们的客户。相对较小的贷款提供给一个大的市场的潜在借款人(例如,信用卡),通常使用信用评分,评分的过程借款人通常是自动的。对于更大的贷款,可以小到中型企业和大企业,信用评级通常使用,和分级过程可能涉及自动化算法和专家分析的结合。

有评级机构的信誉公司的跟踪。然而,大多数银行开发内部分配方法为他们的客户信用等级。内部评级客户可能是一个必要如果客户没有受到评级机构的评级,但即使第三方评级存在,内部评级提供了补充客户的风险状况的评估。

这个例子展示了如何用MATLAB®可以帮助自动信用评级过程的阶段。特别是,这个例子利用统计学习工具可用的统计和机器学习工具箱™,称为一个分类算法袋装决策树

这个例子假定历史信息可以在一个数据集的形式,每个记录包含借款人的信用评级的特点是分配给它。这些可能是内部评级,随后由一个委员会的政策和程序已经到位。另外,评级可能来自评级机构的评级被用于“抢跑”一个新的内部信用评级系统。

现有的历史数据是起点,它是用来火车自动化的袋装决策树的信用评级。在统计学习的词汇,这个训练过程的范畴监督式学习。然后分类器是用来给新客户评级。在实践中,这些自动的或预测评级很可能被视为暂时的,直到一个信贷的专家委员会进行检查。这个示例中使用的类型的分类器也可以促进这些评级的修改,因为它提供了一个测量的确定性预测评级,a分类分

在实践中,你首先需要训练一个分类器,然后使用它来分配一个新客户的信用评级,最后你还需要配置文件评估质量或分类器的精度,这一过程也被称为验证历史。这个例子还讨论了一些现成的历史工具。

现有的信用评级数据的加载

负荷的历史数据用逗号分隔的文本文件CreditRating_Historical.dat。这个例子使用文本文件,但是如果你有访问数据库工具箱™,你可以直接从数据库加载这个信息。

数据集包含财务比率,信用评级行业,为企业客户的列表。这是模拟的,而不是真正的数据。第一列是一个客户ID,然后有五个财务比率分析的列。这些是相同的比率用于奥特曼的z分数(见奥特曼1];看到吕弗勒和Posch [4相关分析)]。

  • 营运资本/资产总额(WC_TA)

  • 留存收益/总资产(RE_TA)

  • 利益前税前利润/总资产(EBIT_TA)

  • 股票的市场价值/总债务的账面价值(MVE_BVTD)

  • 销售/总资产(S_TA)

接下来,有一个行业标签,一个整数值从112。最后一列已经分配给客户的信用评级。

加载数据数组中。

creditDS = readtable (“CreditRating_Historical.dat”);

复制到一个矩阵的特性X,和相应的类,评级,为一个向量Y。这不是一个必要的步骤,因为你可以直接访问这些信息的数据集数组,但是这个例子中它来简化一些重复下面的函数调用。

中存储的特性矩阵X五个财务比率,行业标签。行业是一个分类变量,名义上的事实上,因为没有订购的行业。响应变量,信用评级,也直言,虽然这是一个序数变量,因为根据定义,评级意味着排名的良好信誉。这个示例使用这个变量”是“训练分类器。这个变量复制到一个有序数组因为这种方式输出出来的自然秩序评级和更容易阅读。评级的顺序建立的单元阵列作为第三个参数传递的定义Y。信用评级也可以映射到数值,可有用的尝试替代方法来分析数据(例如,回归)。它总是建议在实践中尝试不同的方法。

X = [creditDS。WC_TAcreditDS。RE_TAcreditDS。EBIT_TAcreditDS。MVE_BVTDcreditDS。S_TAcreditDS。行业];Y =序数(creditDS.Rating);

使用预测X和响应Y适合一个特定类型的分类集合称为袋装决策树。“包装”,在这种背景下,代表“引导聚合。”的methodology consists in generating a number of sub-samples, or引导副本从数据集。这些使是随机生成的,放回抽样从客户数据集的列表。对于每一个复制品,决策树生长。每个决策树是一个受过训练的分类器,并可用于隔离对新客户进行分类。两棵树的预测从两个不同的引导副本可能不同,。的合奏聚合所有的决策树的预测增长的引导副本。如果大多数树预测一个特定的类的一个新客户,合理考虑,预测比任何单一的预测更健壮的树。此外,如果一个不同的类是由一组较小的预测树,这些信息是有用的。事实上,树的比例,预测不同类型的基础分类的分数所报道的系综分类新数据。

构建树装袋工

构造分类合奏的第一步是找到一个好的叶大小对个人树;这里的例子试尺寸1,5,10。(见统计和机器学习工具箱文档以了解更多TreeBagger)。从少量的树木,25只因为你主要想要比较不同的初始趋势分类错误叶大小。再现性和公平的比较,重新启动随机数生成器,用于样品的替代数据,每次你构建一个分类器。

叶= [1 5 10];nTrees = 25;rng (9876“旋风”);savedRng =提高;%保存当前RNG设置颜色=“bgr”;2 = 1:长度(叶)%初始化随机数发生器,这样%随机抽样为每个叶大小都是一样的rng (savedRng)%创建一个袋装每个叶大小和情节out-of-bag决策树%的错误“oobError”b = TreeBagger (nTrees, X, Y,“OOBPrediction”,“上”,“CategoricalPredictors”6“MinLeafSize”、叶(ii));情节(oobError (b)、颜色(ii))结束包含(种植树木的数量)ylabel (“Out-of-bag分类错误”)({传奇' 1 ',“5”,“十”},“位置”,“东北”)标题(“不同的叶大小分类错误”)举行

三个leaf-size选项的错误具有可比性。因此处理叶片的大小10树,因为它导致精简和更有效的计算。

请注意,您不需要把数据分割成培训测试子集。这样做是在内部,它是隐含在背后的抽样程序的方法。在每个引导迭代,引导复制品是训练集,和任何客户排除(“out-of-bag”)作为测试点估计上面的out-of-bag分类错误报道。

接下来,是否所有的特性对分类器的准确性很重要。为此,打开吗功能的重要性测量(OOBPredictorImportance),并可视情节结果找到最重要的特性。现在试着更多的树木和存储分类错误,下面进行进一步的比较。

nTrees = 50;叶= 10;rng (savedRng);b = TreeBagger (nTrees, X, Y,“OOBPredictorImportance”,“上”,“CategoricalPredictors”6“MinLeafSize”、叶);酒吧(b.OOBPermutedPredictorDeltaError)包含(的数字特征)ylabel (“Out-of-bag特性重要性”)标题(“功能重要性的结果”)

oobErrorFullX = oobError (b);

特性2,46脱颖而出。功能4,股票的市场价值/总债务的账面价值(MVE_BVTD),是最重要的预测数据集。这个比例密切相关,信誉的预测因子结构模型,如默顿模型(5),公司的股票的价值相比,其未偿债务来确定违约概率。

信息产业部门、功能6(行业),也相对更重要的是比其他变量来评估一个公司的信誉数据集。

虽然不是一样重要MVE_BVTD、特性2,留存收益/总资产(RE_TA),脱颖而出的休息。留存收益之间的相关性和公司的年龄(公司已经存在的时间越长,收益可以积累越多,一般而言),进而公司与信誉的年龄(旧公司往往更容易生存在困难时期)。

适应一个新的分类合奏仅使用预测RE_TA,MVE_BVTD,行业。比较与先前的分类器的分类误差,它使用所有功能。

X = [creditDS。RE_TAcreditDS。MVE_BVTDcreditDS。行业];rng (savedRng) b = TreeBagger (nTrees, X, Y,“OOBPrediction”,“上”,“CategoricalPredictors”3,“MinLeafSize”、叶);oobErrorX246 = oobError (b);情节(oobErrorFullX“b”)举行情节(oobErrorX246“r”)包含(种植树木的数量)ylabel (“Out-of-bag分类错误”)({传奇的所有功能,“功能2,4,6”},“位置”,“东北”)标题(“不同的预测分类错误”)举行

分类的准确性不大幅恶化,当你删除功能相对较低的重要性(1,3,5),因此您将使用的更简约的系综分类预测。

这个例子从一组只有六个特征,并使用该功能重要性的衡量分类器,和out-of-bag分类错误的标准筛选出三个变量。特征选择是一个耗时的过程当潜在的初始预测包含很多变量。除了这里使用的工具(变量的重要性和“视觉”比较out-of-bag错误),另一个变量选择工具统计和机器学习工具箱可以有利于这些类型的分析。然而,最后,一个成功的特征选择过程需要结合量化工具和分析师的判断。

例如,这里使用的变量重要性的衡量是一个估计的相对影响排名机制功能通过测量多少分类器的预测精度恶化这一特性的值是随机排列。我们的想法是,当问题的特性增加了对分类器的预测能力,使用改变(在本例中排列)值不应影响分类结果。相关信息,另一方面,不能随机交换不退化预测。如果两个高度相关的特性是重要的,他们在这个分析都将等级高。在这种情况下,保持这些特性应该满足精确的分类之一,但是你不会知道独自从排名结果。你需要单独检查相关性,或者使用一个专家的判断。也就是说,这样的工具变量或重要性sequentialfs对特征选择可以极大地帮助,但分析师的判断在这个过程中是一个关键部分。

此时,分类器可以保存(例如,保存分类器。垫b在未来的会话(加载),负荷分类器)对新客户进行分类。为了提高效率,我们建议保持紧凑版本的分类器训练过程完成后。

b =紧凑(b);

分类新数据

使用先前构造的分类整体信用评级分配给新客户。因为现有客户的评级需要审查,也定期,尤其是当他们的财务信息已经大幅改变,数据集也可能包含一个现有的客户列表。首先加载新数据。

newDS = readtable (“CreditRating_NewCompanies.dat”);

预测新数据的信用评级,调用预测在分类器的方法。该方法返回两个参数,预测类和分类得分。你肯定想要这两个输出参数,因为分类评分包含的信息似乎预测评级。你可以复制变量RE_TA,MVE_BVTD行业成一个矩阵X像之前一样,但因为你将只有一个电话预测,你可以跳过这个步骤和使用newDS直接。

[predClass, classifScore] =预测(b, [newDS。RE_TA newDS。MVE_BVTDnewDS。行业]);

在这一点上,您可以创建一个报告。下面这个例子只在屏幕上显示一个小报告前三个客户,出于演示目的,但MATLAB部署工具可以大大提高工作流。例如,信用分析师可以远程运行这个分类,使用一个web浏览器,并得到报告,甚至无需MATLAB桌面。

我= 1:3流(“客户% d: \ n”newDS.ID(我));流(' RE / TA = % 5.2 f \ n 'newDS.RE_TA(我));流(“MVE / BVTD = % 5.2 f \ n 'newDS.MVE_BVTD(我));流(“行业= % 2 d \ n”newDS.Industry(我));流(“预测评级:% s \ n”我,predClass {});流(“分类得分:\ n”);j = 1:长度(b.ClassNames)如果(classifScore (i, j) > 0)流(' % s: % 5.4 f \ n”,b.ClassNames {j}, classifScore (i, j));结束结束结束
60644年客户:
RE / TA = 0.22
MVE / BVTD = 2.40
行业= 6
预测评级:AA
分类得分:
答:0.2349 AA: 0.7519 AAA级:0.0011 BBB: 0.0121
33083年客户:
RE / TA = 0.24
MVE / BVTD = 1.51
行业= 4
BBB评级预测:
分类得分:
0.1060 BBB: 0.8940
63830年客户:
RE / TA = 0.18
MVE / BVTD = 1.69
行业= 7
预测评级:
分类得分:
答:0.6305 AA: 0.0172 AAA级:0.0010 BBB: 0.3513

记录预测评级和相应的分数可以有用的定期评估分类器的质量。你可以存储这些信息的数组predDS

一会= b.ClassNames;predDS =[表(newDS.ID predClass) array2table (classifScore)];predDS.Properties。VariableNames = [{“ID”},{“PredRating”},一会');

这些信息可以保存,例如,一个用逗号分隔的文本文件PredictedRatings.dat使用命令

writetable (predDS PredictedRatings.dat);

或者直接写数据库使用数据库工具。

历史:分析分类的过程

验证历史是一个过程,分析或评估的质量信用评级。有许多不同的措施和测试相关任务(见,例如,巴塞尔银行监管委员会(2])。在这里,这个例子主要关注以下两个问题:

  • 如何准确的预测评分,而实际评级吗?这里“预测评级”是指那些从自动分类过程,获得和实际评级分配信贷委员会将在一起预测评级及其分类分数,和其他的信息,比如新闻和经济状况来决定最终的评级。

  • 如何实际评级等级的客户根据他们的信誉?这是在一个完成的事后分析执行,例如,一年之后,当众所周知公司违约。

该文件CreditRating_ExPost.dat包含“跟进”数据在同一公司认为在前一节中。它包含的实际评级委员会分配给这些公司,以及“默认标志”,表示相应的公司是否违约评级过程(如果一年内1)(如果0)。

exPostDS = readtable (“CreditRating_ExPost.dat”);

比较预测值与实际评级。

列车自动分类器的基本原理是加速信贷委员会的工作。更准确的预测评级,更少的时间委员会评估预测评级。所以可想而知,委员会想要定期检查预测评级匹配他们给出最终的评级,并推荐部门自动分类器(也许包括新特性,例如),如果不匹配有关。

第一个工具你可以用它来比较预测与实际的评级是一个混淆矩阵在统计和机器学习的工具箱现成的:

C = confusionchart (exPostDS.Rating predDS.PredRating);sortClasses (C, {“AAA”“AA”“一个”“BBB”“BB”“B”“CCC”})

行对应于实际的评级,和列预测评级。量的位置(i, j)混淆矩阵中显示有多少客户收到实际的评级和预测评级j。例如,位置(2)告诉我们有多少客户收到的评级“一个”信贷委员会,但预测“AA”与自动分类器。你也可以现在这个矩阵在百分比。正常化的每个值的观测数有相同的真正的评级。

C。归一化=“row-normalized”;

好协议之间的预测和实际评级会导致价值观主导的其余部分的主对角线连续值,接近理想值1。在这种情况下,您可以看到一个重要的分歧“B”,因为被评为大约一半的客户“B”信贷委员会预期“BB”通过自动分类器。另一方面,很高兴的看到,评级不同最多一个级距在大多数情况下,唯一的例外“BBB”

混淆矩阵也可以用来比较的内部评级机构对第三方的评级;这通常是在实践中来完成的。

对于每个特定的评级,你可以计算另一个测量预测和实际评级之间的协议。你可以建立一个接受者操作特征(ROC)曲线并检查曲线下的面积(AUC)通过使用rocmetrics对象。rocmetrics需要实际的评级(你对比的标准)和“BBB”分类分数由自动化流程。

rocObj1 = rocmetrics (exPostDS.Rating predDS.BBB,“BBB”);

绘制ROC曲线评级“BBB”通过使用情节的函数rocmetrics

情节(rocObj1)

这是一个解释如何建立中华民国。回想一下,为每个客户自动分类器返回一个得分为每个信用评级分类,特别是“BBB”,这可以解释为可能性有多大,这个客户应该是额定“BBB”。为了建立中华民国曲线,你需要改变分类阈值。即最低分数对客户进行分类“BBB”。换句话说,如果阈值t,你只有分类的客户“BBB”如果他们的“BBB”得分大于或等于t。例如,假设公司XYZ有一个“BBB”得分为0.87。如果实际的评级XYZ(信息exPostDS.Rating)是“BBB”,然后XYZ会正确地归类为“BBB”对于任何阈值高达0.87。这将是一个真阳性,这将增加所谓的灵敏度的分类器。对于任何阈值大于0.87,本公司不会接受“BBB”评级,你会有一个假阴性的情况。完整的描述,现在假设XYZ实际评级“BB”。然后它将正确地拒绝了“BBB”阈值超过0.87,成为一个真正的负,从而增加了所谓的特异性的分类器。然而,对于阈值高达0.87,它将成为一个假阳性(它将分为“BBB”实际上,当它是一个“BB”)。ROC曲线由策划真阳性的比例(灵敏度),与假阳性(1-specificity)阈值不同01

如它的名字所表明的那样,AUC是ROC曲线下的面积。AUC是越接近1、更准确的分类器(一个完美的分类器的AUC1)。在这个例子中,AUC似乎足够高,但是它将由委员会决定的AUC级别评级应该触发一个建议来提高自动分类器。

比较实际的评级和违约。

一个常用的工具来评估客户的排名隐含在信用评级累积准确性概要(CAP)和相关的精度比衡量。这个想法是为了衡量信用评级分配之间的关系和违约中观察到的数量。少人会认为违约是更好的评级类的观察。如果违约率是相同的所有评级,评级系统不会不同从一个天真的(无用)分类系统中客户被随机分配一个评级,独立于他们的信誉。

不难看到rocmetrics也可以用来构建帽。标准相比不是一个等级,和之前一样,但默认加载的国旗吗CreditRating_ExPost.dat文件。所使用的分数是一个“假分数”,表示在信誉排名隐含在评级的列表。假分数只需要满足更好的评级得分较低的假(他们是“不太可能有一个默认的旗帜1”),任何两个相同的客户评级得到相同的虚拟得分。违约概率可以通过分数,当然,但你没有违约概率,事实上你不需要估计违约概率来构造帽吗,因为你没有确认违约概率。这个例子是评估工具是如何评级排名客户根据他们的信誉。

通常,考虑评级系统的帽是策划一起盖的“完美评级系统”。的latter is a hypothetical credit rating system for which the lowest rating includes all the defaulters, and no other customers. The area under this perfect curve is the maximum possible AUC attainable by a rating system. By convention, the AUC is adjusted for CAPs to subtract the area under the天真的系统的帽子,帽子的系统随机分配客户评级。天真的系统的限制只是一个从原点到直线(1,1),AUC的0.5。的精度比评级系统被定义为调整AUC的比值(AUC系统的考虑- AUC的天真的系统)的最大精度(AUC的完美系统- AUC的天真的系统)。

ratingsList = {“AAA”“AA”“一个”“BBB”“BB”“B”“CCC”};Nratings =长度(ratingsList);dummyDelta = 1 / (Nratings + 1);dummyRank = linspace (dummyDelta 1-dummyDelta Nratings) ';D = exPostDS.Def_tplus1;fracTotDef =和(D) /长度(D);maxAcc = 0.5 - 0.5 * fracTotDef;R =双(序数([],exPostDS.Rating ratingsList));S = dummyRank (R);rocObj2 = rocmetrics (D S 1); xVal = rocObj2.Metrics.FalsePositiveRate; yVal = rocObj2.Metrics.TruePositiveRate; auc = rocObj2.AUC; accRatio = (auc-0.5)/maxAcc; fprintf(的精度比实际评级:% 5.3 f \ n ',accRatio);
精度比实际评分:0.850
xPerfect (1) = 0;xPerfect (2) = fracTotDef;xPerfect (3) = 1;yPerfect (1) = 0;yPerfect (2) = 1;yPerfect (3) = 1;xNaive (1) = 0;xNaive (2) = 1;yNaive (1) = 0;yNaive (2) = 1; plot(xPerfect,yPerfect,“——k”xVal yVal,“b”xNaive yNaive,“同意”)包含(所有公司的一部分)ylabel (的违约公司的一部分)标题(“累积准确性概要”)({传奇“完美的”,“实际”,“天真的”},“位置”,“东南”)文本(xVal (2) + 0.01, yVal -0.01 (2),“CCC”)文本(xVal (3) + 0.01, yVal -0.02 (3),“B”)文本(xVal (4) + 0.01, yVal -0.03 (4),“BB”)

帽的阅读信息的关键是在情节的“缺陷”,贴上评级“CCC”,“B”,“BB”。例如,第二扭结与第二最低评级,“B”,它位于(0.097,0.714)。这意味着9.7%的客户排名“B”或更低,他们占71.4%的违约。

一般情况下,精度比应该被视为相对的,而不是绝对的措施。例如,您可以添加的帽预测评级相同的情节,并计算其精度比比较它与精度比实际的评级。

弹性分组环=双(序数(predDS.PredRating, [], ratingsList));传播= dummyRank (rpr);rocObj3 = rocmetrics (D,传播,1);xValPred = rocObj3.Metrics.FalsePositiveRate;yValPred = rocObj3.Metrics.TruePositiveRate;aucPred = rocObj3.AUC;accRatioPred = (aucpred - 0.5) / maxAcc;流(的预测精度比评级:% 5.3 f \ n ',accRatioPred);
预测精度比评级:0.811
情节(xPerfect yPerfect,“——k”xVal yVal,“b”xNaive yNaive,“同意”,xValPred yValPred,“:r”)包含(所有公司的一部分)ylabel (的违约公司的一部分)标题(“累积准确性概要”)({传奇“完美的”,“实际”,“天真的”,“预测”},“位置”,“东南”)

预测评级的准确性比越小,和它的限制主要是低于上限的实际评级。这是合理的,因为实际评级分配信贷委员会考虑预测的评级额外的信息可以重要调整评级。

最后的评论

MATLAB提供了一个广泛的机器学习工具,除了袋装决策树,可以使用上下文中的信用评级。在统计和机器学习工具箱可以找到分类判别分析等工具和朴素贝叶斯分类器。MATLAB还提供了深度学习工具箱™。同样,数据库工具箱和MATLAB部署工具可以为您提供更大的灵活性来适应工作流这里介绍自己的喜好和需求。

这里没有计算违约概率。信用评级的违约概率通常是计算基于信用评级迁移的历史。看到transprob(金融工具箱)参考页面在金融工具箱™的更多信息。

参考书目

[1]奥特曼,E。“财务比率分析、判别分析和预测企业破产。”金融杂志。23卷,4号,(1968年9月),页589 - 609。

[2]巴塞尔银行监管委员会。“内部评级系统”的研究验证。Bank for International Settlements (BIS), Working Papers No. 14, revised version, May 2005. Available at:https://www.bis.org/publ/bcbs_wp14.htm

[3]巴塞尔银行监管委员会。“资本计量和资本标准的国际趋同:修订后的框架。”Bank for International Settlements (BIS), comprehensive version, June 2006. Available at:https://www.bis.org/publ/bcbsca.htm

[4]吕弗勒,G。,P. N. Posch.信用风险建模使用Excel VBA。西萨塞克斯郡,英格兰:威利金融,2007。

默顿[5],R。“公司债券的定价:利率的风险结构。”金融杂志。2号卷。29日,(1974年5月),页449 - 70。