主要内容

使用整个周期和时间点模型比较违约概率

此示例显示了如何使用消费者信贷面板数据创建整个周期(TTC)和时间点(PIT)模型,并比较它们各自的违约概率(PD)。

债务人的违约概率是信用风险分析中的一个基本风险参数。债务人的PD取决于特定于客户的风险因素以及宏观经济风险因素。由于TTC和PIT模型结合宏观经济条件的方式不同,因此它们产生不同的PD估计。

TTC信用风险指标主要反映了客户长期的信用风险趋势。信贷风险的短暂、短期变化可能会随着时间的推移而逆转。TTC信用风险措施的主要特征是其对信贷周期的高度稳定性和随时间变化的平稳性。

PIT信用风险度量利用在给定日期的所有可用的和相关的信息来估计客户在给定时间范围内的收益。信息集不仅包括对客户长期信贷风险趋势的预期,还包括地理、宏观经济和宏观信贷趋势。

此前,根据巴塞尔协议II的规定,监管机构呼吁使用TTC pd、给定违约损失(LGDs)和违约风险敞口(EADs)。然而,根据新的IFRS9和拟议的CECL会计准则,监管机构现在要求机构使用PDs、LGDs和EADs的PIT预测。通过考虑信贷周期的当前状态,PIT指标密切跟踪违约率和损失率随时间的变化。

面板数据加载

本例中的主要数据集(数据)包含以下变量:

  • ID -贷款标识符。

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

  • 小无赖,年书。

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

  • 年-公历年。

该数据还包括一个小数据集(dataMacro)对于相应的日历年来宏观经济数据:

  • 年-公历年。

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

  • 市场,市场回报(年复一年)。

的变量yob.国内生产总值,市场在相应的历年年底进行。计分组是贷款开始时原始信用评分的离散化。价值1对于默认的表示该贷款在相应的日历年度违约。

此示例使用模拟数据,但您可以将相同的方法应用于实际数据集。

加载数据并查看表的前10行。面板数据被堆叠,相同ID的观察数据被存储在连续的行中,创建一个又高又薄的表。这个小组是不平衡的,因为不是所有的id有相同数量的观察。

负载RetailCreditPanelData.matDISP(头(数据,10));
ID分数yob默认年份___ ______________ _______ _____ _____ ____ 1低风险1 0 1997 1低风险2 1998 1低风险3 0 1999 1低风险5 0 2001 1低风险6 0 2002 1低风险72003 1 Low Risk 8 0 2004 2中等风险1 0 1997 2中等风险2998
nrows =高度(数据);uniqueids =唯一(data.id);nids = length(uniqueids);fprintf('ID总数:%d \ n',nids)
id总数:96820
fprintf('总行数:%d\n'nRows)
行总行数:646724

违约利率逐年

使用作为分组变量,计算每年的观察违约率。使用groupsummary函数来计算默认的变量,分组多变的。将结果绘制在散点图上,显示默认速率随着多年来的增加而下降。

DefaultPerYear = groupsummary(数据,'年'“的意思是”“默认”); NumYears=高度(默认每年);disp(默认每年)
Year GroupCount mean_Default ____ __________ ____________ 1997 35214 0.018629 1998 66716 0.013355 1999 94639 0.012733 2000 92891 0.011379 2001 91140 0.010742 2002 89847 0.010295 2003 88449 0.0056417 2004 87828 0.0032905
次要情节(2,1,1)散射(DefaultPerYear。年,DefaultPerYear.mean_Default * 100,‘*’); 网格包含('年') ylabel (的违约率(%))标题(“每年违约率”%获取1997年、1998年和1999年队列的IDIDs1997 = data.ID (data.YOB &data.year = = = = 1997);IDs1998 = data.ID (data.YOB &data.year = = = = 1998);IDs1999 = data.ID (data.YOB &data.year = = = = 1999);%分别获得每个队列的默认率obsdfrate1997=groupsummary(数据(ismember(data.ID,IDs1997),:),......'yob'“的意思是”“默认”);obsdefrate1998 =组ummary(数据(ismember(data.id,ids1998),:),......'yob'“的意思是”“默认”);ObsDefRate1999 = groupsummary(数据(ismember (data.ID IDs1999):),......'yob'“的意思是”“默认”);%策划对日历年度年=独特(data.Year);次要情节(2,1,2)情节(ObsDefRate1997.mean_Default * 100,'-*')举行情节(年(2:结束),ObsDefRate1998.mean_Default * 100,'-*')绘图(第3年:结束),OBSDRATE1999。平均值默认值*100,'-*')举行标题('默认率与日历年')包含(“年”) ylabel (的违约率(%))传奇(“97”“98”“99”网格)

