用Cox比例风险建模违约概率

这个例子说明了如何与消费者(零售)信贷面板数据的工作在不同层次可视化违约的概率观测(PDS)。它还说明了如何以适合Cox比例风险(PH)模型,也称为Cox回归,来预测的PD。此外,它显示了如何进行压力测试分析以及如何寿命的PD模型和寿命预期信用缺失(ECL)值。

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

  • 该模型的拟合:考克斯PH模型具有非参数基线风险率,可以在PDS更紧密地匹配模式比全参数Logistic模型。

  • 在数据中所观察到的年龄之外进行推断:考克斯PH模式,因为它是建立在非参数基线风险率的顶部,不能外推到未在数据集中观察到的贷款年龄。该逻辑模型将贷款的年龄作为一个连续变量,和,因此,可以推断来预测在数据集中观察不到年龄的PD。

  • 低概率的情况下:如果对于一个特定的年龄时,PD小,有在数据没有观察到缺省值,考克斯PH模型预测PD为零。相比之下,Logistic模型总是给人非零概率。

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

一些数据可视化开始,主要是PD的可视化作为年龄的函数,它在这组数据是一样的年围绕书籍(YOB)。因为考克斯PH是生存分析模型,该实施例中讨论了一些生存分析工具和概念,并且使用经验累积分布函数(ecdf)功能对于某些这些计算和可视化的。

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

  • ID:贷款标识符。

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

  • YOB多年写书。

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

  • : 公历年。

亦有一个小型数据集(dataMacro)与相应的日历年的宏观经济数据:

  • : 公历年。

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

  • 市场:市场收益率(年同比)。

的变量YOB国内生产总值,市场是在相应日历年的末尾观察的。评分组是贷款开始时原始信用评分的离散化。的值1对于默认的意味着贷款在相应的历年拖欠。

还有第三个数据集(dataMacroStress)与基准,不利的,严重的不良情形的宏观经济变量。此表用于压力测试分析。

加载模拟数据。

负载RetailCreditPanelData.matDISP(头(数据,10))
ID ScoreGroup YOB默认年__ ___________ ___ _______ ____ 1低风险1 0 1997 1低风险2 0 1998 1低风险3 0 1999 1低风险4 0 2000 1低风险5 0 2001 1低风险6 0 2002 1低风险70 2003 1低风险8 0 2004 2中等风险1 0 1997 2中等风险2 0 1998

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

%用途groupsummary减少数据每行一个ID,并保持贷款拖欠是否与否轨道dataSurvival = groupsummary(数据,“ID”“和”'默认');DISP(头(dataSurvival,10))
ID GroupCount sum_Default __ __________ ___________ 1 8 0 2 8 0 3 0 8 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.Censored =〜dataSurvival.Default;DISP(头(dataSurvival,10))
ID YearsObserved默认审查__ _________________ _________ ________ 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真

主要变量是观察每次贷款的时间(YearsObserved),即记录年数的最终值(YOB)变量。这是年,直到默认值,或直到观察期间(八年)的端部,或直至贷款从样品中除去,例如,由于预付款数。在这组数据中,YOB信息是一样的贷款的年龄,因为所有贷款的YOB启动1。对于其他数据集,这可能不是这种情况。在一个交易组合,YOB和年龄可能是不同的,因为在其生命的第三年购买的贷款将有一个年龄3,但YOB值为1

第二所需变量是终检变量(审查)。感兴趣的事件是默认在此分析。如果贷款被观察到默认情况下,我们有关于时间,直到默认的全部信息,因此寿命信息为未经审查或完整。另外,该信息被认为是审查,或不完整的,如果在观察期结束时,贷款没有拖欠。这可能是因为贷款是预付费,或者是因为贷款没有通过样品中的八年观察期结束时拖欠。

比分组和古董信息添加到数据。这些变量的值保持在整个贷款期限不变。在起源给出的得分确定评价分值组和起源年确定了复古或队列。

