主要内容

带有Cox比例风险的违约概率建模

这个示例展示了如何使用消费者(零售)信用面板数据来可视化不同级别的已观察到的违约概率。它还展示了如何拟合Cox比例风险(PH)模型,也称为Cox回归,以预测pd。此外,它还展示了如何执行压力测试分析,以及如何建模生命周期的PDs和生命周期的预期信用损失(ECL)值。

一个类似的例子,使用面板数据对消费者信贷违约概率进行压力测试,遵循相同的工作流,但使用逻辑回归而不是Cox ph。这两种方法的主要区别是:

  • 该模型适合: Cox PH模型具有非参数基线危险率,能够比全参数logistic模型更紧密地匹配pd中的模式。

  • 推断出数据中观测到的年龄: Cox PH模型,因为它是建立在非参数基线危险率之上,不能推断出在数据集中没有观察到的贷款年龄。logistic模型将贷款的年龄视为一个连续变量,因此,它可以外推来预测数据集中未观察到的年龄的pd。

  • 低概率的情况下:如果,对于一个特定的年龄,PD很小,并且在数据中没有观察到默认值,Cox PH模型预测PD为零。相反,logistic模型总是给出非零概率。

使用生存分析工具进行数据探索

从一些数据可视化开始,主要是PDs作为年龄函数的可视化,在这个数据集中,它与Years-on-Books (YOB)相同。由于Cox PH是一个生存分析模型,本例讨论了一些生存分析工具和概念,并使用了经验累积分布函数(ecdf)的功能,其中一些计算和可视化。

主要数据集(数据)包含以下变量:

  • 身份证件:贷款标识符。

  • ScoreGroup:贷款开始时的信用评分,离散分为三组:高的风险中等风险,低风险

  • 小无赖:多年的书。

  • 默认的:默认指标。这是响应变量。

  • 一年:日历年。

还有一个小的数据集(dataMacro)及相应历年的宏观经济数据:

  • 一年:日历年。

  • 国内生产总值:国内生产总值增长(同比)。

  • 市场:市场回报率(同比)。

的变量小无赖一年国内生产总值,市场在相应日历年结束时观察。分数组是贷款开始时原始信用分数的离散化。值1默认的表示该贷款在相应的日历年度违约。

还有第三个数据集(dataMacroStress),以及宏观经济变量的基线、不利和严重不利情景。该表用于压力测试分析。

加载模拟数据。

负载RetailCreditPanelData.matdisp(头(数据,10))
ID ScoreGroup小无赖违约  __ ___________ ___ _______ ____ 1低风险1 0 1998 1997 1低风险2 0 1低风险3 1999 0 1低风险4 0 2001 2000 1低风险5 0 1低风险6 0 2002 1低风险7 0 2003 1低风险8 0 2004 2中等风险1 0 1997 2中等风险2 0 1998

对面板数据进行预处理,使其符合生存分析工具所期望的格式。

%使用groupsummary将数据减少到每行一个ID,并跟踪贷款是否默认dataSurvival = groupsummary(数据,“身份证”“和”“默认”);disp(头(dataSurvival 10))
ID GroupCount sum_Default __ __________ ___________ 1 8 0 2 8 0 3 8 0 4 6 0 5 7 0 6 7 0 7 8 0 8 6 0 9 7 0 10 8 0
%也可以从YOB观测到年份,尽管这里我们知道YOB总是这样%从数据中的1开始,因此GroupCount等于最终的YOBdataSurvival.Properties。VariableNames {2} =“YearsObserved”;dataSurvival.Properties。VariableNames {3} =“默认”如果没有违约,那就是经过审查的观察结果dataSurvival。审查=~dataSurvival.Default; disp(head(dataSurvival,10))
ID YearsBevered默认已删失-uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

