信用风险和集中度

机器算法验证 泊松分布 金融 贝叶斯 风险
2022-04-05 01:13:43

我正在与一家英国信用合作社合作,我们正在寻求建立一个模型来评估我们的信用风险以及随着时间的推移而发生的变化。我们向借款人提供了许多贷款,每个借款人都有信用评级(假设这些贷款分为 A、AA、AAA、B、BBB 等......)。

到目前为止,我采取的方法是获取每个评级区间的违约历史,并建立一个共轭模型(Gamma/Poisson)来衡量每个评级区间的风险状况。然后,我可以使用预期的默认值和方差来建立一些预期损失、风险概况、置信水平等的衡量标准......

这些贷款是针对个人成员的,并且由于信用合作社与特定组织/行业无关,因此我将个人贷款视为独立且分布相同,没有很强的、可识别的相关性。

我担心的一个因素是,一些成员的贷款余额可能比其他成员异常高。例如,我有 300 笔 B 类贷款,平均为 500 英镑,但我有 15 笔 AAA 类贷款,平均为 10,000 英镑。每个类别的风险敞口是相同的,但由于每个借款人的平均贷款在一个类别中较高,我是否应该在我的模型中认识到该类别中的一些违约将比另一个类别中的更多违约产生更大的财务影响类别?如果是这样,我该如何建模?一个简单的泊松模型可以接受吗?

我想我是在问,当我目前评估风险时,我应该如何处理集中因素,就好像它与借款人和借款金额一样。非常欢迎任何帮助!

2个回答

在监管环境中,实际上存在三个与信用风险相关的参数:

1) 违约风险暴露 (EAD),即您的机构面临损失的名义金额。如果需要,您可以在此处添加未使用的信用额度/行。

2) 违约损失率 (LGD),即 1-recovery rate。回收率取决于抵押品等。

3) 违约概率 (PD),它是违约的历史或模型化概率。当然,您还必须定义默认值是什么..

货币单位的预期损失 (EL) 如下:

EL=PD*EAD*LGD

如果您有参数估计,那么您可以轻松计算出弥补预期违约损失所需的准备金。对于防止意外损失的额外准备金,您需要对概率有所了解。的损失。

我已经看到了 LGD 是 PD 函数的构造,这样更高的 PD 将导致更小的恢复率。

EL=PD*EAD*LGD(PD)

如果您假设这些术语之间是独立的,您可以从您自己的财务数据和模型 PD 中分别获得 LGD 和 EAD 数字。

可以使用对 Vasicek VaR 模型的修改,以经济资本的形式反映集中信用风险。Vasicek 模型是 Basel II 框架下信用风险的关键模型,它假设信用风险敞口是统一的。然而,可以通过应用蒙特卡罗方法来修改它,该方法根据预期违约率 k/n 对投资组合中的 k 个风险敞口进行随机抽样。通过重复此过程,可以获得具有浓度的损耗分布。下面的代码完成了这项工作。

-------------------------------------------------- -----------------------------------------

Monte Carlo 中使用的迭代次数

N_iter <- 10000 #1000000

曝光次数

N <- 150

违约概率

PD_Portfolio <- 0.05 LGD_Portfolio <- 0.6

在默认情况下创建一个虚拟曝光序列

set.seed(123) u <- seq(1,N,1) u1 <- pnorm(rnorm(u))

EAD<- 10^3/分钟(u1)*u1

相关因子(应根据暴露类别而变化)

R <- 0.03*(1-exp(-35*PD))/(1-exp(-35))+0.16*(1-(1-exp(-35*PD))/(1-exp(- 35)))

max_loss_R <- function(PD,s) {

返回(pnorm(R^(-0.5)*(sqrt(1-R)*qnorm(s)-qnorm(PD))))

}

列出可能的损失值

S_range <- seq(0,1,1/N) N2 <- N+1 loss_tabulation <- cbind(0:N,S_range,max_loss_R(PD_Portfolio,S_range)) loss_tabulation_df <- as.data.frame(loss_tabulation) colnames( loss_tabulation_df)<- c("#Defaults(D)","%Defaults(D/N)","#Defaults<=D")

均匀分布的随机样本

vec_N_Defaults <- rep(0,N_iter) 损失 <- rep(0,N_iter)

for(i in 1:N_iter){

y <- runif(1) vec_N_Defaults[i] <- LGD_Portfolio which(abs(loss_tabulation_df[,3]-y)==min(abs(loss_tabulation_df[,3]-y))) Loss[i] <- LGD_Portfolio sum (EAD[样本(1:N,vec_N_Defaults[i],replace=F)])

}

vec_N_Defaults2 <- 排序(vec_N_Defaults,递减=真)

损失2 <-排序(损失,递减=真)

估计没有集中的投资组合的经济资本因子 K

K_granular <- quantile(vec_N_Defaults2,0.999)/N

估计具有集中度的投资组合的经济资本因子 K

K_concentration <- quantile(Loss2,0.999)/sum(EAD)