主要内容

转移概率的估计

简介

信用评级根据借款人的信用价值对他们进行排名。尽管这一排名本身是有用的,但机构也有兴趣了解特定评级类别的借款人被升级或降级到不同评级的可能性有多大,尤其是他们违约的可能性有多大。

过渡概率提供一种描述债务人(通常是公司)信用质量过去变化的方法,是许多风险管理应用程序的基本输入。财务工具箱™软件支持使用队列和持续时间(也称为危险率或强金宝app度)方法来估计过渡概率transprob以及相关的函数。

请注意

本节中使用的示例数据集使用单个转换矩阵进行模拟。没有尝试去匹配转换率的历史趋势。

估计转换概率

Data_TransProb.mat文件包含样本信用评级数据。

负载Data_TransProb数据(1:10,:)
ans = ID日期评级  __________ _____________ ______ ' 00010283 10 - 11月- 1984 ' ' ' ' CCC ' ' 00010283 ' ' 12 - 5月- 1986 ' ' B ' ' 00010283 ' '截止1988年6月29日的“CCC”“00010283”“12 - 12月- 1991 ' ' D ' ' 00013326 ' ' 09 - 2月- 1985 ' ' ' ' 00013326 ' ' 24 - 2月- 1994 AA ' ' 00013326 ' ' ' ' 10 - 11月- 2000年“BBB ' ' 00014413 ' ' 23 - 12月- 1982 ' ' B ' ' 00014413 ' ' 20 - 4月- 1988 ' '空气' ' 00014413 ' ' 16 - 1月- 1998 ' ' B '

样例数据被格式化为包含三列的单元格数组。每一行包含一个ID(第1列)、一个日期(第2列)和一个信用评级(第3列)。分配的信用评级对应于相关日期的相关ID。同一ID对应的所有信息必须存储在连续的行中。在本例中,id、日期和评级以字符向量格式存储,但也可以以数字格式输入。

在本例中,最简单的调用语法transprob通过了nRecord年代,3.单元格数组作为唯一的输入参数。默认的startDate可以而且endDate是数据中最早和最晚的日期。默认的估计算法为持续时间法,估计一年的转换概率:

transMat0 = transprob(数据)
transMat0 = 93.1170 5.8428 0.8232 0.1763 0.0376 0.0012 0.0001 0.0017 1.6166 93.1518 4.3632 0.602 0.1626 0.0055 0.0004 0.0396 0.1237 2.9003 92.2197 4.0756 0.5365 0.0661 0.0028 0.0753 0.0236 0.2312 5.0059 90.1846 3.7979 0.4733 0.0642 0.2193 0.1134 0.6357 5.7960 88.9866 3.4497 0.2919 0.7050 0.0010 0.0062 0.1081 0.8697 7.3366 86.7215 2.5169 2.4399 0.0002 0.0011 0.0120 0.2582 1.4294 4.2898 81.2927 12.7167 0000 0000 0000 0000 0000 00

提供明确的开始和结束日期,否则,两个不同数据集的估计窗口可能不同,估计可能不具有可比性。从这一点开始,假设感兴趣的时间窗口是从1995年底到2000年底的五年期间。为了进行比较,请计算此时间窗口的估计值。首先使用持续时间算法(默认选项),然后队列算法显式设置。