%能从YOB == 1获得ScoreGroup,因为我们知道在这组数据% YOB总是从1开始,ID在data和dataSurvival中的顺序是相同的dataSurvival。ScoreGroup =数据。小号CoreGroup(data.YOB==1);%定义基于贷款在今年开始的年份,我们知道所有贷款%的这组数据在他们的生活1年开始dataSurvival.Vintage = data.Year(data.YOB == 1);DISP(头(dataSurvival,10))
ID YearsObserved默认截尾ScoreGroup老式__ _____________ _______ ________ ___________ _______ 1 8 0真低风险1997 2 8 0真中等风险1997 3 8 0真中等风险1997 4 6 0真中等风险1999 5 7 0真中等风险1998 6 7 0真中等风险1998 1997 7 8 0真中等风险1997 8 6 0真中等风险1999 9 7 0真正低风险1998 10 8 0真低风险

最后,比较原始数据集的行数,在面板中的数据格式,并且聚集的数据集,在更传统的生存形式。

fprintf中(“行数的原始数据:%d \ n”,高度(数据));
行数原始数据:646724
fprintf中('生存数据的行数:%d\n'高度(dataSurvival));
生存数据的行数:96820

暗算YOB累积违约概率为整个组合使用经验累积分布函数(全部评分组和年份)(ecdf)功能。