主要变量是观察每笔贷款的时间(YearsObserved),这是“书中岁月”的最终值(小无赖)变量。这是直到违约的年数,或直到观察期结束(8年),或直到贷款从样本中删除,例如,由于提前支付。在这个数据集中,YOB信息与贷款的年龄相同,因为所有贷款都以YOB开头1.对于其他数据集,情况可能并非如此。在一个交易组合中,YOB和年龄可能是不同的,因为在其生命周期的第三年购买的贷款有一个年龄3.,但YOB值为1

第二个所需变量为截尾变量(审查).在这个分析中,感兴趣的事件是违约。如果一笔贷款被观察到违约,我们就有关于违约时间的完整信息,因此生命周期信息是不受审查的或完整的。或者,如果在观察期结束时贷款没有违约,则认为信息被审查或不完整。这可能是因为贷款是预付的,或者因为在样本的8年观察期结束时贷款没有违约。

将分数组和年份信息添加到数据中。这些变量的值在贷款的整个生命周期内保持不变。在起源时给出的分数决定了得分组,而起源年份决定了年份或队列。

%可以从YOB==1中得到ScoreGroup,因为我们知道在这个数据集中% YOB总是从1开始,并且在data和datassurvival中ID的顺序是相同的dataSurvival。ScoreGroup =数据.年代coreGroup(data.YOB==1);根据贷款开始的年份来定义年份,我们知道所有贷款%在该数据集中开始于他们生命的第一年dataSurvival。古董= data.Year (data.YOB = = 1);disp(头(dataSurvival 10))
ID YearsObserved默认审查ScoreGroup古董  __ _____________ _______ ________ ___________ _______ 1 8 0 1997年真正的低风险2 8 0真正中等风险1997 3 1997 0真正中等风险4 6 0真正中等风险1999 5 7 0真正中等风险1998 6 7 0真正中等风险1998 7 8 0真正中等风险1997 8 6 0真正中等风险1999 9 7 0真正的低风险1998 10 8 0真低风险

最后,比较原始数据集(面板数据格式)和聚合数据集(更传统的生存格式)的行数。

流('原始数据的行数:%d\n'、高度(数据));
原始数据行数:646724
流('存活数据的行数:%d\n'高度(dataSurvival));
存活数据的行数:96820

使用经验累积分布函数绘制整个投资组合(所有得分组和年份)针对YOB的累积违约概率(ecdf)功能。

