主要内容

信用评级装袋决策树

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

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

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

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

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

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

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

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

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

我们加载历史的数据用逗号分隔的文本文件CreditRating_Historical.dat。我们选择使用文本文件,但是用户访问数据库工具箱™当然可以直接从数据库加载这个信息。

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

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

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

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

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

  • 销售/总资产(S_TA)

接下来,我们有一个行业标签,一个整数值从1到12。最后一列已经分配给客户的信用评级。我们将数据加载到一个数组中。

creditDS = readtable (“CreditRating_Historical.dat”);

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

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

X = [creditDS。WC_TA creditDS。RE_TA creditDS。EBIT_TA creditDS.MVE_BVTDcreditDS。S_TA creditDS.Industry];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、4和6脱颖而出。功能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.2874 AA: 0.6919 AAA级:0.0156 BBB: 33083年0.0051客户:RE / TA = 0.24 MVE BVTD = 4 = 1.51行业预测评级:BBB分类得分:答:0.0751 BB: 0.0017 BBB: 63830年0.9232客户:RE / TA = 0.18 MVE BVTD = 1.69 = 7预测评级:分类得分:答:0.6629 AA: 0.0067 B: 0.0008 BB: 0.0005 BBB: 0.3291

记录预测评级和相应的分数可以有用的定期评估分类器的质量。我们在存储这些信息数组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)告诉我们有多少客户收到的“a”评级信用委员会,但被预测为“AA”自动分类器。人们还可以在比例呈现这个矩阵。正常化的每个值的观测数有相同的真正的评级。

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

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

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

对于每个特定的评级,我们可以计算另一个衡量预测和实际评级之间的协议。我们可以建立一个接受者操作特征(ROC)曲线使用perfcurve从统计和机器学习的工具箱函数,检查曲线下的面积(AUC)。的perfcurve函数作为参数的实际评级,这是我们的基准,标准我们比较反对,BBB的分数由自动分类过程。让我们建立一个中华民国,计算评级的AUC BBB在我们的例子中。

[xVal yVal, ~, auc] = perfcurve (exPostDS.Rating predDS.BBB,“BBB”);情节(xVal yVal)包含(的假阳性率)ylabel (“真阳性率”)文本(0.5,0.25,strcat (“AUC =”num2str (auc)),“EdgeColor”,“k”)标题(“BBB ROC曲线,预测与实际评级”)

这是一个解释如何建立中华民国。回想一下,为每个客户自动分类器返回一个得分为每个信用评级分类,特别是对“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”)。中华民国曲线是由策划真阳性的比例(灵敏度),与假阳性(1-specificity),随着阈值的变化,从0到1。

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

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

不难看到perfcurve函数也可以用来构建帽。我们比较的标准不是一个等级,和之前一样,但默认的国旗,我们的加载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);[xVal yVal, ~, auc] = perfcurve (D S 1); accRatio = (auc-0.5)/maxAcc; fprintf(的精度比实际评级:% 5.3 f \ n ',accRatio);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”)
精度比实际评分:0.850

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

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

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

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

最后的评论

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

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

参考书目

[1]奥特曼,E。,"Financial Ratios, Discriminant Analysis and the Prediction of Corporate Bankruptcy,"金融杂志4号,卷。23日,(1968年9月),页589 - 609。

[2]巴塞尔银行监管委员会”,研究验证的内部评级系统,“国际清算银行(BIS), 14号工作文件修订版本,2005年5月。可以在:https://www.bis.org/publ/bcbs_wp14.htm。

[3]巴塞尔银行监管委员会,“资本计量和资本标准的国际趋同:修订框架,“国际清算银行(BIS),全面的版本,2006年6月。可以在:https://www.bis.org/publ/bcbsca.htm。

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

默顿[5],R。,"On the Pricing of Corporate Debt: The Risk Structure of Interest Rates,"金融杂志2号,卷。29日,(1974年5月),页449 - 70。