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

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

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

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

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

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

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

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

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

  • ID:贷款标识符。

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

  • 尤布:多年的书。

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

  • 一年:日历年。

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

  • 一年:日历年。

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

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

的变量尤布一年国内生产总值,市场在相应的历年年底进行。评分组是贷款开始时原始信用评分的离散化。的值1默认的指贷款在相应日历年内违约。

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

加载模拟数据。

负载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(数据,“ID”“和”“默认”);disp(头(dataSurvival 10))
ID GroupCount总和\u默认值\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
%也可以从YOB上观察到几年,虽然我们知道YOB一直在%从数据中的1开始,因此GroupCount等于最终的YOBdataSurvival.Properties.VariableNames{2}=“年复一年”;dataSurvival.Properties。VariableNames {3} =“默认”如果没有违约,那就是经过审查的观察结果dataSurvival.censtered=~dataSurvival.Default;disp(head(dataSurvival,10))
ID yearsobobserved Default Censored __ _____________ _______ ________ 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。对于其他数据集,情况可能并非如此。在交易组合中,YOB和账龄可能不同,因为在其生命周期的第三年购买的贷款的账龄为3.,但YOB值为1

第二个必需变量是审查变量(审查)。在本分析中,利息事件为违约。如果在违约前观察到贷款,我们有关于违约前时间的完整信息,因此终身信息未经审查或完整。或者,如果在观察期结束时贷款未违约,则该信息被视为审查或不完整。这可能是因为贷款已预付,或者是因为在样本中八年观察期结束时贷款未违约。

将分数组和年份信息添加到数据中。这些变量的值在整个贷款期限内保持不变。发放时给出的分数决定分数组,发放年份决定年份或群组。