ecdf (dataSurvival.YearsObserved“截尾”,dataSurvival.Censored,“边界”'上')标题(“累积默认概率,所有评分组”)包含(“年书”

暗算YOB有条件一年的租约。例如,有条件的一年PD为3 YOB是有条件的一年PD对于那些在他们的生活中第三年的贷款。在生存分析,这就是所谓的离散的危险率,记H。计算H,得到累积风险函数输出,记为H,并将其转换为风险函数H

[H,X] = ECDF(dataSurvival.YearsObserved,“截尾”,dataSurvival.Censored,...'功能'“累积风险”);%因为是离散时间,只需取H的差值就可以得到危险值HH = DIFF(H);X(1)= [];在本例中,观察到的时间(存储在变量x中)不会改变%不同评分组,或训练与测试集。对于其他数据集,% x和h变量可能需要在每次调用ecdf函数之前检查%绘制或连接结果(例如,如果a中没有缺省值测试数据的特定年份)。积(X,H,'*')网格标题(“条件1年的PD”) ylabel ('PD')包含(“年书”

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

PDvsYOBByGroupsummary = groupsummary(数据,'YOB'“的意思是”'默认');PDvsYOBByGrpstats = grpstats (data.Default data.YOB);PDvsYOB =表((1:8)、h、PDvsYOBByGroupsummary.mean_Default PDvsYOBByGrpstats,...'VariableNames', {'YOB''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

由段评分组数据获得通过的分数分列的租约。

ScoreGroupLabels =类别(dataSurvival.ScoreGroup);NumScoreGroups =长度(ScoreGroupLabels);hSG = 0(长度(h)、NumScoreGroups);对于II = 1:NumScoreGroups工业= dataSurvival.ScoreGroup == ScoreGroupLabels {二};H = ECDF(dataSurvival.YearsObserved(茚基),“截尾”,dataSurvival.Censored(茚基));HSG(:,ⅱ)= DIFF(H);结束图(X,HSG,'*')网格标题(“有条件的1年PDs,按分组”)包含(“年书”) ylabel ('PD'传奇(ScoreGroupLabels)

您可以通过解聚复古与段中的数据相应的PD以类似的方式。您可以暗算YOB或对历年这些租约。看到这些可视化,是指利用面板数据对消费者信贷违约概率进行压力测试

没有宏观影响的Cox PH模型

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

Cox比例风险回归是调整生存率估计量化预测变量的影响的方法半参数。该方法表示解释性变量作为共同的基线风险函数的乘数效应, H 0 Ť 。风险函数是Cox比例风险回归函数的非参数部分,而预测变量的影响是一个对数线性回归。这个Cox PH模型是

H X 一世 Ť = H 0 Ť EXP Σ Ĵ = 1 p X ij b Ĵ

哪里:

  • X 一世 = X i1 X 知识产权 是的预测变量一世个主题。

  • b Ĵ 是的系数Ĵ个预测变量。

  • H X 一世 Ť 是在时间的危险率Ť对于 X 一世

  • H 0 Ť 是基线风险率函数。

更多细节,请参阅coxphfit或者考克斯比例风险模型和其中的参考文献。

基本考克斯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),“马克斯”);[HCoxDiscreteT hcox离散];%将基线转换为hxCox = HCox(:,1);hCox = DIFF([0; HCox(:,2)]);

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

预测的PD设备对在训练数据中所观察到的PD设备进行比较。

每个评分组在贷款计算%比例ScoreGroupFraction = countcats (dataSurvival.ScoreGroup (TrainDataInd));ScoreGroupFraction = ScoreGroupFraction /笔(ScoreGroupFraction);%基线h是为“高风险”的危险率,在第一列%第2栏和第3栏分别为“中等”和“低”风险,%,由其对应的Cox模型参数项调整hPredictedByScore = 0(长度(hCox), NumScoreGroups);hPredictedByScore (: 1) = hCox;对于2:NumScoreGroups hPredictedByScore(:,ii) = hCox*exp(bCox(ii-1));结束hPredicted = hPredictedByScore * ScoreGroupFraction;%获取训练数据的ecdfHTrain = ecdf (dataSurvival.YearsObserved (TrainDataInd),...“截尾”dataSurvival.Censored (TrainDataInd),...'功能'“累积风险”);hTrain = DIFF(HTrain);图(X,hPredicted,“o”中,x,hTrain,'*')包含(“年书”) ylabel ('PD')传说('模型'“培训”)标题(“模型拟合(训练数据)”)网格

比较试验数据中预测的和观察到的PDs。

ScoreGroupFraction = countcats (dataSurvival.ScoreGroup (TestDataInd));ScoreGroupFraction = ScoreGroupFraction /笔(ScoreGroupFraction);hPredicted = hPredictedByScore * ScoreGroupFraction;%获取训练数据的ecdfHTest = ECDF(dataSurvival.YearsObserved(TestDataInd),...“截尾”,dataSurvival.Censored(TestDataInd),...'功能'“累积风险”);hTest = DIFF(HTest);图(X,hPredicted,“o”, x, ht,'*')包含(“年书”) ylabel ('PD')传说('模型'“测试”)标题(“模型拟合(测试数据)”)网格

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

添加的宏观信息仍然是重要的,因为无论是压力测试和寿命预测PD需要对宏观信息的显式依赖。

考克斯PH模型微距效果

本节展示了如何适应考克斯PH值模型,包括宏观信息,特别是,国内生产总值(GDP)增长,股市的增长。宏观变量的值每年的变化,因此,这些都与时间相关的预测。与时间相关的预测的考克斯PH功能的数据输入使用原始数据面板,其中添加的所述宏信息,并且对每行的时间间隔。

Cox比例风险模型的扩展,以考虑时间相关的变量是

H X 一世 Ť = H 0 Ť EXP Σ Ĵ = 1 p1 X ij b Ĵ + Σ ķ = 1 p2 X 一世 ķ Ť C ķ

哪里:

  • X ij 是用于预测变量值一世次主题和Ĵ长期有效的预测。

  • X 一世 ķ Ť 是用于预测变量值一世次主题和ķ在时间th随时间变化的预测器吨。

  • b Ĵ 是的系数Ĵ个与时间无关的预测变量。

  • C ķ 是的系数ķ个时间相关的预测变量。

  • H X 一世 Ť Ť 是在时间的危险率Ť对于 X 一世 Ť

  • H 0 Ť 是基线风险率函数。

更多细节,请参阅coxphfit或者考克斯比例风险模型和其中的参考文献。

宏变量被视为随时间变化的变量。如果与时间无关的信息,如初始分数组,通过贷款的生活提供风险的基线水平,这是合理的期望,不断变化的宏观条件可能会增加或减少围绕基线水平的风险,而这种变化如果宏观形势的变化将是从一年不同的未来。例如,年经济低增长将会使所有的贷款风险更大,不论其初始分数组。

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

这些工具期望时间间隔的规范,以及相应的预测值。第一年的时间间隔是0到1,第二年的时间间隔是1到2,以此类推。因此,每一行的时间间隔范围为yo -1到YOB。

与时间无关的变量,在整个贷款的历史常量值,因为是在原始数据的评分组信息的情况。无需改变任何东西与时间无关的变量。

对于时间因变量,值从一个区间变化到下一个区间。我们添加了GDP和市场变量作为时间依赖的预测因子。

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

数据。Ť一世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))
ID ScoreGroup YOB默认年TimeInterval所GDP市场截尾__ ___________ ___ ______ ____ __________ _____ ______ ________ 1低风险1 0 1997年0 1 2.72 7.61真1低风险2 0 1998年1 2 3.57 26.24真1低风险3 0 1999年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 5 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 data.GDP(TrainDataIndTD)data.Market(TrainDataIndTD)]...data.TimeInterval (TrainDataIndTD:)...“截尾”,data.Censored(TrainDataIndTD),...“基线”, 0);%处理基线HCoxTD以考虑离散时间(除去时间关系)HCoxTDDiscreteT =唯一的(HCoxTD(:,1));HCoxTDDiscreteH = grpstats(HCoxTD(:,2),HCoxTD(:,1),“马克斯”);HCoxTD = [HCoxTDDiscreteT 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)
国内生产总值市场_____ ______基准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 olabels {jj};XPredictST = [XPredictScore dataMacroStress.GDP(Scenario) dataMacroStress.Market(Scenario)];hPredictedST = hCoxTD * exp (XPredictST * bCoxTD);PDScenariosGroup (:, jj) = hPredictedST;结束PDScenarios = PDScenarios + PDScenariosGroup / NumScoreGroups;结束数字;巴(X,PDScenarios)标题(“压力测试,违约概率”)包含(“年书”) ylabel ('PD')传说(“基线”“不良”“严重”)网格