ecdf(数据生存年),“审查”, dataSurvival。审查,“界限”“上”)标题(“所有得分组的累计违约概率”)包含(“年书”

对YOB策划有条件的一年pd。例如,对于一个3岁的YOB,有条件的一年期PD是对于第三年贷款的有条件的一年期PD。在生存分析中,这被称为离散风险率,用h.来计算h,得到累积风险函数输出,表示为H,并将其转换为风险函数h

(H (x) = ecdf (dataSurvival。YearsObserved,“审查”, dataSurvival。审查,...“函数”“累积风险”);因为它是离散时间,只需取H的diff,就得到了风险h = diff (h);x (1) = [];%在本例中,观察到的时间(存储在变量x中)对于%不同的分数组,或训练与测试集。对于其他数据集,在每次调用ecdf函数之前,可能需要检查x和h变量%绘制或连接结果(例如,如果在%特定年份的测试数据)。情节(x, h,‘*’网格)标题(条件1年期PDs的) ylabel (“PD”)包含(“年书”

您还可以直接使用groupsummary使用原始面板数据格式。有关更多信息,请参见配套示例使用面板数据对消费者信贷违约概率进行压力测试.或者你可以用grpstats使用原始面板数据格式。这些方法提供相同的一年有条件pd。

PDvsYOBByGroupsummary=groupsummary(数据,“小无赖”“的意思是”“默认”);PDvsYOBByGrpstats = grpstats (data.Default data.YOB);PDvsYOB =表((1:8)、h、PDvsYOBByGroupsummary.mean_Default PDvsYOBByGrpstats,...“VariableNames”, {“小无赖”“ECDF”“Groupsummary”“Grpstats”});disp(PDvsYOB)
YOB ECDF Groupsummary Grpstats ____________ ____________ _________ 1 0.017507 0.017507 0.017507 2 0.012704 0.012704 0.012704 3 0.011168 0.011168 0.011168 4 0.010728 0.010728 0.010728 5 0.0085949 0.0085949 0.0085949 6 0.006413 0.006413 0.006413 7 0.0033231 0.0033231 0.0033231 8 0.0016272 0.0016272 0.0016272

将数据按评分组分割,得到按评分组分类的pd。

ScoreGroupLabels=类别(dataSurvival.ScoreGroup);NumScoreGroups=长度(ScoreGroupLabels);hSG=零(长度(h),NumScoreGroups);ii=1:NumScoreGroups Ind = dataSurvival.ScoreGroup==ScoreGroupLabels{ii};H = ecdf (dataSurvival.YearsObserved(印第安纳州),“审查”dataSurvival.Censored(印第安纳州));hSG集团(:,(二)= diff (H);终止情节(x, hSG集团)‘*’网格)标题(“有条件的1年pd,按分数分组”)包含(“年书”) ylabel (“PD”传奇(ScoreGroupLabels)

可以按年份对pd进行分解,并以类似的方式对数据进行相应的分段。你可以用这些pd来对抗YOB或日历年。要查看这些可视化,请参考使用面板数据对消费者信贷违约概率进行压力测试

无宏观影响的Cox-PH模型

本节说明了如何在没有宏观信息的情况下拟合Cox PH模型。为此,使用生存数据格式,该模型仅包括时间独立的预测因子,即在贷款期限内保持不变的信息。只有贷款发放时的分数组用作时间独立的预测因子,但呃这样的预测器可以被添加到模型中(例如,年份信息)。

Cox比例风险回归是一种半参数方法,用于调整生存率估计,量化预测变量的影响。该方法将解释变量的影响表示为公共基线危险函数的乘数, h 0 t .风险函数是Cox比例风险回归函数的非参数部分,而预测变量的影响是一个对数线性回归。这个Cox PH模型是

h X t h 0 t 经验值 j 1 p x ij b j

地点:

  • X x i1 x 知识产权 预测变量是什么主题。

  • b j 系数是j预测变量。

  • h X t 危险率是多少t X

  • h 0 t 为基线危险率函数。

有关详细信息,请参见coxphfit或者是考克斯比例风险模型以及其中的参考文献。

基本的Cox PH模型假设预测值在贷款的整个生命周期中不发生变化。在我们的示例中,这是评分组的情况,因为它是在贷款开始时给予借款人的评分。在贷款的整个生命周期中,年份也是恒定的。

例如,如果信用评分信息每年更新,则模型可以使用时间依赖性评分。在这种情况下,您可以在Cox PH模型中建模时间依赖性预测值,类似于稍后在“具有宏观影响的Cox PH模型”部分中向模型添加宏观变量的方式。

为了评估模型的拟合,可视化模型的样本内和样本外拟合。首先,将数据分解为训练和测试子集,并利用训练数据拟合模型。

nIDs =身高(dataSurvival);NumTraining =地板(0.6 * nIDs);%使用60%的数据进行培训rng (“默认”);为了重现性,重置rng状态NumTraining TrainIDInd = randsample (nIDs);TrainDataInd = ismember (dataSurvival.ID TrainIDInd);TestDataInd = ~ TrainDataInd;% ScoreGroup是分类的,使用dummyvar转换为二进制列X = dummyvar (dataSurvival.ScoreGroup (TrainDataInd));%删除第一列,以避免线性依赖,也称为“哑变量陷阱”。X (: 1) = [];%适合Cox PH模型[bCox ~, HCox] = coxphfit (X,...dataSurvival.YearsObserved (TrainDataInd),...“审查”dataSurvival.Censored (TrainDataInd),...“基线”, 0);

第三个输出是coxphfit函数是基线累积危险率H.这个累积危险率可以转换为危险率h与之前一样,除了一个附加步骤。Cox-PH模型假设观测时间是作为一个连续变量测量的。在这里,时间是以离散方式测量的,因为时间始终是一个整数18.的coxphfit函数支持在时间变量金宝app中处理绑定的方法(请参阅“关系”可选的输入coxphfit).因为关系,所以H输出有多个具有相同YOB值的行,但可以将其处理为只有唯一YOB值的行数,如下所示。

考虑离散时间的过程基线HCox %(消除时间束缚)HCoxDiscreteT =独特(HCox (: 1));HCoxDiscreteH = grpstats (HCox (:, 2), HCox (: 1),“马克斯”);HCox=[HCoxDiscreteT HCoxDiscreteH];%将基线转换为hxCox = HCox (: 1);hCox = diff ([0; hCox (:, 2)));

预测pd,即基于模型拟合的危险率。因为该模型仅使用在贷款整个生命周期中保持不变的初始评分组信息。所有具有相同初始评分组的贷款具有相同的预测终身pd。为了得到组合的累计预测PD,计算每个得分组的风险率。然后根据每个得分组在训练数据中的贷款比例,对这些得分组进行加权平均。

将预测的pd与训练数据中观测到的pd进行比较。

%计算每个分数组的贷款比例ScoreGroupFraction=countcats(dataSurvival.ScoreGroup(TrainDataInd));ScoreGroupFraction=ScoreGroupFraction/sum(ScoreGroupFraction);%基线h是“高风险”的危险率,在第一列%第2列和第3列分别有“中等”和“低”风险,%,通过Cox模型相应的参数项进行调整hPredictedByScore = 0(长度(hCox), NumScoreGroups);hPredictedByScore (: 1) = hCox;ii=2:NumScoreGroups hPredictedByScore(:,ii) = hCox*exp(bCox(ii-1));终止hPredicted=hPredictedByScore*分数组分数;%获取培训数据的ecdfHTrain = ecdf (dataSurvival.YearsObserved (TrainDataInd),...“审查”dataSurvival.Censored (TrainDataInd),...“函数”“累积风险”);hTrain = diff (hTrain);情节(x, hPredicted,“-o”, x, hTrain‘*’)包含(“年书”) ylabel (“PD”)传说(“模型”“培训”)标题(“模型拟合(训练数据)”网格)

比较测试数据中预测和观察的pd。

ScoreGroupFraction = countcats (dataSurvival.ScoreGroup (TestDataInd));ScoreGroupFraction = ScoreGroupFraction /笔(ScoreGroupFraction);hPredicted=hPredictedByScore*分数组分数;%获取培训数据的ecdfht = ecdf (dataSurvival.YearsObserved (TestDataInd),...“审查”dataSurvival.Censored (TestDataInd),...“函数”“累积风险”);ht = diff (ht);情节(x, hPredicted,“-o”,x,hTest,‘*’)包含(“年书”) ylabel (“PD”)传说(“模型”“测试”)标题(“模型拟合(测试数据)”网格)

Cox PH模型的非参数部分允许它与训练数据模式紧密匹配,即使只使用该模型中的评分组信息。样本外误差(模型与测试数据)也很小。

添加宏信息仍然很重要,因为压力测试和生存期PD预测都需要对宏信息的显式依赖。

具有宏观影响的Cox PH模型

本节展示了如何拟合Cox PH模型,包括宏观信息,特别是国内生产总值(GDP)增长和股票市场增长。宏观变量的值每年都在变化,因此它们是时变的预测因子。带有时间依赖预测器的Cox PH功能的数据输入使用原始面板数据,并添加了宏信息和每一行的时间间隔。

将Cox比例风险模型扩展到考虑时变变量

h X t h 0 t 经验值 j 1 p1 x ij b j + k 1 p2 x k t c k

地点:

  • x ij 的预测变量值主语和主语j长期有效的预测。

  • x k t 的预测变量值主语和主语k时间依赖的预测器t。

  • b j 系数是j时间无关的预测变量。

  • c k 系数是k时间依赖的预测变量。

  • h X t t 危险率是多少t X t

  • h 0 t 为基线危险率函数。

有关详细信息,请参见coxphfit或者是考克斯比例风险模型以及其中的参考文献。

宏观变量被视为时变变量。如果长期有效的信息,如初始评分小组,提供一个基线水平的风险通过贷款的生命,我们有理由期待,宏观环境变化可能会增加或减少基线水平的风险,这个变化会有所不同从一年到下一个,如果宏观环境变化。例如,经济增长较低的年份应该使所有贷款的风险更大,独立于最初的评分组。

对于时间相关Cox PH分析,使用原始数据集的扩展作为时间相关分析的输入。

这些工具需要指定时间间隔以及相应的预测值。第一年的时间间隔为0到1,第二年的时间间隔为1到2,依此类推。因此,每行的时间间隔范围为YOB-1到YOB。

在整个贷款历史中,时间无关变量的值都是常数,就像原始数据中的分数组信息一样。不需要对时间无关变量做任何改变。

对于与时间相关的变量,值从一个区间到下一个区间都是变化的。我们加入GDP和市场变量作为时间依赖的预测变量。

这些工具还需要一个审查标志,这是对默认信息的否定。

data.TimeInterval=[data.YOB-1 data.YOB];data.GDP=dataMacro.GDP(data.Year min(data.Year)+1);data.Market=dataMacro.Market(data.Year min(data.Year)+1);data.censted=~data.Default;disp(head(data,10))
ID ScoreGroup小无赖违约TimeInterval GDP市场审查  __ ___________ ___ _______ ____ ____________ _____ ______ ________ 1低风险1 1997 0 0 1 2.72 - 7.61真的1低风险2 0 1998 1 1999 2 3.57 - 26.24真的1低风险3 0 2 3 2.86 - 18.1真的1低风险4 0 2000 3 4 2.43 - 3.19真的1低风险5 0 2001 4 5 1.26 -10.51 1低风险6 0 2002 56 -0.59 -22.95 true 1 Low Risk 7 0 2003 6 7 0.63 2.78 true 1 Low Risk 8 0 2004 7 8 1.85 9.48 true 2 Medium Risk 1 0 1997 0 1 2.72 7.61 true 2 Medium Risk 2 0 1998 1 2 3.57 26.24 true

拟合时间相关模型。与以前相同的ID属于训练或测试子集,但是,由于数据中的格式不同,索引不同。

TrainDataIndTD = ismember (data.ID TrainIDInd);TestDataIndTD = ~ TrainDataIndTD;XTD = dummyvar (data.ScoreGroup (TrainDataIndTD));XTD (: 1) = [];[bCoxTD, ~, HCoxTD] =...coxphfit ([XTD data.GDP (TrainDataIndTD) data.Market (TrainDataIndTD)],...data.TimeInterval (TrainDataIndTD:)...“审查”data.Censored (TrainDataIndTD),...“基线”, 0);%过程基线HCoxTD考虑离散时间(消除时间束缚)HCoxTDDiscreteT =独特(HCoxTD (: 1));HCoxTDDiscreteH = grpstats (HCoxTD (:, 2), HCoxTD (: 1),“马克斯”);HCoxTD = [hcoxtddiscrete tet HCoxTDDiscreteH];%将累积基线转换为hCoxTDxCoxTD = HCoxTD (: 1);hCoxTD = diff ([0; hCoxTD (:, 2)));

为了可视化样本内拟合,逐行计算预测的PDs。建立预测器矩阵,如拟合模型时,再应用Cox PH公式。

宏观效应帮助模型更接近观察到的默认率,而与训练数据的匹配几乎就像是宏观模型的插值。

建立预测器矩阵XPredict = [dummyvar(data.ScoreGroup(TrainDataIndTD)), data.GDP(TrainDataIndTD), data.Market(TrainDataIndTD)];XPredict (: 1) = [];在行级进行预测hPredictedTD=hCoxTD(data.YOB(TrainDataIndTD))*exp(XPredict*bCoxTD);取每个时间点预测危险率的平均值(YOB)hPredictedTD = grpstats (hPredictedTD data.YOB (TrainDataIndTD));情节(x, hPredictedTD,“-o”, x, hTrain‘*’)包含(“年书”) ylabel (“PD”)传说(“模型”“培训”)标题(“宏模型拟合(训练数据)”网格)

设想样本外匹配。

建立预测器矩阵XPredict = [dummyvar(data.ScoreGroup(TestDataIndTD)), data.GDP(TestDataIndTD), data.Market(TestDataIndTD)];XPredict (: 1) = [];在行级进行预测hPredictedTD = hCoxTD (data.YOB (TestDataIndTD)。* exp (XPredict * bCoxTD);取每个时间点预测危险率的平均值(YOB)hPredictedTD = grpstats (hPredictedTD data.YOB (TestDataIndTD));情节(x, hPredictedTD,“-o”,x,hTest,‘*’)包含(“年书”) ylabel (“PD”)传说(“模型”“测试”)标题(“宏观模型拟合(测试数据)”网格)

为了在评分组水平上可视化样本内和样本外,在按评分组分割数据后执行相同的操作。

压力测试

本节展示如何使用Cox PH宏模型对pd进行压力测试分析。

假设以下是宏观经济变量(例如,由监管机构提供的)的压力场景。

disp(数据宏应力)
GDP市场_____ ______基线2.27 15.02不利1.31 4.56严重-0.22 -5.64

对每一组和每一个宏观情景进行预测的危险率,即由YOB给出的PD。这段代码预测每个得分组和每个宏观场景的pd。

为了可视化每个宏观场景,取分数组上的平均值,通过YOB将其聚合为单个PD。该图显示了预测的不利和严重不利宏观条件对每个YOB的平均PD的影响。

ScenarioLabels=dataMacroStress.Properties.RowNames;NumScenarios=length(ScenarioLabels);PDScenarios=Zero(length(x),NumScenarios);ii=1:NumScoreGroups Score = ScoreGroupLabels{ii};XPredictScore = ismember (ScoreGroupLabels(2:结束),得分);PDScenariosGroup = 0(长度(x) (ScenarioLabels));jj=1: numscenario Scenario = Scenario label {jj};XPredictST = [XPredictScore dataMacroStress.GDP(Scenario) dataMacroStress.Market(Scenario)];hPredictedST = hCoxTD * exp (XPredictST * bCoxTD);PDScenariosGroup (:, jj) = hPredictedST;终止pdscenario = pdscenario + PDScenariosGroup/NumScoreGroups;终止图;标题栏(x, PDScenarios) (“压力测试,违约概率”)包含(“年书”) ylabel (“PD”)传说(“基线”“不良”“严重”网格)

终身PD和ECL

本节将展示如何使用Cox PH宏观模型计算生命周期PDs,以及如何计算生命周期预期信贷损失(ECL)。

对于生命周期建模,PD模型是相同的,但使用的方式不同。你需要预测的PDs不仅仅是一个时期之前,而是每个特定贷款生命周期中的每一年。这意味着在贷款的整个生命周期中,您还需要宏观场景。本节设置可选的长期宏观场景,计算每个场景下的生命周期pd,以及相应的1年pd、边际pd和生存概率。在每个宏观场景下,对每一年的寿命和边际PDs进行可视化。然后为每个场景和加权平均生命周期ECL计算ECL。

具体而言,本节将在第三年开始时研究一项八年期贷款,并预测该贷款期限第3年至第8年的1年PD。本节还计算了贷款剩余期限内的生存概率。生存概率之间的关系 年代 t 以及1年的pd或危险率 h t ,有时也叫向前PDs,是:

年代 0 1 年代 1 1 - h 1 年代 t 年代 t - 1 1 - h t 1 - h 1 1 - h t

有关这方面的示例,请参见kaplan meier方法

终身收益(LPD)是贷款期限内的累积收益,由生存概率的补充给出:

LPD t 1 - 年代 t

最后,另一个利息量是边际PD (MPD),它是两个连续周期之间生命周期PD的增加:

MPD t + 1 LPD t + 1 - LPD t

由此可知,边际PD也是连续时间段间生存概率的下降,也是危险率乘以生存概率:

MPD t + 1 年代 t - 年代 t + 1 h t + 1 年代 t

具体说明三种宏观经济情景,一种基线预测,以及两种简单的基线增长值上调20%或下调20%的变化,分别称为“更快增长”和“更慢增长”。本例中的场景以及相应的概率只是用于说明目的的简单场景。使用计量经济学工具箱™或统计学和机器学习工具箱™,可以使用更强大的模型构建更全面的情景集;看到例如模拟美国经济(计量经济学工具箱).自动化方法通常可以模拟大量场景。在实践中,只需要少量场景。这些场景和相应的概率是结合定量工具和专家判断选择的。

CurrentAge = 3;%目前开始第三年贷款成熟= 8;贷款在第8年底结束ScoreGroup =“高风险”%高风险YOBLifetime = (CurrentAge:成熟度)';NumYearsRemaining =长度(YOBLifetime);tLifetime = (dataMacro.Year(结束)+ 1:dataMacro.Year(结束)+ NumYearsRemaining) ';tLifetime0 = (dataMacro.Year(结束):dataMacro.Year(结束)+ NumYearsRemaining) ';XPredictScore = ismember (ScoreGroupLabels(2:结束),ScoreGroup);XPredictScore = repmat (XPredictScore NumYearsRemaining 1);GDPPredict = (2.3;2.2;2.1;2.0; 1.9; 1.8]; GDPPredict = [0.8*GDPPredict GDPPredict 1.2*GDPPredict]; MarketPredict = [15; 13; 11; 9; 7; 5]; MarketPredict = [0.8*MarketPredict MarketPredict 1.2*MarketPredict]; ScenLabels = [“增长放缓”“基线”“快速增长”];NumMacroScen =大小(GDPPredict, 2);%场景概率,用于计算生命周期ECLPScenario = (0.2;0.5;0.3);hPredict = 0(大小(GDPPredict));ii = 1:NumMacroScen XPredictLifetime = [XPredictScore GDPPredict(:,ii) MarketPredict(:,ii)];hPredict(:,(二)= hCoxTD (YOBLifetime)。* exp (XPredictLifetime * bCoxTD);终止survivalLifetime =[(1、NumMacroScen);cumprod (1-hPredict)];PDLifetime = 1-survivalLifetime;PDMarginal = diff (PDLifetime);图;subplot(2,1,1) plot(tLifetime0,PDLifetime) xticks(tLifetime0) grid . subplot(2,1,1) plot(tLifetime0,PDLifetime包含(“年”) ylabel (“一生PD”)标题(“按情景划分的终身PD”)传说(ScenLabels“位置”“最佳”)子plot(2,1,2) bar(tLifetime, pd边际)网格包含(“年”) ylabel (“边际PD”)标题(“按情景划分的边际PD”传奇(ScenLabels)

这些按场景划分的生存期pd是计算生存期预期信贷损失(ECL)的输入之一,这还需要每个场景的给定损失(LGD)和默认暴露(EAD)的生存期值以及场景概率。为简单起见,在本例中假设了一个常量LGD和EAD值,但在使用LGD和EAD模型时,这些参数可能因场景和时间段而不同。

寿命ECL的计算还需要贴现率的有效利率(EIR)。在本例中,贴现因子是在时间段结束时计算的,但也可以使用其他贴现时间,例如,时间段之间的中点(即,第一年金额的贴现具有6个月的贴现因子;使用1.5年折扣因子对第二年的金额进行折扣,以此类推)。

有了这些输入,预期信用损失的时间t的场景年代被定义为:

发射极耦合逻辑 t 年代 MPD t 年代 乐金显示器 t 年代 含铅 t 年代 阀瓣 t

在哪里t表示一个时间段,年代表示一个场景,并且 阀瓣 t 1 1 + EIR t

对于每个场景,生命周期ECL是通过在时间上添加ECL来计算的,从分析中的第一个时间周期到产品的预期生命周期T,在本例中为5年期(离到期日还有5年的简单贷款):

发射极耦合逻辑 年代 t 1 T 发射极耦合逻辑 t 年代

最后,在所有场景下,计算这些预期信贷损失的加权平均值,以得到单个生命周期的ECL值 P 年代 为情景概率:

发射极耦合逻辑 年代 1 NumScenarios 发射极耦合逻辑 年代 P 年代

乐金显示器= 0.55;%违约损失o = 100;%违约风险EIR = 0.045;%实际利率DiscTimes=tLifetime-tLifetime0(1);DiscFactors=1./(1+EIR)。^DiscTimes;ECL\u t\u s=(PDMarginal*LGD*EAD)。*DiscFactors;% ECL按年份和场景ECL_s =总和(ECL_t_s);按场景计算的ECL总数发射极耦合逻辑= ECL_s * PScenario;% ECL在所有场景的加权平均值%安排年度ECL以表格形式显示%附加每个场景的ECL总数和场景概率ECL_Disp = array2table ([ECL_t_s;ECL_s;PScenario ']);ECL_Disp.Properties。VariableNames = strcat (“Scenario_”字符串(1:NumMacroScen) ');ECL_Disp.Properties。RowNames = [strcat (“ECL_”字符串(tLifetime),“_”);“ECL_total_s”“Probability_s”];disp (ECL_Disp)
场景_1场景_2场景_3 __________ __________ __________ ECL_2005_s 0.94549 0.8921 0.84173 ECL_2006_s 0.71543 0.6789 0.64419 ECL_2007_s 0.53884 0.51412 0.49048 ECL_2008_s 0.40169 0.38527 0.36947 ECL_2009_s 0.20849 0.20098 0.19372 ECL_2010_s 0.12339 0.11952 0.11576 ECL_total_s 2.9333 2.7909 2.6554 Probability_s 0.2 0.5 0.3
流(“终身发射极耦合逻辑:% g \ n”发射极耦合逻辑)
一生发射极耦合逻辑:2.77872

当LGD和EAD不依赖于场景时(即使它们随时间变化),可以采用寿命PD曲线的加权平均值来获得单个平均寿命PD曲线。

PDLifetime WeightedAvg=PDLifetime*PScenario;ECLByWeightedPD=总和(差值(PDLifetimeWeightedAvg)*LGD*EAD.*DiscFactors);fprintf('生存期ECL,使用加权生存期PD:%g,由于常数LGD和EAD,结果相同。\n'...ECLByWeightedPD)
寿命ECL,使用加权寿命PD: 2.77872,由于LGD和EAD不变,结果相同。

但是,当LGD和EAD值随场景而变化时,您必须首先在场景级别计算ECL值,然后找到ECL值的加权平均值。

结论

该示例演示了如何为pd拟合Cox PH模型,如何执行pd的应力测试,以及如何计算寿命pd和ECL。

一个类似的例子,使用面板数据对消费者信贷违约概率进行压力测试,遵循相同的工作流,但使用逻辑回归,而不是Cox回归。本例末尾的生命周期PDs和ECL的计算也可以用逻辑模型执行,并对代码进行一些修改。

您可以修改这两个示例中的工作流,以使用其他模型公式。例如,您可以拟合逻辑模型,将年龄视为一个分类(离散时间)变量。在这种情况下,模型pd将更接近于观测到的pd,但将失去模型的外推能力。此外,除了logistic回归,其他广义线性模型(glm)支持金宝appfitglm也可以在对代码进行微小更改时使用,例如probit模型或互补的log-log模型。因为所有这些模型都将贷款的年龄和宏观信息显式地合并到模型中,所以它们可以用于压力测试和生命周期PD和ECL分析。

另请参阅

|||||

相关的例子

更多关于