startDate可以=1995年- 12月31日的;endDate =2000年- 12月31日的;transMat1 = transprob(数据,startDate可以的startDate可以,“endDate”,endDate) transMat2 = transprob(数据,startDate可以的startDate可以,“endDate”endDate,...“算法”“队列”
transMat1 = 90.6236 7.9051 1.0314 0.4123 0.0210 0.0020 0.0003 0.0043 4.4780 89.5558 4.5298 1.1225 0.2284 0.0094 0.0009 0.0754 0.0892 0.0050 0.0832 0.1029 0.8572 10.7918 83.0204 3.9971 0.7001 0.1313 0.3992 0.1043 0.3745 2.2962 14.0954 78.9840 3.0013 0.0463 1.0980 0.0113 0.0544 0.7055 3.2925 15.4350 75.5988 1.8166 3.0860 0.0044 0.0189 0.1903 1.9743 6.2320 10.2334 75.9983 5.3484 0000 0000 00 100.0000 transMat2 = 90.1554 8.5492 0.9067 0.3886 0000 0 4.951288.5221 5.1763 1.0503 0.2251 00 0.0750 0.2770 6.6482 86.2188 6.0942 0.6233 0.0693 0 0.0693 0.0794 0.8737 11.6759 81.6521 4.3685 0.7943 0.1589 0.3971 0.1002 0.4008 1.9038 15.4309 77.8557 3.4068 0 0.9018 00 0.2262 2.4887 17.4208 74.2081 2.2624 3.3937 00 0.7576 1.5152 6.0606 10.6061 75.0000 6.0606 0000 0000 0000 0000 0000 0 100.0000

默认情况下,队列算法内部获得信用评级的年度快照,但每年的快照数量是使用参数/值对定义的snapsPerYear.要使用季度快照获得估计:

transMat3 = transprob(数据,startDate可以的startDate可以,“endDate”endDate,...“算法”“队列”“snapsPerYear”4)
transMat3 = 90.4765 8.0881 1.0072 0.4069 0.015 0.0002 0.0032 4.5949 89.3216 4.6489 1.1239 0.2276 0.0074 0.0007 0.0751 0.3747 6.3158 86.7380 5.6344 0.7675 0.0856 0.0040 0.0800 0.0958 0.7967 11.0441 82.6138 4.1906 0.7230 0.1372 0.3987 0.1028 0.3571 2.3312 14.4954 78.4276 3.1489 0.0383 1.0987 0.0084 0.0399 0.6465 3.0962 16.0789 75.1300 1.9044 3.0956 0.0031 0.0125 0.1445 1.8759 10.7022 75.6300 5.3705 0000 0000 0 100.0000

这两个持续时间而且队列默认情况下计算一年的转换概率,但是转换的时间间隔可以使用参数/值对定义transInterval.例如,要获得两年的转换概率,使用队列具有相同快照周期和估计窗口的算法:

transMat4 = transprob(数据,startDate可以的startDate可以,“endDate”endDate,...“算法”“队列”“snapsPerYear”4“transInterval”,2)
transMat4 = 82.2358 14.6092 2.2062 0.8543 0.0711 0.0074 0.0011 0.0149 8.2803 80.4584 8.3606 2.2462 0.4665 0.0316 0.0030 0.1533 0.9604 11.1975 76.1729 9.7284 1.5322 0.2044 0.0162 0.1879 0.2483 2.0903 18.8440 69.5145 6.9601 1.2966 0.2329 0.8133 0.2129 0.8713 5.4893 23.5776 62.6438 4.9464 0.1390 2.1198 0.0378 0.1895 1.7679 7.2875 24.9444 57.1783 2.8816 5.7132 0.0154 0.0716 0.6576 4.2157 11.4465 16.3455 57.4078 9.8399 0000 0000 100.0000

估计不同评级尺度的转换概率

数据集数据Data_TransProb.mat包含使用违约评级量表的样本信用评级{' aaa ',' aa ',' a ',' bbb ',' bb ',' b ',' ccc ',' d '}.它还包含数据集dataIGSG评级为投资级(“搞笑”)、投机等级(“SG”),以及default (' D ').要估计此数据集的转换矩阵,请使用标签论点。

负载Data_TransProbstartDate可以=1995年- 12月31日的;endDate =2000年- 12月31日的;datigsg (1:10,:) transMatIGSG = transprob(datigsg,“标签”, {“搞笑”“SG”' D '},...startDate可以的startDate可以,“endDate”endDate)
ans = '00011253' '04- 4- 1983' 'IG' '00012751' ' 1985年2月17日' 'SG' '00012751' ' 1986年5月19日' 'D' '00014690' ' 1983年11月21日' 'IG' '00012144' ' 1994年5月7日' 'IG' '00012144' ' 2000年1月23日' 'SG' '00012144' ' 2001年8月20日' 'IG' '00012937' '07- 2月1984' 'IG' transMatIGSG = 98.1986 1.5179 0.2835 8.5396 89.4891 1.9713 00 100.0000

还有另一个数据集,dataIGSGnum的信息dataIGSG,除了评级被映射到一个数字尺度,其中“搞笑”= 1“SG”= 2,' D ' = 3.要估计转换矩阵,请使用标签可选参数,指定数值比例作为单元格数组。

dataIGSGnum (1:10,:)注{1,2,3}和num2cell(1:3)是等价的;Num2cell很方便%,当评分数量较大时transMatIGSGnum = transprob(datigsgnum,“标签”{1,2,3},...startDate可以的startDate可以,“endDate”endDate)
ans = '00011253' '04- 4- 1983'[1] '00012751' '17- 2 -1985'[2] '00012751' ' 1986年5月19日'[3]'00014690' '17- 1- 1983'[1]'00012144' '21- 11 -1984'[1]'00012144' '25- 3- 1992'[2]'00012144' '07- 1994年5月'[1]'00012144' '23- 1- 2000'[2]'00012144' '20- 2001年8月' [1]'00012937' '07- 2 -1984' [1]transMatIGSGnum = 98.1986 1.5179 0.2835 8.5396 89.4891 1.9713 00 100.0000

任何时候,输入数据集包含未包含在默认评级量表中的评级{' aaa ', ' aa ', ' a ', ' bbb ', ' bb ', ' b ', ' ccc ', ' d '}时,必须使用标签可选参数。例如,如果数据集包含评级“AAA”,…,'CCC, 'D',NR的(未分级),使用标签使用这个单元格数组{' aaa ',' aa ',' a ',' bbb ',' bb ',' b ',' ccc ',' d ',' nr '}

使用包含的转换矩阵NR评级

这个例子演示了NR的(未评级)评级由transprob,以及如何得到转换矩阵,使用NR的对评级信息进行了估计,但没有显示NR的最终转换概率的评级。

数据集数据Data_TransProb.mat包含使用违约评级量表的样本信用评级{' aaa ',' aa ',' a ',' bbb ',' bb ',' b ',' ccc ',' d '}

负载Data_TransProb头(数据,12)
ans = 12×3表ID日期评级  __________ _____________ ______ ' 00010283 10 - 11月- 1984 ' ' ' ' CCC ' ' 00010283 ' ' 12 - 5月- 1986 ' ' B ' ' 00010283 ' '截止1988年6月29日的“CCC”“00010283”“12 - 12月- 1991 ' ' D ' ' 00013326 ' ' 09 - 2月- 1985 ' ' ' ' 00013326 ' ' 24 - 2月- 1994 AA ' ' 00013326 ' ' ' ' 10 - 11月- 2000年“BBB ' ' 00014413 ' ' 23 - 12月- 1982 ' ' B ' ' 00014413 ' ' 20 - 4月- 1988 ' '空气' ' 00014413 ' ' 16 B - 1月- 1998 ' ' ' ' 00014413 ' ' 25 - 11月- 1999“BB”“00012126”“1985年- 2月17日“CCC”

将转换替换为“B”过渡到NR的对于第一家公司。注意,从有一个后续的转换NR的“CCC”

dataNR =数据;dataNR。评级{2} =NR的;dataNR。评级{7} =NR的;头(dataNR, 12)
ans = 12×3表ID日期评级  __________ _____________ ______ ' 00010283 10 - 11月- 1984 ' ' ' ' CCC ' ' 00010283 ' ' 12 - 1986年5月——“NR ' ' 00010283 ' '截止1988年6月29日的“CCC”“00010283”“12 - 12月- 1991 ' ' D ' ' 00013326 ' ' 09 - 2月- 1985 ' ' ' ' 00013326 ' ' 24 - 2月- 1994 AA ' ' 00013326 ' ' ' ' 10 - 11月- 2000 ' ' NR ' ' 00014413 ' ' 23 - 12月- 1982 ' ' B ' ' 00014413 ' ' 20 - 4月- 1988 ' ' BB ' ' 00014413 ' ' 16 B - 1月- 1998 ' ' ' ' 00014413 ' ' 25 - 11月- 1999 ' ' BB“00012126”“1985年- 2月17日“CCC”

NR的被视为另一种评级。转换矩阵显示了估计的转换到和离开的概率NR的.在本例中,transprob函数使用“队列”算法,以及NR的评级被视为另一个评级。属性时存在相同的行为transprob函数与“持续时间”算法。

RatingsLabelsNR = {“AAA”“AA”“一个”“BBB”“BB”“B”“CCC”' D 'NR的};[MatrixNRCohort,TotalsNRCohort] = transprob(dataNR,...“标签”RatingsLabelsNR,...“算法”“队列”);流('转移概率,队列,包括NR:\n') disp (array2table (MatrixNRCohort,“VariableNames”RatingsLabelsNR,...“RowNames”RatingsLabelsNR))流('所有超出给定等级的过渡,包括6个超出NR(5个NR->NR, 1个NR->CCC):\n') disp (array2table (TotalsNRCohort.totalsVec,“VariableNames”, RatingsLabelsNR))
转移概率,队列,包括NR:AAA AA BBB BB B D NR CCC  ________ _______ ________ _______ ________ ________ ________ ________ ________ AAA 93.135 5.9335 0.74557 0.15533 0.031066 0 0 0 0 AA 0 0 1.7359 92.92 4.5446 0.58514 0.15604 0.039009 0.019505 0.12683 2.9716 91.991 4.3124 0.4711 0.054358 0.072477 0 BBB 0.021048 0.37887 5.0726 89.771 4.0413 0.46306 0.042096 0.21048 0 BB 0.022099 0.1105 0.68508 6.232 88.376 3.6464 0.28729 0.64088 0 B 0 0 0.076161 0.72353 7.997 86.215 2.7037 2.2848 0 CCC 0 0 0 0.30936 1.8561 4.485780.897 12.374 0.07734 D 00 00 00 00 0 100 0 NR 00 00 00 00 00 16.667 0 83.333给定等级以外的总转换,包括6个NR(5个NR->NR, 1个NR->CCC): AAA AAA BBB BBB CCC D NR ____ ____ ____ ____ ____ ____ ____ ____ __ 3219 5127 5519 4751 4525 2626 1293 4050 6

将转换删除到NR的从转换矩阵中,你需要使用“excludeLabels”的可选名称-值输入参数transprob

“标签”输入transprob可能包括也可能不包括需要排除的标签。在下面的示例中,使用NR出于显示目的,将从标签中删除评级,但通过RatingsLabelsNRtransprob也会起作用。

RatingsLabels = {“AAA”“AA”“一个”“BBB”“BB”“B”“CCC”' D '};[MatrixCohort,TotalsCohort] = transprob(dataNR,“标签”RatingsLabels,“ExcludeLabels”NR的“算法”“队列”);流('转移概率,队列,后处理去除NR后:\n'
转移概率,队列,后处理去除NR后:
disp (array2table (MatrixCohort,“VariableNames”RatingsLabels,...“RowNames”, RatingsLabels))
转移概率,队列,后处理去除NR后:AAA AA BBB BB B CCC D  ________ _______ ________ _______ ________ ________ ________ ________ AAA 93.135 5.9335 0.74557 0.15533 0.031066 1.7362 92.938 4.5455 0.58525 0.15607 0 0 0 AA 0 0 0.039017 0.12683 2.9716 91.991 4.3124 0.4711 0.054358 0.072477 BBB 0.021048 0.37887 5.0726 89.771 4.0413 0.46306 0.042096 0.21048 BB 0.022099 0.1105 0.68508 6.232 88.376 3.6464 0.28729 0.64088 B 0 0 CCC 0 0 0 0.076161 0.72353 7.997 86.215 2.7037 2.2848 0.3096 1.8576 - 4.4892 80.96 - 12.384 D 0 0 0 0 0 0 0 100总过渡超出给定评级,AA和CCC有一个比以前少:AAA AAA BBB BBB CCC D ____ ____ ____ ____ ____ ____ ____ ____ 3219 5126 5519 4751 4525 2626 1292 4050
流('给定评级的总转换,AA和CCC比以前少了一个:\n'
超出给定评级的总转换,AA和CCC比以前少了一个
disp (array2table (TotalsCohort.totalsVec,“VariableNames”, RatingsLabels))
AAA AA BBB BB B CCC D  ____ ____ ____ ____ ____ ____ ____ ____ 3219 5126 5519 4751 4525 2626 1292 4050

所有过渡都涉及到NR的从样本中移除,但仍然使用所有其他转换来估计转换概率。在这个例子中,从NR的“CCC”已移除,以及过渡从“AA”NR的(以及从NR的NR的).这意味着第一家公司仍在为转型做出贡献“CCC”“CCC”对于估计,只有与该公司花费的时间重叠的时期NR的已从样本中删除,另一家公司也是如此。

这个过程不同于去除NR的数据本身的行。

例如,如果您删除NR的在这个例子中,第一家公司似乎保持在其初始评级“CCC”从1984年的初始日期一直到1991年的违约事件。使用前面的方法,估计知道公司从“CCC”在某一时刻,它知道它没有停留在“CCC”一直都是。

如果NR的行被删除为第二公司,该公司似乎一直留在样本中作为一个“AA”公司直到样品结束。使用前面的方法,估计知道该公司不再是一家“AA”早些时候。

dataNR2 = dataNR;dataNR2([2 7],:) = [];头(dataNR2, 12)
ans = 12×3表ID日期评级  __________ _____________ ______ ' 00010283“10 - 11月- 1984年“CCC”“00010283”“1988年6月29日“CCC”“00010283“12 - 12月- 1991 ' ' D ' ' 00013326 ' ' 09 - 2月- 1985 ' ' ' ' 00013326 ' ' 24 - 2月- 1994 AA ' ' 00014413 ' ' ' ' 23 - 12月- 1982 ' ' B ' ' 00014413 ' ' 20 - 4月- 1988年“BB ' ' 00014413 ' ' 16 B - 1月- 1998 ' ' ' ' 00014413 ' ' 25 - 11月- 1999 ' ' BB“00012126”“1985年- 2月17日“CCC ' ' 00012126 ' ' 08 - 3月- 1989 ' ' D ' ' 00011692 ' ' 11 - 1984年5月——“BB”

如果NR的行被移除,转换矩阵将会不同。停留的概率“CCC”会稍微上升,停留在“AA”

转换矩阵是不同的。停留的概率“CCC”会稍微上升,停留在“AA”

[MatrixCohort2,TotalsCohort2] = transprob(dataNR2,...“标签”RatingsLabels,...“算法”“队列”);流('转移概率,队列,如果NR行从数据中删除:\n') disp (array2table (MatrixCohort2,“VariableNames”RatingsLabels,...“RowNames”RatingsLabels))流(“超出给定评级的转换总数,超出CCC和AA的转换数量更多:\n”) disp (array2table (TotalsCohort2.totalsVec,“VariableNames”, RatingsLabels))
转移概率,队列,如果NR行从数据中移除:
disp (array2table (MatrixCohort2,“VariableNames”RatingsLabels,...“RowNames”, RatingsLabels))
转移概率,队列,如果NR行从数据中移除:AAA AA BBB BB B CCC D  ________ _______ ________ _______ ________ ________ ________ ________ AAA 93.135 5.9335 0.74557 0.15533 0.031066 1.7346 92.945 4.541 0.58468 0.15592 0 0 0 AA 0 0 0.038979 0.12683 2.9716 91.991 4.3124 0.4711 0.054358 0.072477 BBB 0.021048 0.37887 5.0726 89.771 4.0413 0.46306 0.042096 0.21048 BB 0.022099 0.1105 0.68508 6.232 88.376 3.6464 0.28729 0.64088 B 0 0 CCC 0 0 0 0.076161 0.72353 7.997 86.215 2.7037 2.2848 0.30888 1.8533 - 4.4788 81.004 - 12.355 D 0 0 0 0 0 0 0 100
流(“超出给定评级的转换总数,超出CCC和AA的转换数量更多:\n”
超出给定评级的过渡总数,超出CCC和AA的过渡数量更多:
disp (array2table (TotalsCohort2.totalsVec,“VariableNames”, RatingsLabels))
AAA AA BBB BB B CCC D  ____ ____ ____ ____ ____ ____ ____ ____ 3219 5131 5519 4751 4525 2626 1295 4050

估计时间点和整个周期的概率

转移概率估计对估计窗口的长度很敏感。当估计窗口很小时,估计只捕获最近的信用事件,而且这些事件每年都可能发生重大变化。这些被称为时间点(PIT)估计。相比之下,大的时间窗口产生相当稳定的估计,即较长时间内的平均转换率。这些被称为整个周期(TTC)估计。

PIT概率的估计需要重复调用transprob使用滚动估计窗口。使用transprobprep每一次都是重复的呼唤transprob是必需的。transprobprep对独立于估计窗口的原始数据集执行预处理步骤。的好处transprobprep重复调用的次数是否更大transprob增加。此外,性能从transprobprep更重要的是队列算法。

负载Data_TransProbprepData = transprobprep(数据);年份:1991:2000;nYears =长度(年);nRatings = length(prepData.ratingsLabels);transMatPIT =零(nRatings,nRatings,nYears);算法=“持续时间”;sampleTotals(nYears,1) = struct(“totalsVec”[],“totalsMat”[],...“算法”、算法);t = 1:nYears startDate = [“31-Dec -”num2str(1年(t)));endDate = [“31-Dec -”num2str(年(t)));[transMatPIT(:,:,t),sampleTotals(t)] = transprob(prepData,...startDate可以的startDate可以,“endDate”endDate,“算法”、算法);结束

以下是1993年PIT的过渡矩阵。回想一下,样本数据集包含模拟的信用迁移,因此本例中的PIT估计与实际的历史转换率不匹配。

transMatPIT(:,:, 1993年= =)
Ans = 95.3193 4.5999 0.0802 0.0004 0.0002 0.0000 0.0000 0.0000 0.0000 0.0237 2.1731 94.5931 3.3057 0.0254 0.0126 0.0002 0.0000 0.0000 0.0003 0.0372 3.2585 95.2914 1.3876 0.0250 0.0001 0.000 0.0131 0.0000 0.0000 0.0005 0.0657 3.8292 92.7474 3.3459 0.0111 0.0001 0.0000 0.0001 0.00001 0.0113 0.0000 0.0000 0.0005 0.0459 0.5026 11.1621 84.9315 3.3574 0000 0000 0000 00

结构数组存储sampleTotals的可选输出transprob.的sampleTotals结构包含在每个评级上花费的总时间的摘要信息,以及考虑的每年的每个评级的转换数量。有关的更多信息sampleTotals结构,请参阅transprob

作为一个例子,sampleTotals这里使用的是1993年的结构。用于每个评级的总时间存储在totalsVec结构场。每个评级的总转换存储在totalsMat字段。第三个领域,算法,表示生成结构时使用的算法。

sampleTotals(年= = 1993)。totalsVecsampleTotals(年= = 1993)。totalsMatsampleTotals(年= = 1993)。算法
Ans = 144.4411 230.0356 262.2438 204.9671 246.1315 147.0767 54.9562 215.1479 Ans = 07 0 0 0 0 0 0 5 0 8 0 0 0 0 0 0 0 6 04 20 0 0 0 0 07 0 0 0 0 0 0 0 1 13 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Ans = duration

为了得到TTC转换矩阵,传递sampleTotals构造数组到transprobbytotals.在内部,transprobbytotals控件中的信息聚合sampleTotals结构,以获得本例中考虑的10年中用于每个评级的总时间,以及同一时期从每个评级转换的总次数。transprobbytotals利用聚合信息得到TTC矩阵,即平均一年转换矩阵。

transMatTTC = transprobbytotals(样本总数)
transMatTTC = 92.8544 6.1068 0.7463 0.2761 0.0123 0.0009 0.0001 0.0032 2.9399 92.2329 3.8394 0.7349 0.1676 0.0050 0.0004 0.0799 0.2410 4.5963 90.3468 3.9572 0.6909 0.0521 0.0025 0.1133 0.0530 0.4729 7.9221 87.2751 3.5075 0.4650 0.0791 0.2254 0.0460 0.1636 1.1873 9.3442 85.4305 2.9520 0.1150 0.7615 0.0031 0.0152 0.2608 1.5563 10.4468 83.8525 1.9771 1.8882 0.0009 0.0041 0.0542 0.8378 2.9996 7.3614 82.4758 6.2662 0000 0000 00 100.0000

可以通过直接调用获得相同的TTC矩阵transprob,将估算窗口设置为所考虑的10年。但是它是更有效的使用sampleTotals结构,只要它们可用。(注意,对于持续时间算法,当闰年是样本的一部分时,这些可选的工作流程可能导致估计中的小数值差异。)

估计转换概率,利用1996年至2000年的5年时间窗口估算了1年的过渡矩阵。这是TTC矩阵的另一个例子,也可以使用sampleTotals结构数组。

transprobbytotals (sampleTotals(年> = 1996年< = 2000)
Ans = 90.6239 7.9048 1.0313 0.4123 0.0210 0.0020 0.0003 0.0043 4.4776 89.5565 4.5294 1.1224 0.2283 0.0094 0.0009 0.0754 0.3982 6.1159 87.0651 5.4797 0.7636 0.0892 0.0050 0.0832 0.1029 0.8571 10.7909 83.0218 3.9968 0.7001 0.1313 0.3991 0.1043 0.3744 2.2960 14.0947 78.9851 3.0012 0.0463 1.0980 0.0113 0.0544 0.7054 3.2922 15.4341 75.6004 1.8165 3.0858 0.0044 0.0189 0.1903 1.9742 6.2318 10.2332 75.9990 5.3482 0000 0000 000 100.0000

估计t违约概率

通过改变开始和结束日期,估计所考虑的数据量会发生变化,但是在默认情况下,输出仍然包含一年的转换概率。属性可以更改默认行为transInterval参数,如图所示估计转换概率

然而,当t的值的整个范围都需要年转换概率t例如,1年、2年、3年、4年和5年的转换概率,调用它更有效transprob获取可选输出sampleTotals.你可以用同样的sampleTotals结构可以用来得到t对于任意转换区间的年转换矩阵t.给定一个sampleTotals结构和一个转换区间,可以通过使用得到相应的转换矩阵transprobbytotals

负载Data_TransProbstartDate可以=1995年- 12月31日的;endDate =2000年- 12月31日的;[~,sampleTotals] = transprob(数据,startDate可以的...startDate可以,“endDate”, endDate);DefProb = 0 (7,5);t = 1:5 transMatTemp = transprobbytotals(样本总数,“transInterval”t);DefProb(:,t) = transMatTemp(1:7,8);结束DefProb
DefProb = 0.0043 0.0169 0.0377 0.0666 0.1033 0.0754 0.1542 0.2377 0.3265 0.4213 0.0832 0.1936 0.3276 0.4819 0.6536 0.3992 0.8127 1.2336 1.6566 2.0779 1.0980 2.1189 3.0668 3.9468 4.7644 3.0860 5.6994 7.9281 9.8418 11.4963 5.3484 9.8053 13.5320 16.6599 19.2964

估计Bootstrap置信区间

transprob还返回idTotals结构数组,其中包含每个ID或公司在每个评级上花费的总时间,以及从每个评级转换出的总时间。有关的更多信息idTotals结构,请参阅transprob.的idTotals结构类似于sampleTotals结构(见估计时间点和整个周期的概率),但idTotals拥有ID级别的信息。因为大多数公司只在几个评级之间迁移,数值数组在idTotals存储为稀疏数组以减少内存需求。

您可以使用idTotals构造数组以使用自举过程估计转换概率的置信区间,如下面的示例所示。要做到这一点,请调用transprob并保留第三个输出参数,idTotals.的idTotals显示示例中最后一家公司的字段。在估算窗口内,这家公司花了将近一年的时间“AA”然后升级为“AAA”

负载Data_TransProbstartDate可以=1995年- 12月31日的;endDate =2000年- 12月31日的;[transMat,~,idTotals] = transprob(数据,...startDate可以的startDate可以,“endDate”, endDate);%用于每个评分的总时间全部(idTotals(结束).totalsVec)%每个评级的转换总数全部(idTotals(结束).totalsMat)%的算法idTotals .algorithm(结束)
ans = 4.0820 - 0.9180 0 0 0 0 0 0 ans = 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ans =持续时间

下一步,使用bootstrp从统计和机器学习工具箱™与transprobbytotals作为自举函数和idTotals作为数据的样本。每个自举样本都对应于一个数据集,该数据集由对原始数据进行替换抽样的公司组成。但是,您不必从原始数据中抽取公司,因为有自举idTotals样本包含计算转换概率所需的所有信息。transprobbytotals在每次引导中聚合所有结构idTotals抽样并找到相应的转换矩阵。

估计转移矩阵的95%置信区间,并显示违约概率及其上下置信界限:

PD = transMat(1:7,8);bootstat = bootstrp(100,@(合计)transprobbytotals(合计),idTotals);Ci = prctile(bootstat,[2.5 97.5]);% 95%置信度CIlower =重塑(ci(1,:),8,8);CIupper =重塑(ci(2,:),8,8);PD_LB = CIlower(1:7,8);PD_UB = CIupper(1:7,8);[pd_lb pd pd_ub]
Ans = 0.0004 0.0043 0.0106 0.0028 0.0754 0.2192 0.0126 0.0832 0.2180 0.1659 0.3992 0.6617 0.5703 1.0980 1.7260 1.7264 3.0860 4.7602 1.7678 5.3484 9.5055

集团信用评级

信用评级尺度可以或多或少地细化。例如,有带有限定词的评级(例如,“AA +”“BB -”,等等),整个评分(“AA”“BB”等)、投资级或投机级(“搞笑”“SG”)类别。给定一个具有更细粒度级别的信用评级的数据集,可以对不那么细粒度类别的转换概率感兴趣。例如,您可能对给定具有完整评级的数据集的投资和投机评级的过渡矩阵感兴趣。使用transprobgrouptotals对于此计算,如下面的示例所示。样本数据集数据具有完整的信用评级:

负载Data_TransProbstartDate可以=1995年- 12月31日的;endDate =2000年- 12月31日的;:数据(1:5)
ans = '00010283' '10- 11 -1984' 'CCC' '00010283' ' 1986 - 5 - 5' 'B' '00010283' ' 1988 - 6 - 29 ' 'CCC' '00010283' '12- 12- 1991' 'D' '00013326' '09- 1985 - 2 ' 'A'

呼叫transprob返回转换矩阵和八个(“AAA”' D ')整体信用评级。调用后,将显示每个信用评级转换次数的数组transprob

[transMat,sampleTotals,idTotals] = transprob(数据,startDate可以的startDate可以,...“endDate”, endDate);sampleTotals.totalsMat
ans = 0 67 67 3 0 0 0 0 0 3 0 0 1 4 101 0 68 93 163 0 1 0 1 1 7 62 168 0 2 5 1 3 16 37 14 0 11 0 0 2 83 0 10 0 0 0 2 8 16 0 7 0 0 0 0 0 0 0 0

下一步,使用transprobgrouptotals将整个评级分为投资级和投机级。这个函数的第一个参数是totalsstruct。第二个参数表示评级类别之间的边。在本例中,评级为1到4 (“AAA”通过“BBB”)对应第一类(“搞笑”),评分5至7分(“BB”通过“CCC”)转至第二类(“SG”)和8级(' D ')是一个独立的范畴。transprobgrouptotals将花费在属于同一类别的评级上的总时间相加。例如,花费的总时间“AAA”通过“BBB”都被加起来作为花费的总时间“搞笑”transprobgrouptotals还将任意之间的转换总数相加“搞笑”评级和任何“SG”评级,例如,信用迁移“BBB”“BB”

然后可以将分组的总数传递给transprobbytotals得到投资等级和投机等级的转换矩阵。这两个totalsMat新的转换矩阵都是3.——- - - - - -3.,对应于分组的类别“搞笑”“SG”,' D '

sampleTotalsIGSG = transprobgrouptotals(sampleTotals,[4 7 8]) transMatIGSG = transprobbytotals(sampleTotalsIGSG)
sampleTotalsIGSG = totalsVec: [4.8591e+003 1.5034e+003 1.1621e+003] totalsMat: [3x3 double]算法:'duration' transMatIGSG = 98.1591 1.6798 0.1611 12.3228 85.6961 1.9811 00 100.0000

当总计结构数组传递给transprobgrouptotals,如果输入结构中的字段是稀疏的,则该函数将数组中的每个结构单独分组并保持稀疏性。利用这一特性的一种方法是计算投资级违约率和投机级违约率的置信区间估计Bootstrap置信区间).

PDIGSG = transMatIGSG(1:2,3);idTotalsIGSG = transprobgrouptotals(idTotals,[4 7 8]);bootstat = bootstrp(100,@(合计)transprobbytotals(合计),idTotalsIGSG);Ci = prctile(bootstat,[2.5 97.5]);% 95%置信度CIlower =重塑(ci(1,:),3,3);CIupper =重塑(ci(2,:),3,3);PDIGSG_LB = CIlower(1:2,3);PDIGSG_UB = CIupper(1:2,3);[pdigsg_lb pdigsg pdigsg_ub]
Ans = 0.0603 0.1611 0.2538 1.3470 1.9811 2.6195

使用非方阵矩阵

级别之间的转换概率和转换数量通常在报告时不使用' D '“默认”)行。例如,信用报告可以包含以下表格,表示每个评级开始的发行者数量(第一列),以及评级之间的转换数量(其余列):

初始AAA AAA BBB BBB CCC D AAA 98 88 91 0 0 0 0 0 0 AA 389 0 368 19 2 0 0 0 0 0 A 1165 1 21 1087 56 0 0 0 0 0 0 A 1165 1 21 1087 56 0 0 0 0 0 BBB 1435 0 289 1289 45 8 0 2 BB 915 0 0 1 60 776 73 2 3 B 867 0 0 17 88 715 39 17 CCC 112 0 0 0 13 34 61 13

类型兼容的合计结构中存储此表中的信息队列算法。有关的更多信息队列算法和合计结构,见transprob.的totalsMat在本例中,Field是一个非方数组。

定义合计结构总数。来talsVec = [98 389 1165 1435 915 867 112]; totals.totalsMat = [ 88 9 1 0 0 0 0 0; 0 368 19 2 0 0 0 0; 1 21 1087 56 0 0 0 0; 0 2 89 1289 45 8 0 2; 0 0 1 60 776 73 2 3; 0 0 1 7 88 715 39 17; 0 0 0 1 3 34 61 13]; totals.algorithm =“队列”

transprobbytotals而且transprobgrouptotals接受非平方的总计输入totalsMat字段。得到上表所对应的转换矩阵,并利用对应矩阵将评级分为投资级和投机级:

transMat = transprobbytotals(总计)分组到IG/SG,得到IG/SG转换矩阵totalsIGSG = transprobgrouptotals(总计,[4 7]);transMatIGSG = transprobbytotals(totalsIGSG)
transMat = 89.7959 9.1837 1.0204 0 0 0 0 0 0 94.6015 4.8843 0.5141 0 0 0 0 0 0.0858 1.8026 93.3047 4.8069 0 0 0 0 0 0 0 0.1394 6.2021 89.8258 3.1359 0.5575 0 0.1394 0 0 0.1093 6.5574 84.8087 7.9781 0.2186 0.3279 0 0 0.1153 0.8074 10.1499 82.4683 4.4983 1.9608 0 0 0 0.8929 2.6786 30.3571 54.4643 11.6071 transMatIGSG = 98.2183 1.7169 0.0648 3.6959 94.5618 1.7423

删除离群值

idTotals输出transprob也可以利用它来更新移除了一些异常值信息后的转移概率估计。欲知更多有关idTotals,请参阅transprob.例如,如果您知道数据中第4家和第27家公司的信用评级迁移信息有问题,您可以删除这些公司,并有效地更新转换概率如下:

负载Data_TransProbstartDate可以=1995年- 12月31日的;endDate =2000年- 12月31日的;[transMat,~,idTotals] = transprob(数据,startDate可以的...startDate可以,“endDate”, endDate);transMat
transMat = 90.6236 7.9051 1.0314 0.4123 0.0210 0.0020 0.0003 0.0043 4.4780 89.5558 4.5298 1.1225 0.2284 0.0094 0.0009 0.0754 0.3972 10.1164 87.0641 5.4801 0.7637 0.0892 0.0050 0.0832 0.1029 0.8572 10.7918 83.0204 3.9971 0.7001 0.1313 0.3992 0.3943 0.3745 2.2962 14.0954 78.9840 3.0013 0.0463 1.0980 0.0113 0.0544 0.7055 3.2925 15.4350 75.5988 1.8166 3.0860 0.0044 0.0189 0.1903 1.9743 6.2320 10.2334 75.9983 5.3484 0000 0000 0 100.0000 nIDs = length(idTotals);keepInd = setdiff(1:nIDs,[4 27]);transMatNoOutlier = transprobbytotals(idTotals(keepInd)) transMatNoOutlier = 90.6241 7.9067 1.0290 0.4124 0.0211 0.0020 0.0003 0.0043 4.4917 89.5918 4.4779 1.1240 0.2288 0.0094 0.0009 0.0756 0.3990 6.1220 87.0530 5.4841 0.7643 0.0893 0.0050 0.0833 0.1030 0.8576 10.7909 83.0207 3.9971 0.7001 0.1313 0.3992 0.1043 0.3746 2.2960 14.0955 78.9840 3.0013 0.0463 1.0980 0.0113 0.0544 0.7054 3.2925 15.4350 75.5988 1.8166 3.0860 0.0044 0.0189 0.1903 1.9743 6.2320 10.2334 75.9983 5.3484 000 000 000 000 0100.0000

决定移除哪些公司要视情况而定。删除公司的原因可能包括某个评级历史记录中的拼写错误,或者评级之间的不寻常迁移(必须衡量其对转移概率估计的影响)。transprob不以任何方式重新排序公司。中公司的排序与输入数据中的排序相同idTotals数组中。

估计不同部分的概率

你可以使用idTotals有效地对样本的不同部分进行估计。欲知更多有关idTotals,请参阅transprob.例如,假设示例中的公司被分为三个地理区域,并且这些公司之前是按地理区域分组的,因此前340家公司对应于第一个区域,接下来的572家公司对应于第二个区域,其余公司对应于第三个区域。你可以有效地得到每个区域的转换概率,如下所示:

负载Data_TransProbstartDate可以=1995年- 12月31日的;endDate =2000年- 12月31日的;[~,~,idTotals] = transprob(data,startDate可以的...startDate可以,“endDate”, endDate);N1 = 340;N2 = 572;transMatG1 = transprobbytotals(idTotals(n1+1:n1+n2)) transMatG3 = transprobbytotals(idTotals(n1+n2+1:end))
transMatG1 = 90.8299 7.6501 0.3178 1.1700 0.0255 0.0044 0.0021 0.0002 4.3572 89.0262 5.7838 0.8039 0.0245 0.0029 0.0013 0.0001 0.7066 0.3721 0.0252 0.0101 0.0023 0.0626 1.3688 10.3895 83.5022 3.6823 0.6466 0.3084 0.0396 0.0256 0.7884 2.6970 13.7857 78.8321 2.8310 0.0561 0.9842 0.0026 0.1095 0.4280 3.5204 0.4574 4.9586 4.2821 80.3062 9.9006 0000 0000 000 000 transMatG2 = 90.5798 8.4877 0.8202 0.0884 0.0132 0.0011 0.00000.0096 4.1999 90.0371 3.8657 1.4744 0.2144 0.0128 0.0001 0.1956 0.3022 5.9869 86.7128 5.5526 1.0411 0.1902 0.0015 0.2127 0.0204 0.5606 10.9342 82.9195 4.0123 0.7398 0.0059 0.8073 0.0089 0.3338 2.1185 16.6496 76.2395 3.1241 0.0261 1.4995 0.0013 0.0465 0.6710 2.4731 14.7281 76.7378 1.2993 4.0428 0.0002 0.0080 0.0681 0.4598 4.1324 8.4380 80.9092 5.9843 0 0 0 0 0 0 0 100.0000 transMatG3 = 90.5655 7.5408 1.5288 0.3369 0.0258 0.0015 0.0003 0.0004 4.8073 89.3842 4.4865 0.9582 0.3509 0.0095 0.0009 0.0025 0.3153 5.8771 87.6353 5.4101 0.7160 0.0322 0.0052 0.0088 0.1995 0.8625 10.8682 82.8717 4.1423 0.6903 0.1565 0.2090 0.2465 0.1091 2.1558 12.0289 81.5803 3.0057 0.0616 0.8122 0.0227 0.0400 0.9380 4.3175 12.3632 75.9429 2.5766 3.7991 0.0149 0.0180 0.3414 3.6918 8.1414 13.6010 70.7254 3.4661 0 0 0 0 0 0 0 100.0000

使用大型数据集

这个例子展示了如何从两个(或多个)数据集聚合估计。在估计转移概率时,可能必须考虑来自两个不同数据库的两个数据集。此外,如果数据集太大而无法加载到内存中,则可以将数据集分割为两个(或更多)数据集。在这些情况下,应用它很简单transprob对每个单独的数据集,然后得到与聚合数据相对应的最终估计值与调用transprobbytotals最后。

例如,在本例中,数据集数据被人为地分为两个部分。实际上,这两个数据集可能来自不同的文件或数据库。当聚合多个数据集时,公司的历史不能跨数据集分割。您可以分析,对于任意选择的分界点,这个条件是满足的。

负载Data_TransProb截止日期= 2099;数据(cutoff-5:截止:)数据(截止+ 1:截止+ 6,:)
ans = '00011166' ' 1995年8月24日' 'BBB' '00011166' ' 1997年1月25日' 'A' '00011166' ' 1998年2月15日' 'AA' '00014878' ' 1983年9月21日' 'BB' '00014878' ' 1998年1月17日' 'BBB' ans = '00012043' ' 2009年2月-1985年2月' 'BBB' '00012043' ' 1988年1月3日' 'A' '00012043' ' 1994年1月15日'AAA' '00011157' ' 1984年6月24日'A' 00011157' ' 1999年12月09日' 'BBB' '00011157' ' 2001年3月28日' 'A' '

当使用多个数据集时,显式地设置开始和结束日期是很重要的。否则,每个数据集的估计窗口都会有所不同,因为数据集使用的默认开始和结束日期transprob是在输入数据中找到的最早和最晚的日期。

startDate可以=1995年- 12月31日的;endDate =2000年- 12月31日的

实际上,这是您可以读取第一个数据集的点。现在,已经获得了数据集。调用transprob使用第一个数据集和显式的开始和结束日期。只保留sampleTotals输出。有关详情sampleTotals,请参阅transprob

[~,sampleTotals(1)] = transprob(data(1:cutoff,:),...startDate可以的startDate可以,“endDate”, endDate);

对其余数据集重复此操作。注意不同点sampleTotals结构存储在结构化数组中。

[~,sampleTotals(2)] = transprob(data(cutoff+1:end,:)),...startDate可以的startDate可以,“endDate”, endDate);

若要获得与聚合数据集对应的转换矩阵,请使用transprobbytotals.当总计输入是一个结构数组时,transprobbytotals聚合所有结构的信息,并返回单个转换矩阵。

transMatAggr = transprobbytotals(样本总数)
transMatAggr = 90.6236 7.9051 1.0314 0.4123 0.0210 0.0020 0.0003 0.0043 4.4780 89.5558 4.5298 1.1225 0.2284 0.0094 0.0009 0.0754 0.3983 6.1164 87.0641 5.4801 0.7637 0.0892 0.0050 0.0832 0.1029 0.8572 10.7918 83.0204 3.9971 0.7001 0.1313 0.3992 0.1043 0.3745 2.2962 14.0954 78.9840 3.0013 0.0463 1.0980 0.0113 0.0544 0.7055 3.2925 15.4350 75.5988 1.8166 3.0860 0.0044 0.0189 0.1903 1.9743 10.2334 75.9983 5.3484 0000 0000 00 100.0000

作为一个完整性检查,对于这个例子,你可以分析,聚合过程产生的估计(直到数值差异)与直接估计整个样本的概率相同:

transMatWhole = transprob(数据,startDate可以的startDate可以,“endDate”,endDate) aggError = max(max(abs(transMatAggr - transMatWhole))
transMatWhole = 90.6236 7.9051 1.0314 0.4123 0.0210 0.0020 0.0003 0.0043 4.4780 89.5558 4.5298 1.1225 0.2284 0.0094 0.0009 0.0754 0.3972 10.1164 87.0641 5.4801 0.7637 0.0892 0.0050 0.0832 0.1029 0.8572 10.7918 83.0204 3.9971 0.7001 0.1313 0.3992 0.1043 0.3745 2.2962 14.0954 78.9840 3.0013 0.0463 1.0980 0.0113 0.0544 0.7055 3.2925 15.4350 75.5988 1.8166 3.0860 0.0044 0.0189 0.1903 1.9743 6.2320 10.2334 75.9983 5.3484 0000 0000 000 0000 aggError = 2.8422e-014

另请参阅

||||||

相关的话题

外部网站