图中包含两个轴。每年具有标题默认速率的轴1包含分散类型的对象。标题默认速率与日历年的轴2包含3个line类型的对象。这些对象代表队列97、队列98、队列99。

该图显示默认速率随时间而降低。请注意,从1997年、1998年和1999年开始的贷款形成了三个队列。面板数据中没有贷款始于1999年之后。这一点在“帐面年与日历年”一节中有更详细的描述使用面板数据对消费者信贷违约概率进行压力测试。这句话中的减少趋势是通过数据中只有三个队列的事实来解释,并且每个队列的模式都会降低。

TTC模型使用计分组书中的岁月

TTC车型主要不受经济条件的影响。此示例中的第一个TTC模型仅使用计分组yob.作为违约率的预测器。

通过将现有数据分解为分别用于模型创建和验证的训练和测试数据集,生成训练和测试数据集。

NumTraining=地板(0.6*nIDs);rng('默认');Trainidind = Randsample(nids,numtring);TrainDataind = ISMember(data.id,uniqueids(trainidind));testdataind =〜traindataind;

使用fitlifetimepdmodel.功能适合逻辑模型。

TTCModel = fitLifetimePDModel(数据(TrainDataInd,:),“物流”......“ModelID”“TTC”“IDVar”“身份证”'agevar''yob''劳务'“ScoreGroup”......'responsevar'“默认”);disp (TTCModel.Model)
紧凑型广义线性回归模型:logit(默认)~1+评分组+YOB分布=二项式估计系数:估计值为pValue u________________________________________________YOB-0.22693 0.008437-26.897 2.3578e-159 388018观测值,388014误差自由度离散度:1 Chi^2-统计与常数模型:1.83e+03,p值=0

预测培训和测试数据集的PD预测

数据。TTCPD = 0(高度(数据),1);%预测样本中的data.ttcpd(traindataind)=预测(ttcmodel,data(traindataind,:));%预测样本外数据data.TTCPD (TestDataInd) =预测(TTCModel、数据(TestDataInd:));

使用可视化样本内匹配和样本外匹配modelAccuracyPlot