寿命PD和ECL

本节将展示如何使用考克斯PH宏观模型,以及如何计算寿命预计信用损失(ECL)来计算寿命的PD。

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

为了具体起见,本部分在贷款的第三年开始时调查一笔8年期贷款,并预测该贷款3年至8年的1年期PD。本节还计算贷款剩余期限内的生存概率。生存概率之间的关系 小号 Ť 与1年期的PD或危险率 H Ť ,有时也被称为向前PDs,是:

小号 0 = 1 小号 1 = 1 - H 1 小号 Ť = 小号 Ť - 1 1 - H Ť = 1 - H 1 1 - H Ť

有关示例,请参见Kaplan-Meier法(统计和机器学习工具箱)。

生命期PD (LPD)是贷款整个生命周期内的累计PD,由生存概率的补充给出:

LPD Ť = 1 - 小号 Ť

最后,另一感兴趣的量是边际PD(MPD),这是在两个连续的时间段之间的寿命PD的增加:

MPD Ť + 1 = LPD Ť + 1 - LPD Ť

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

MPD Ť + 1 = 小号 Ť - 小号 Ť + 1 = H Ť + 1 小号 Ť

指定三个宏观经济场景中,一个基线投影,和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 = SIZE(GDPPredict,2);%场景概率,用于计算生命周期ECLPScenario = [0.2;0.5;0.3];hPredict =零(大小(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);数字;副区(2,1,1)图(tLifetime0,PDLifetime)xticks(tLifetime0)网格xlabel('年') ylabel (“一生PD”)标题(“按场景的生命周期PD”)图例(ScenLabels,'位置'“最佳”)副区(2,1,2)巴(tLifetime,PDMarginal)格xlabel('年') ylabel (“边际PD”)标题(“按情景划分的边际PD值”)图例(ScenLabels)

通过情景这一辈子的PD是对的寿命预期信用损失(ECL),这种计算方法也需要对违约损失率(LGD)和违约暴露(EAD)生命周期值,每个场景的输入之一,和情景概率。为了简单起见,在该示例中恒定LGD和EAD值被假定,但是当使用LGD和EAD模型这些参数可以通过场景和按时间段而变化。

一生ECL的计算也需要有效利率(EIR)贴现的目的。在这个例子中,折扣因子计算在时间段的结束,但也可以使用其它的折扣时间,例如,在时间段之间的中点(即,折扣第一年的量用6个月的折扣因素;优惠二年级的金额有1.5年的贴现因子,等等)。

有了这些投入,预期信用缺失在时间Ť对于方案小号被定义为:

ECL Ť ; 小号 = MPD Ť ; 小号 LGD Ť ; 小号 EAD Ť ; 小号 阀瓣 Ť

哪里Ť为一个时间段,小号表示一个场景,并 阀瓣 Ť = 1 1 + EIR Ť

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

ECL 小号 = Σ Ť = 1 Ť ECL Ť ; 小号

最后,计算加权平均的这些预期信用损失,在所有情况下,要获得一个终身ECL值,其中 P 小号 代表场景概率:

ECL = Σ 小号 = 1 NumScenarios ECL 小号 P 小号

LGD = 0.55;%违约损失率o = 100;%违约暴露EIR = 0.045;%有效利率DiscTimes = tLifetime-tLifetime0 (1);DiscFactors = 1. / (1 + EIR)。^ DiscTimes;ECL_t_s = (PDMarginal *乐金显示器*含铅)。* DiscFactors;通过一年的场景%ECLECL_s =总和(ECL_t_s);按场景计算的% ECL总数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),“_s”);“ECL_total_s”;“Probability_s”]。DISP(ECL_Disp)
Scenario_1 Scenario_2 Scenario_3 __________ __________ __________ ECL_2005_s ECL_2006_s 0.94549 0.8921 0.84173 0.71543 0.6789 0.64419 0.53884 0.51412 0.49048 ECL_2007_s ECL_2008_s ECL_2009_s 0.40169 0.38527 0.36947 0.20849 0.20098 0.19372 0.12339 0.11952 0.11576 ECL_2010_s ECL_total_s Probability_s 0.2 0.5 0.3 2.9333 2.7909 2.6554
fprintf中('寿命ECL:%克\ N',ECL)
终身ECL:2.77872

当LGD和EAD不依赖于场景(即使它们随时间变化)时,可以对生命周期PD曲线进行加权平均,得到单一的平均生命周期PD曲线。

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

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

结论

这个例子展示了如何拟合PDs的Cox PH模型,如何对PDs进行应力测试,以及如何计算寿命PDs和ECL。

一个类似的例子,利用面板数据对消费者信贷违约概率进行压力测试,遵循相同的工作流程,采用Logistic回归,而不是Cox回归。可以与逻辑模型还进行寿命PD和ECL的在本实施例中的端部的计算,与一些修改的代码。

您可以修改这两个例子介绍了工作流程使用其他型号的配方。例如,您可以适应的物流模式,对待年龄作为分类(离散时间)变量。在这种情况下,模型的PD会更紧密贴合观测的PD,而是一个将失去模型的推断能力。此外,代替逻辑回归,其他广义线性模型(GLMS)由支持金宝appfitglm还可以用于对代码进行较小的更改,例如,probit模型或补充的日志-日志模型。因为所有这些模型都将贷款的年龄和宏观信息显式地合并到模型中,所以它们可以用于压力测试和生命周期PD和ECL分析。