这个示例展示了如何使用消费者(零售)信用面板数据来可视化不同水平上观察到的违约率。它还展示了如何拟合一个模型来预测违约概率(PD)和寿命PD值,并执行压力测试分析。
消费者贷款的面板数据集使您能够识别不同年龄或不同年份的贷款的违约率模式。您可以使用评分组的信息来区分不同评分级别的默认率。此外,您可以使用宏观经济信息来评估经济状况如何影响消费者贷款违约率。
采用标准logistic回归模型,即一种广义线性模型,对零售信贷面板数据进行拟合fitLifetimePDModel
来自风险管理工具箱™. 虽然同一型号可以使用fitglm
函数,该模型的默认生存期概率(PD)版本是为信用申请设计的,并支持生存期PD预测和模型验证工具,包括本例中显示的鉴别和准确性图。金宝app该实例还描述了如何拟合一个更高级的模型来解释面板数据效应,即广义线性混合效应模型。然而,对于本例中的数据集,面板效应是可以忽略的,标准逻辑模型更适合于效率。
逻辑回归模型预测了所有分数水平、账龄和宏观经济变量情景的违约概率。简要讨论了如何预测寿命PD值,并指出了其他功能。该示例显示了用于验证和比较模型的模型识别和模型精度工具。在本例的最后一节中,逻辑模型用于压力测试分析,该模型预测给定基线的违约概率,以及不利和严重不利宏观经济情景的违约概率。
有关更多信息,请参阅违约周期概率模型概述. 另见example基于Cox比例风险的违约概率建模,它遵循相同的工作流,但使用Cox回归而不是逻辑回归,并具有生命周期PD和生命周期预期信用损失(ECL)的计算信息。
主要数据集(数据
)包含以下变量:
身份证件
:贷款标识符。
计分组
:贷款开始时的信用评分,离散分为三组:高的风险
,中等风险
和低风险
.
小无赖
:书上的岁月。
违约
:默认指标。这是响应变量。
一年
:日历年。
还有一个小的数据集(dataMacro
)及相应历年的宏观经济数据:
一年
:日历年。
国内生产总值
:国内生产总值增长(同比)。
集市
:市场回报率(同比)。
变量小无赖
,一年
,国内生产总值
和集市
在相应日历年结束时进行观测。评分组是贷款开始时原始信用评分的离散化。价值1
对于违约
表示该贷款在相应的日历年度违约。
还有第三个数据集(dataMacroStress
),以及宏观经济变量的基线、不利和严重不利情景。该表用于压力测试分析。
本示例使用模拟数据,但同样的方法已成功应用于真实数据集。
加载数据并查看表的前10行和后10行。面板数据是堆叠的,在某种意义上,相同ID的观测数据存储在连续的行中,创建了一个又高又薄的表。这个小组是不平衡的,因为不是所有的id都有相同数量的观察。
负载RetailCreditPanelData.mat流(“\n前十行:\n”)
第十行:
disp(数据(1: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
流(“最后的10行:\ n”)
最后的10行:
显示(数据(end-9:end,:)
ID ScoreGroup YOB违约年高风险60 2003 96819高风险70 2004 96820中等风险1 0 1997 96820中等风险2 0 1998 96820中等风险3 0 1999 96820中等风险4 0 2000 96820中等风险5 0 2001 96820中等风险6 0 2002 96820中等风险7 0 2003 96820中等风险8 2004
nRows =身高(数据);UniqueIDs =独特(data.ID);nIDs =长度(UniqueIDs);流(' id总数:%d\n'nIDs)
id总数:96820
流('总行数:%d\n'nRows)
总行数:646724
使用信用评分组作为分组变量来计算每个评分组的观察到的违约率。为此,使用组摘要
函数来计算违约
变量,分组由计分组
变量。将结果绘制在条形图上。正如预期的那样,默认利率会随着信贷质量的提高而降低。
DefRateByScore = groupsummary(数据,“得分组”,“中庸”,“默认”);NumScoreGroups =身高(DefRateByScore);disp (DefRateByScore)
ScoreGroup GroupCount mean_Default ___________ __________ ____________高危2.0999e+05 0.017167中风险2.1743e+05 0.0086006低风险2.193e+05 0.0046784
栏(DefRateByScore.ScoreGroup DefRateByScore.mean_Default * 100)标题(“违约率与得分组”)包含(“分数组”)伊拉贝尔(“观察到的默认率(%)”网格)上
接下来,按年份分组计算图书的违约率(用小无赖
变量)。由此产生的利率是有条件的一年期违约率。例如,帐面上第三年的违约率是第三年违约贷款的比例,相对于过去第二年投资组合中的贷款数量。换句话说,第三年的默认比率是具有小无赖
=3.
和违约
= 1,除以有小无赖
=3.
.
绘制结果。有一个明显的下降趋势,违约率随着账面年数的增加而下降。第三年和第四年的违约率相似。然而,从这幅图中不清楚这是贷款产品的特征还是宏观经济环境的影响。
DefRateByYOB=组摘要(数据,“小无赖”,“中庸”,“默认”);NumYOB =身高(DefRateByYOB);disp (DefRateByYOB)
YOB GroupCount mean________________________________________________________________________________________
情节(双(DefRateByYOB.YOB), DefRateByYOB.mean_Default * 100,'-*')标题(“违约率vs.年数”)包含(“年书”)伊拉贝尔(“观察到的默认率(%)”网格)上
现在,根据分数组和在书上的年数分组,然后绘制结果。该图显示,随着时间的推移,所有得分组的表现相似,总体呈下降趋势。第三年和第四年是下降趋势的一个例外:利率持平高的风险
组,第三年上升低风险
组。
DefRateByScoreYOB = groupsummary(数据,{“得分组”,“小无赖”},“中庸”,“默认”);%显示输出表,以显示它的结构%为了简洁,只显示前10行disp (DefRateByScoreYOB (1:10)):
得分组YOB分组计数平均违约率高风险132601 0.029692高风险231338 0.0214325高风险330138 0.018432348高风险424380.018276高风险528661 0.014794高风险62810.016160.016160中等风险317940.011676
DefRateByScoreYOB2=重塑(DefRateByScoreYOB.mean_默认值,...NumYOB NumScoreGroups);情节(DefRateByScoreYOB2 * 100,'-*')标题(“违约率vs.年数”)包含(“年书”)伊拉贝尔(“观察到的默认率(%)”)图例(类别(data.ScoreGroup))网格上
这些数据包括三个组别,即年份:1997年、1998年和1999年开始的贷款。面板数据中没有贷款是在1999年以后开始的。
本节将展示如何分别可视化每个队列的默认率。所有组别的违约率都被绘制出来,分别与书籍年数和日历年进行对比。书中年份的模式暗示了贷款产品的特点。历年的模式表明宏观经济环境的影响。
从第2年到第4年,曲线显示了三个群体的不同模式。然而,当与日历年对比时,这三个群体在2000年到2002年间表现出了相似的行为。这段时间曲线变平了。
%获取1997年、1998年和1999年队列的IDIDs1997=data.ID(data.YOB==1和data.Year==1997);IDs1998=data.ID(data.YOB==1和data.Year==1998);IDs1999=data.ID(data.YOB==1和data.Year==1999);% IDs2000AndUp未使用,计算它只是为了显示它是空的,1999年以后开始没有贷款IDs2000AndUp=data.ID(data.YOB==1&data.Year>1999);%分别获得每个队列的默认率ObsDefRate1997 = groupsummary(数据(ismember (data.ID IDs1997):),...“小无赖”,“中庸”,“默认”);ObsDefRate1998 = groupsummary(数据(ismember (data.ID IDs1998):),...“小无赖”,“中庸”,“默认”);ObsDefRate1999 = groupsummary(数据(ismember (data.ID IDs1999):),...“小无赖”,“中庸”,“默认”);与书本上的岁月相对照绘图(OBSDRATE1997.YOB,OBSDRATE1997.mean_Default*100,'-*')持有上情节(ObsDefRate1998.YOB ObsDefRate1998.mean_Default * 100,'-*')情节(ObsDefRate1999.YOB ObsDefRate1999.mean_Default * 100,'-*')持有关标题(“违约率vs.年数”)包含(“年书”)伊拉贝尔(的违约率(%))传说(‘第97组’,“队列98”,“99”网格)上
%与历年相对照年=独特(data.Year);情节(ObsDefRate1997.mean_Default * 100,'-*')持有上绘图(年份(2:结束),OBSDRATE1998。平均值默认值*100,'-*')情节(年(3:结束),ObsDefRate1999.mean_Default * 100,'-*')持有关标题(“违约率vs.日历年”)包含(“年”)伊拉贝尔(的违约率(%))传说(‘第97组’,“队列98”,“99”网格)上
可视化数据后,可以为默认利率构建预测模型。
将面板数据拆分为训练集和测试集,并根据ID号定义这些集。
NumTraining =地板(0.6 * nIDs);rng (“默认”);%的再现性NumTraining TrainIDInd = randsample (nIDs);TrainDataInd = ismember (data.ID UniqueIDs (TrainIDInd));TestDataInd = ~ TrainDataInd;
第一个模型只使用评分组和书的年数作为违约率的预测因素p. 违约概率定义为:p/(1-p).逻辑模型将概率的对数联系起来,或者日志赔率,对预测值的影响如下:
1米指示器有值吗1
对于中等风险
贷款和0
否则,与之相似1 l对于低风险
贷款。这是处理绝对预测器的标准方法,比如计分组
.每个风险级别都有一个不同的常数:啊对于高的风险
,啊+上午对于中等风险
和啊+铝对于低风险
.
ModelNoMacro=fitLifetimePDModel(数据(TrainDataInd,:),“物流”,...“ModelID”,“没有宏”,“描述”,“带有YOB和得分组的Logistic模型,但没有宏观变量”,...“IDVar”,“身份证”,“LoanVars”,“得分组”,“AgeVar”,“小无赖”,“ResponseVar”,“默认”);disp (ModelNoMacro.Model)
紧凑型广义线性回归模型:logit(默认)~1+计分组+YOB分布=二项式估计系数:估计统计值uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(截距)-3.2453 0.033768-96.106 0评分组中风险-0.7058 0.037103-19.023 1.1014e-80评分组低风险-1.2893 0.045635-28.253 1.3076e-175 YOB-0.22693 0.008437-26.897 2.3578e-159 388018观察,388014误差自由度离散度:1 Chi^2-统计与常数模型:1.83e+03,p值=0
对于数据中的任何行,值为p是不观察,只有一个0
或1
观察默认指示灯。通过标定得到模型系数,得到的预测值p可以使用预测
函数。
的拦截
系数是该参数的常数高的风险
水平(啊术语),ScoreGroup_Medium风险
和ScoreGroup_Low风险
系数是调整的中等风险
和低风险
水平(我和艾尔条款)。
违约概率p当预测值改变时,对数赔率(模型的左侧)也朝着相同的方向移动中等风险
和低风险
为负值时,如预期的那样,风险水平越高,违约率越低。书龄系数也为负,与数据中观察到的书龄总体下降趋势一致。
另一种拟合模型的方法是使用fitglm
函数来自统计和机器学习工具箱™。上式表示为
默认~ 1 + ScoreGroup + YOB
的1 + ScoreGroup
术语解释了基线常数和风险水平的调整。设置可选参数分配
来二项
为了表示需要一个逻辑模型(即左侧概率为对数的模型),如下所示:
ModelNoMacro=fitglm(数据(TrainDataInd,:),'Default~1+ScoreGroup+YOB','Distribution','binomial');
如引言中所述,采用寿命PD版模型拟合的优点fitLifetimePDModel
它是为信用申请而设计的,它可以预测生命周期,并支持模型验证工具,包括鉴别和精度图。金宝app有关更多信息,请参见违约周期概率模型概述.
为了解释面板数据效应,一个更高级的混合效应模型可以使用fitglm
函数来自统计和机器学习工具箱™。虽然这个模型不适合这个例子,但代码是非常相似的:
ModelNoMacro = fitglme(data(TrainDataInd,:),'Default ~ 1 + ScoreGroup + YOB + (1|ID)','Distribution','binomial');
的(1 | ID)
公式中的项加上a随机效应与模型相一致。这种效应是一种预测因子,其值未在数据中给出,而是与模型系数一起校准。为每个ID校准一个随机值。由于ID数量非常多,这种额外的校准要求大大增加了在这种情况下拟合模型的计算时间。对于本例中的面板数据集,随机项的影响可以忽略不计。当引入随机效应时,随机效应的方差很小,模型系数几乎没有变化。更简单的逻辑回归模型是首选,因为它更快地进行校准和预测,并且两种模型预测的违约率基本相同。
预测培训和测试数据的违约概率预测
函数逐行预测条件PD值。在下一节中,我们将存储数据,以便将预测与宏观模型进行比较。
数据。PDNoMacro = zeros(height(data),1);%样本预测的PDNoMacro(TrainDataInd)=预测(ModelNoMacro,data(TrainDataInd,:);%样本外预测data.PDNoMacro (TestDataInd) =预测(ModelNoMacro、数据(TestDataInd:));
要进行终身PD预测,使用predictLifetime
函数。对于生命周期预测,预测数据集中的每个ID值都需要预测器的预测值。例如,预测数据集中前两个id的存活概率。看看条件PD (PDNoMacro
栏)及寿命PD (LifetimePD
列)匹配每个ID的第一年。在那一年之后,寿命PD增加,因为它是一个累积概率。有关更多信息,请参见predictLifetime
. 另见预计信用损失计算的例子。
数据1=数据(1:16,:);data1.LifetimePD=预测寿命(ModelNoMacro,data1);显示(数据1)
ID ScoreGroup小无赖默认年PDNoMacro LifetimePD __ ___________ ___ _______ ____ _________ __________ 1低风险1 0 1997 0.0084797 0.0084797 - 1低风险2 0 1998 1999 0.0054027 0.020513 0.0067697 0.015192 - 1低风险3 0 1低风险4 0 2000 0.0043105 0.024735 1低风险5 0 2001 0.0034384 0.028088 1低风险6 0 2002 0.0027422 0.030753 1低风险7 0 2003 0.0021867 0.032873 1 Low Risk 8 0 2004 0.0017435 0.034559 2 Medium Risk 1 0 1997 0.015097 0.015097 2 Medium Risk 2 0 1998 0.012069 0.026984 2 Medium Risk 3 0 1999 0.0096422 0.036366 2 Medium Risk 4 0 2000 0.0076996 0.043785 2 Medium Risk 5 0 2001 0.006146 0.049662 2 Medium Risk 6 0 2002 0.0049043 0.054323 2 Medium Risk 7 0 2003 0.0039125 0.058023 2 Medium Risk 8 0 2004 0.0031207 0.060962
可视化样本内(训练)或样本外(测试)拟合使用modelAccuracyPlot
.它需要一个分组变量来计算每一组的违约率和平均预测PD值。这里用书上的年份作为分组变量。
DataSetChoice =“测试”;如果DataSetChoice = =“培训”印第安纳州= TrainDataInd;其他的印第安纳州= TestDataInd;终止modelAccuracyPlot(ModelNoMacro,数据(Ind,:),“小无赖”,“数据ID”DataSetChoice)
得分组可以作为第二个分组变量输入,以可视化得分组的匹配情况。
modelAccuracyPlot (ModelNoMacro数据(印第安纳州,:),{“小无赖”“得分组”},“数据ID”DataSetChoice)
终身PD模型也支持模型识别的验证工具。金宝app特别是,modelDiscriminationPlot
函数创建接收者工作特征(ROC)曲线图。这里需要为每个评分组提供单独的ROC曲线。有关更多信息,请参见modelDiscriminationPlot
.
模型识别图(ModelNoMacro,数据(Ind,:),“SegmentBy”,“得分组”,“数据ID”DataSetChoice)
用以前的模型预测的趋势,作为书籍年的函数,有一个非常有规律的减少模式。然而,数据显示出一些偏离这一趋势的情况。为了解释这些偏差,将国内生产总值(gdp)的年增长率(以国内生产总值
变量)和股票市场年收益(用集市
变量)添加到模型中。
展开数据集,为其添加一列国内生产总值
一个给我集市
的数据dataMacro
表格
data =加入(数据、dataMacro);disp(数据(1:10)):
ID ScoreGroup小无赖违约PDNoMacro GDP市场 __ ___________ ___ _______ ____ _________ _____ ______ 1低风险1 0 1997 0.0084797 2.72 7.61 1低风险2 0 1998 0.0067697 3.57 26.24 1低风险3 0 1999 0.0054027 2.86 18.1 1低风险4 0 2001 2000 0.0043105 2.43 3.19 1低风险5 0 0.0034384 1.26 -10.51 2002 0.0027422 -0.59 1低风险6 0-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.61 2中等风险20 1998 0.012069 3.57 26.24
通过扩展模型公式以包括以下内容,使模型与宏观经济变量或宏观模型相匹配:国内生产总值
和集市
变量。
ModelMacro = fitLifetimePDModel(数据(TrainDataInd,:),“物流”,...“ModelID”,“宏”,“描述”,“包含YOB、分数组和宏观变量的逻辑模型”,...“IDVar”,“身份证”,“LoanVars”,“得分组”,“AgeVar”,“小无赖”,...“大变形金刚”,{“国内生产总值”,“市场”},“ResponseVar”,“默认”);disp (ModelMacro.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。下面是如何使用宏模型预测训练和测试数据的条件PD。属性中的新列存储结果数据
表格寿命期PD预测也支持金宝apppredictLifetime
函数,如使用记分组和书籍年数的违约率模型部分
数据。PD米一个cro = zeros(height(data),1);%样本预测的data.PDMacro (TrainDataInd) =预测(ModelMacro、数据(TrainDataInd:));%样本外预测PDMacro(TestDataInd)=预测(ModelMacro,data(TestDataInd,:);
模型的精度和判别图为模型提供了方便的比较工具。
使用可视化样本内或样本外拟合modelAccuracyPlot
.通过模型的预测,没有宏观经济变量作为参考模型。首先用书籍年作为单独的分组变量,然后用分数组作为第二个分组变量。
DataSetChoice =“测试”;如果DataSetChoice = =“培训”印第安纳州= TrainDataInd;其他的印第安纳州= TestDataInd;终止modelAccuracyPlot (ModelMacro数据(印第安纳州,:),“小无赖”,“ReferencePD”data.PDNoMacro(印第安纳州),“引用ID”,ModelNoMacro.ModelID,“数据ID”DataSetChoice)
modelAccuracyPlot(ModelMacro,数据(Ind,:){“小无赖”,“得分组”},“ReferencePD”data.PDNoMacro(印第安纳州),“引用ID”,ModelNoMacro.ModelID,“数据ID”DataSetChoice)
与没有宏观经济变量的模型相比,预测的准确性显著提高。当宏观经济变量被纳入模型时,预测的条件PD值更接近于观察到的违约率的模式,报告的均方根误差(RMSE)明显更小。
绘制宏观模型和不含宏观变量的模型的ROC曲线,比较它们在模型判别方面的表现。
modelDiscriminationPlot (ModelMacro数据(印第安纳州,:),“ReferencePD”data.PDNoMacro(印第安纳州),“引用ID”,ModelNoMacro.ModelID,“数据ID”DataSetChoice)
歧视通过风险来衡量顾客的排名。两个模型的表现相似,只有在宏观经济变量加入模型时略有改善。这意味着两个模型通过为高风险客户分配更高的PD值来实现低风险、中风险和高风险客户的分离。
虽然两个模型的识别性能相似,但宏观模型的预测PD值更准确。使用判别和准确性工具对于模型验证和模型比较非常重要。
使用拟合的宏观模型对预测的违约概率进行压力测试。
假设以下是宏观经济变量的压力情景,例如,由监管机构提供。
disp(数据宏应力)
GDP市场_____ ______基线2.27 15.02不利1.31 4.56严重-0.22 -5.64
建立一个用于预测违约概率的基本数据表。这是一个虚拟数据表,每个分数组和账簿上的年数组合有一行。
dataBaseline =表;[ScoreGroup,小无赖]= meshgrid (1: NumScoreGroups, 1: NumYOB);dataBaseline。计分组=categorical(ScoreGroup(:),1:NumScoreGroups,...类别(data.ScoreGroup),“序数”,真正的);dataBaseline。小无赖=小无赖(:); dataBaseline.ID = ones(height(dataBaseline),1); dataBaseline.GDP = zeros(height(dataBaseline),1); dataBaseline.Market = zeros(height(dataBaseline),1);
要进行预测,请为所有分数组组合和账面年数设置相同的宏观经济条件(基线、不利或严重不利)。
预测违约概率基线dataBaseline.GDP (:) = dataMacroStress。国内生产总值(“基线”);dataBaseline.Market(:)=dataMacroStress.Market(“基线”);dataBaseline。PD=预测(米odelMacro,dataBaseline);%预测不利情景下的违约概率dataAdverse = dataBaseline;dataAdverse.GDP (:) = dataMacroStress。国内生产总值(“不良”);数据不利市场(:)=数据宏观应力市场(“不良”);dataAdverse。PD=预测(米odelMacro,dataAdverse);%预测严重不利情景下的违约概率dataSevere = dataBaseline;dataSevere.GDP (:) = dataMacroStress。国内生产总值(“严重”);dataSevere.Market (:) = dataMacroStress。市场(“严重”); dataSevere.PD=预测(ModelMacro,dataSevere);
在三种替代监管情景下,可视化各评分组的平均预测违约概率。此处,所有评分组均隐含加权相等。但是,也可以在任何给定投资组合的贷款水平上进行预测,以使预测违约率与贷款的实际分布相一致同样的可视化可以分别为每个分数组生成。
PredPDYOB = 0 (NumYOB, 3);PredPDYOB(: 1) =意味着(重塑(dataBaseline.PD, NumYOB NumScoreGroups), 2);PredPDYOB(:, 2) =意味着(重塑(dataAdverse.PD, NumYOB NumScoreGroups), 2);PredPDYOB(:, 3) =意味着(重塑(dataSevere.PD, NumYOB NumScoreGroups), 2);图;酒吧(PredPDYOB * 100);包含(“年书”)伊拉贝尔(“预测违约率(%)”)传说(“基线”,“不良”,“严重”)标题(“压力测试,违约概率”网格)上
广义线性模型文档://www.tatmou.com/help/stats/generalized-linear-regression.html
广义线性混合效应模型文件://www.tatmou.com/help/stats/generalized-linear-mixed-effects-models.html
美联储,综合资本分析与评估(CCAR):https://www.federalreserve.gov/bankinforeg/ccar.htm
英格兰银行,压力测试:https://www.bankofengland.co.uk/financial-stability
欧洲银行管理局,全欧盟压力测试:https://www.eba.europa.eu/risk-analysis-and-data/eu-wide-stress-testing
fitglm
|菲特姆
|fitLifetimePDModel
|预测
|predictLifetime
|modelDiscrimination
|modelDiscriminationPlot
|modelAccuracy
|modelAccuracyPlot
|物流
|概率