图;子图(2,1,1)ModelAccuralyPlot(TTCModel,数据(TrainDataind,:),'年'“数据ID”“培训数据”次要情节(2,1,2)modelAccuracyPlot (TTCModel、数据(TestDataInd:)'年'“数据ID”“测试数据”

图中包含2个轴。标题为Scatter Grouped by Year Training Data TTC, RMSE = 0.0016556的坐标轴1包含2个类型为line的对象。这些对象代表观察到的TTC。标题为散点分组按年测试数据TTC, RMSE = 0.0019761的坐标轴2包含2个类型为line的对象。这些对象代表观察到的TTC。

坑模型使用计分组,书籍年,GDP和市场回报

PIT模型随经济周期而变化。本例中的PIT模型使用计分组yob.国内生产总值,市场作为违约率的预测器。使用fitlifetimepdmodel.功能适合逻辑模型。

%添加GDP和市场返回原始数据的列data = join(data, dataMacro);DISP(头(数据,10))
ID分数yob默认年份TTCPD GDP市场_____________________________ ______ 1低风险1 0 1997 0.0067697 3.57 26.24 1低风险3 0 1999 0.0054027 2.86 18.1 1低风险4 0 2000 0.000 0.00431052.43 3.19 1低风险5 0 2001 0.001 0.0034384 1.26 -10.51 1低风险6 0 2002 0.0027422-0.59 -22.95 1低风险7 0 2003 0.0021867 0.63 2.78 1低风险8 0 2004 0.0017435 1.85 9.48 2中等风险1 0 1997 0.015097 2.72 7.612 1998年中等风险298 0.012069 3.57 26.24
PITModel = fitLifetimePDModel(数据(TrainDataInd,:),“物流”......“ModelID”“坑”“IDVar”“身份证”'agevar''yob''劳务'“ScoreGroup”......“MacroVars”, {'gdp'“市场”},'responsevar'“默认”);disp (PITModel.Model)
紧凑广义线性回归模型:logit(Default) ~ 1 + ScoreGroup + YOB + GDP + Market Distribution =二项式估计系数:evaluate SE tStat pValue __________ _________ _______ ___________ (Intercept) -2.667 0.10146 -26.287 2.6919e-152 ScoreGroup_Medium Risk -0.70751 0.037108 -19.066 ScoreGroup_Low Risk - 0.2895 0.045639 -28.253 YOB -0.32082 0.013636 -23.528 2.0867e-122 GDP -0.12295 0.039725 -3.095 0.0019681 Market -0.0071812 0.0028298 -2.5377离散:1 Chi^2-statistic vs. constant model: 1.97e+03, p-value = 0

预测用于训练和测试数据集的PD预测

data.PITPD=零(高度(数据),1);%预测样本data.pitpd(traindataind)=预测(pitmodel,数据(traindataind,:));%样本外预测data.PITPD (TestDataInd) =预测(PITModel、数据(TestDataInd:));

使用可视化样本内匹配和样本外匹配modelAccuracyPlot

图;子图(2,1,1)ModelAccuralyPlot(PitModel,数据(TrainDataind,:),'年'“数据ID”“培训数据”)子批次(2,1,2)modelAccuracyPlot(PITModel,data(TestDataInd,:),'年'“数据ID”“测试数据”

图中包含2个轴。轴1逐年训练数据坑组分散,RMSE = 0.00035546包含2个类型的2个对象。这些物体代表观测到的,PIT。轴2为按年测试数据坑组分组的标题分散,RMSE = 0.0006322包含2个类型的2个对象。这些物体代表观察,坑。

正如预期的那样,在PIT模型中,预测与观察到的违约率比在TTC模型中更接近。虽然本示例使用模拟数据,但从性质上讲,当将真实世界数据从TTC模型移到PIT模型时,预计会有相同类型的模型改进,尽管总体误差可能比本示例中更大。PIT模型的拟合通常比TTC模型的拟合要好,预测通常与观测到的速率相匹配。

利用PIT模型计算TTC PD

另一种计算TTC pd的方法是使用PIT模型,然后替换国内生产总值市场返回相应的平均值。在这种方法中,您使用整个经济周期(或更长时期)的平均值,因此只有基线经济条件影响模型,而违约率的任何变化都是由其他风险因素造成的。您还可以为经济体输入不同于最近经济周期观察到的平均值的预测基线值。例如,使用中位数而不是平均值可以减少误差。

但是,您也可以通过使用PIT模型作为场景分析工具来使用这种计算TTC PDs的方法;这不能在TTC模型的第一个版本中完成。这种方法的另一个优点是,您可以使用单一模型进行TTC和PIT预测。这意味着您只需要验证和维护一个模型。

%修改数据,用相应的平均值替换GDP和市场回报data.GDP(,) =值(data.GDP);数据。市场= repmat(平均值(数据.市场),高度(数据),1);DISP(头(数据,10));
ID ScoreGroup小无赖默认PITPD TTCPD GDP市场  __ ___________ ___ _______ ____ _________ ____ ______ _________ 1低风险1 0 1997 0.0084797 1.85 3.2263 0.0093187 1低风险2 0 1998 0.0067697 1.85 3.2263 0.005349 1低风险3 0 1999 0.0054027 1.85 3.2263 0.0044938 1低风险4 0 2000 0.0043105 1.85 3.2263 0.0038285 1低风险5 0 20010.0034384 1.85 3.2263 0.0035402 1低风险6 0 2002 0.0027422 1.85 3.2263 0.0035259 1低风险7 0 2003 0.0021867 1.85 3.2263 0.0018336 1低风险8 0 2004 0.0017435 1.85 3.2263 0.0010921 2中等风险1 0 1997 0.015097 1.85 3.2263 0.016554 2中等风险2 0 1998 0.012069 1.85 3.2263 0.0095319

预测用于训练和测试数据集的PD预测

数据。TTCPD2 = 0(高度(数据),1);%预测样本data.TTCPD2 (TrainDataInd) =预测(PITModel、数据(TrainDataInd:));%样本外预测data.TTCPD2 (TestDataInd) =预测(PITModel、数据(TestDataInd:));

使用可视化样本内匹配和样本外匹配modelAccuracyPlot

f =图;子图(2,1,1)ModelAccuralyPlot(PitModel,数据(TrainDataind,:),'年'“数据ID”“培训、宏观平均”)子批次(2,1,2)modelAccuracyPlot(PITModel,data(TestDataInd,:),'年'“数据ID”“测试、宏观平均”

图中包含2个轴。标题为Scatter Grouped by Year Training, Macro Average PIT, RMSE = 0.0029488的坐标轴1包含2个类型为line的对象。这些物体代表观测到的,PIT。轴2的标题分散分组的年度测试,宏观平均PIT, RMSE = 0.0034313包含2个对象的类型线。这些物体代表观察,坑。

的初始值国内生产总值市场变量。使用PIT模型预测的TTC PD值和中值或均值宏值存储在TTCPD2.列,该列用于将预测与下面的其他模型进行比较。

data.gdp = [];data.market = [];数据=加入(数据,DataMacro);DISP(头(数据,10))
ID分数yob默认年份TTCPD PITPD TTCPD2 GDP市场_________________________________________ 1低风险1 0 1998 0.0077772 3.57 0.0077772 3.57 0.0077772 3.57 0.0077772 3.57 26.24 1低风险3 0 1999 0.0054027 0.1999 0.0054027 0.00449380.0056548 2.86 18.1 1低风险4 0 2000 0.000 0.0043105 0.0038285 0.0038285 0.0038285 0.0038285 0.0038285 0.0038285 0.0038285 0.0038285 0.0038285 0.0041093 2.43 3.19 1低风险5 0 2001 0.0034384 0.0035402 0.0029848 1.26 -10.51 1低风险6 0 2002 0.0021674 -0.59 -22.95 1低风险7 0 2003 0.0021867 0.63 0.781个低风险8 0 2004 0.00117435 0.0010921 0.0011011422 1.85 9.48 2中等风险1 0 1997 0.019701118966 2.72 7.61 2中等风险2 0998 0.01833 3.57 26.24

比较模型

首先,比较TTC模型的两个版本。

比较鉴别使用的模型modeldiscriminationplot.。这两种型号具有非常相似的性能等级客户,通过接收器操作特征(ROC)曲线和ROC曲线(AUROC,或简单的AUC)度量下的区域测量。

图;modeldiscriminationplot(ttcmodel,data(testdataind,:),“数据标识”'测试数据'“rofitepd”data.TTCPD2 (TestDataInd),“ReferenceID”'TTC 2,宏观平均'

图中包含一个坐标轴。标题为ROC测试数据TTC, AUROC = 0.68662 TTC 2, Macro Average, AUROC = 0.68281的坐标轴包含2个类型为line的对象。这些对象代表TTC, ttc2,宏观平均。

然而,TTC模型更准确,预测的PD值更接近于观测到的违约率。使用modelAccuracyPlot展示绘图中报告的根均方误差(RMSE)确认TTC模型更准确地对此数据集。

ModelAccuralyplot(TTCModel,数据(TestDataind,:),'年'“数据标识”'测试数据'“rofitepd”data.TTCPD2 (TestDataInd),“ReferenceID”'TTC 2,宏观平均'

图中包含一个坐标轴。逐年测试数据TTC分散的标题分散的轴,RMSE = 0.0019761 TTC 2,宏观平均值,RMSE = 0.0034313包含3个类型的类型。这些对象代表了观察到的TTC,TTC 2,宏观平均值。

使用modeldiscriminationplot.比较TTC模型和PIT模型。

AUROC只比PIT模型稍微好一点,表明两种模型在按风险对客户进行排名方面具有可比性。

图;modeldiscriminationplot(ttcmodel,data(testdataind,:),“数据标识”'测试数据'“rofitepd”data.PITPD (TestDataInd),“ReferenceID”“坑”

图中包含一个坐标轴。具有标题ROC测试数据TTC的轴,AUROC = 0.68662坑,AUTOC = 0.69341包含2个类型线的物体。这些对象代表TTC,PI​​T。

使用modelAccuracyPlot可视化模型精度或模型校准。该曲线表明,PIT模型执行更好,预测的PD值更接近观察到的默认速率。这是预期的,因为预测对宏变量敏感,而TTC模型仅使用初始分数和模型的年龄以进行预测。

ModelAccuralyplot(TTCModel,数据(TestDataind,:),'年'“数据标识”'测试数据'“rofitepd”data.PITPD (TestDataInd),“ReferenceID”“坑”

图中包含一个坐标轴。标题为按年份分组的检测数据TTC, RMSE = 0.0019761 PIT, RMSE = 0.0006322的坐标轴包含3个类型为line的对象。这些物体代表观测到的,TTC, PIT。

您可以使用Modeldiscimination.以编程方式访问AUROC和RMSE,而无需创建绘图。

DiscMeasure=modelDiscrimination(TTC模型,数据(TestDataInd,:),“数据标识”'测试数据'“rofitepd”data.PITPD (TestDataInd),“ReferenceID”“坑”);DISP(DECMEASURE)
AUROC_______;TTC,测试数据0.68662坑,测试数据0.69341
AccMeasure = modelAccuracy (TTCModel、数据(TestDataInd:)'年'“数据标识”'测试数据'“rofitepd”data.PITPD (TestDataInd),“ReferenceID”“坑”);disp (AccMeasure)
RMSE _________ TTC,按年份分组,检测数据0.0019761 PIT,按年份分组,检测数据0.0006322

尽管所有模型的识别能力相当,但PIT模型的准确率要高得多。然而,TTC和PIT模型通常用于不同的目的,如果有更稳定的预测是重要的,TTC模型可能是首选。

参考

  1. 广义线性模型文档://www.tatmou.com/help/stats/generalized-linear-regression.html

  2. 贝森斯,B., D.罗施和H. Scheule。信用风险分析。威利,2016年。