%可以从YOB==1中得到ScoreGroup,因为我们知道在这个数据集中% YOB总是从1开始,并且在data和datassurvival中ID的顺序是相同的dataSurvival。ScoreGroup =数据。年代coreGroup(data.YOB==1);%根据贷款开始的年份定义年份,我们知道所有贷款%在该数据集中开始于他们生命的第一年dataSurvival。古董= data.Year (data.YOB = = 1);disp(头(dataSurvival 10))
ID年份已服务违约审查计分组年份(Uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu99810真正低风险1997

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

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

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

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

根据YOB绘制有条件的一年PDs。例如,YOB为3的有条件的一年期违约概率是其生命周期第三年的贷款的有条件的一年期违约概率。在生存分析中,这称为离散危险率,用h.计算h,得到累积风险函数输出,表示为H,并将其转换为风险函数h

(H (x) = ecdf (dataSurvival。YearsObserved,“审查”,数据生存。审查,...“函数”“累积风险”);因为它是离散时间,只需取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

按分数组分割数据,得到按分数组分类的PDs。

ScoreGroupLabels =类别(dataSurvival.ScoreGroup);NumScoreGroups =长度(ScoreGroupLabels);hSG = 0(长度(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)

您可以按年份对PDs进行分类,并以类似的方式对数据进行相应的分段。您可以根据YOB或日历年绘制这些PDs。要查看这些可视化效果,请参阅使用面板数据对消费者信贷违约概率的压力测试

无宏观影响的Cox PH模型

本节展示如何在没有宏信息的情况下拟合Cox PH模型。为此,使用生存数据格式,模型只包含时间无关的预测因素,即在贷款整个生命周期中保持不变的信息。只有贷款开始时的得分组被用作时间无关的预测器,但其他此类预测器可以添加到模型中(例如,年份信息)。

Cox比例风险回归是一种半参数方法,用于调整生存率估计,量化预测变量的影响。该方法将解释变量的影响表示为公共基线危险函数的乘数, h 0 t 这个hazard function is the nonparametric part of the Cox proportional hazards regression function, whereas the impact of the predictor variables is a loglinear regression. This Cox PH model is

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

地点:

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

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

  • 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函数支持处理时间变万博1manbetx量中的关系的方法(请参见“关系”可选的输入coxphfit).因为关系,所以H输出具有具有相同YOB值的多行,但是可以将其处理为只有惟一的YOB值那么多行,如下所示。

%处理基线HCox以说明离散时间(消除时间限制)HCoxDiscreteT =独特(HCox (: 1));HCoxDiscreteH = grpstats (HCox (:, 2), HCox (: 1),“马克斯”);HCox = [hcoxdiscrete tet HCoxDiscreteH];%将基线转换为hxCox = HCox (: 1);hCox = diff ([0; hCox (:, 2)));

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

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

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

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

ScoreGroupFraction = countcats (dataSurvival.ScoreGroup (TestDataInd));ScoreGroupFraction = ScoreGroupFraction /笔(ScoreGroupFraction);hPredicted = hPredictedByScore * ScoreGroupFraction;%获取培训数据的ecdfht = ecdf (dataSurvival.YearsObserved (TestDataInd),...“审查”dataSurvival.Censored (TestDataInd),...“函数”“累积风险”);ht = diff (ht);情节(x, hPredicted,“o”, x, ht,'*')包含(“年书”) 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和市场变量作为时间依赖的预测变量。

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

数据。T我meInterval = [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.Censored = ~data.Default; disp(head(data,10))
词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇词汇3 4 2.43 3.19真实1低风险5 0 2001 4 5 1.26-10.51真实1低风险6 0 20025 6-0.59-22.95真实1低风险7 0 2003 6 7 0.63 2.78真实1低风险8 0 2004 7 8 1.85 9.48真实2中等风险1 0 1997 0 1 2.72 7.61真实2中等风险2 0 1998 1 2 3.57 26.24真实

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

TrainDataIndTD = ismember (data.ID TrainIDInd);TestDataIndTD = ~ TrainDataIndTD;XTD = dummyvar (data.ScoreGroup (TrainDataIndTD));XTD (: 1) = [];[bCoxTD, ~, HCoxTD] =...coxphfit([XTD数据.GDP(TrainDataIndTD)数据.Market(TrainDataIndTD)],...data.TimeInterval (TrainDataIndTD:)...“审查”,数据。已删失(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, ht,'*')包含(“年书”) ylabel (“PD”)传说(“模型”“测试”)头衔(“宏观模型拟合(测试数据)”)网格

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

压力测试

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

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

disp (dataMacroStress)
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 =长度(ScenarioLabels);PDScenarios = 0(长度(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。

为具体起见,本节研究一笔为期8年的贷款在其第三年开始时的情况,并预测该贷款生命周期中从第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%的简单变化,分别称为“更快的增长”和“较慢的增长”。本例中的情景以及相应的概率仅为简单情景,仅供说明。更详细h使用计量经济学工具箱,可以使用更强大的模型构建场景集™ 或统计和机器学习工具箱™; 例如,见模拟美国经济(计量经济学工具箱)。自动化方法通常可以模拟大量的场景。在实践中,只需要少量的场景。结合定量工具和专家判断,选择这些情景和相应的概率。

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,PDLifetimexlabel(“年”) ylabel (“一生PD”)头衔(“按情景划分的终身PD”)图例(场景标签、,“位置”“最佳”)子plot(2,1,2) bar(tLifetime, pd边际)网格xlabel(“年”) ylabel (“边际PD”)头衔(“按情景划分的边际PD”)图例(场景标签)

这些情景下的终身PDs是计算终身预期信用损失(ECL)的输入之一,这也需要给定违约损失(LGD)和违约风险敞口(EAD)的终身值,以及场景概率。为简单起见,在本例中,假设LGD和EAD值为常数,但这些参数可能因场景和使用LGD和EAD模型的时间段而异。

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

有了这些输入,预计的信贷损失t对于场景年代被定义为:

ECL t 年代 MPD t 年代 乐金显示器 t 年代 放电涂覆处理 t 年代 阀瓣 t

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

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

ECL 年代 t 1 T ECL t 年代

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

ECL 年代 1 NumScenarios ECL 年代 P 年代

乐金显示器= 0.55;%违约损失o = 100;%违约风险敞口EIR = 0.045;%实际利率DiscTimes = tLifetime-tLifetime0 (1);DiscFactors = 1. / (1 + EIR)。^ DiscTimes;ECL_t_s = (PDMarginal *乐金显示器*含铅)。* 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 (“方案"”字符串(1:NumMacroScen) ');ECL_Disp.Properties。RowNames = [strcat (“ECL_”字符串(tLifetime),“_s”);“ECL_total_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
流('生存期ECL:%g\n'发射极耦合逻辑)
一生发射极耦合逻辑:2.77872

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

PDLifetimeWeightedAvg = PDLifetime * PScenario;ECLByWeightedPD =总和(diff *乐金显示器* o (PDLifetimeWeightedAvg)。* DiscFactors);流(“生存期ECL,使用加权生存期PD: %g,由于LGD和EAD不变,结果相同。”...ECLByWeightedPD)
寿命ECL,使用加权寿命PD: 2.77872,由于LGD和EAD不变,结果相同。

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

结论

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

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

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