1自沧、簡介
模型假設(shè):(1)每筆貸款在給定期間內(nèi)違約率不變纵柿;(2)每個借款人的違約率非常小,且違約數(shù)相互獨立鸯绿。所以違約事件發(fā)生的概率分布服從泊松分布跋破。
定義:Credit Risk+模型僅僅考慮了違約風(fēng)險,而沒有考慮信用等級降級風(fēng)險楞慈,屬于信用違約風(fēng)險度量模型幔烛。利用CreditRisk+模型可以得到貸款組合損失的概率分布。
流程:先用貸款組合中最大一筆風(fēng)險暴露值與風(fēng)險暴露頻段值L相除并四舍五入為整數(shù)得到風(fēng)險暴露頻段總級數(shù)m囊蓝;然后將每筆貸款的風(fēng)險暴露數(shù)除以L四舍五入為整數(shù)將其歸類到該整數(shù)對應(yīng)的頻段級饿悬,即將所有貸款分類在m個頻段級里;再計算每個頻段級的貸款違約數(shù)量的概率分布和違約損失的概率分布(貸款違約數(shù)服從泊松分布聚霜,違約損失=違約數(shù)量*平均風(fēng)險暴露)狡恬;最后計算貸款組合的違約損失的概率分布(相同的組合損失金額可能對應(yīng)多種損失組合,所以要加總概率)
2蝎宇、計算過程
2.1模型所需特征
輸入:貸款組合的風(fēng)險暴露弟劲,風(fēng)險暴露頻段值L
中間:風(fēng)險暴露頻段級數(shù)m,各個頻段級的貸款違約數(shù)量的概率分布和違約損失的概率分布
輸出:貸款組合的違約損失的概率分布
2.2計算過程
風(fēng)險暴露頻段級數(shù)m:最大一筆風(fēng)險暴露值/風(fēng)險暴露頻段值L再四舍五入
各個頻段級的違約數(shù)和違約損失的概率分布:
貸款組合的違約數(shù)和違約損失的概率分布:
3姥芥、用到的python庫及其方法
這里用到了兩個庫兔乞,分別是scipy和numpy。
3.1、scipy
scipy庫建立在 Numpy 庫之上庸追,提供了大量科學(xué)算法霍骄,主要包括這些主題:
- 特殊函數(shù) (scipy.special)
- 積分 (scipy.integrate)
- 最優(yōu)化 (scipy.optimize)
- 插值 (scipy.interpolate)
- 傅立葉變換 (scipy.fftpack)
- 信號處理 (scipy.signal)
- 線性代數(shù) (scipy.linalg)
- 稀疏特征值 (scipy.sparse)
- 統(tǒng)計 (scipy.stats)
- 多維圖像處理 (scipy.ndimage)
- 文件 IO (scipy.io)
Credit Risk+模型引入第三方科學(xué)計算庫模塊scipy.stats,使用poisson(λ)計算泊松分布的概率質(zhì)量函數(shù):
用法如下:
import scipy.stats as st
po = st.poisson(1)
[po.pmf(i) for i in range(5)] # pmf: probability mass function淡溯,概率質(zhì)量函數(shù)
Output:
[0.36787944117144233,
0.36787944117144233,
0.18393972058572114,
0.061313240195240391,
0.015328310048810101]
3.2读整、numpy
使用NumPy可以執(zhí)行以下操作:
(1)數(shù)組的算數(shù)和邏輯運算。
(2)傅立葉變換和用于圖形操作的例程咱娶。
(3)與線性代數(shù)有關(guān)的操作米间。 NumPy 擁有線性代數(shù)和隨機數(shù)生成的內(nèi)置函數(shù)。
這里使用了數(shù)組有關(guān)的操作膘侮。
4屈糊、模型演示
考察一家銀行6筆貸款的情況,如下圖喻喳,假設(shè)風(fēng)險暴露頻段值選定為L=5萬人民幣
代碼如下:
import numpy as np
import scipy.stats as st
money = [5,4,8,9,10,3]
L = 5
labelnum = round(max(money) / L)# 風(fēng)險暴露總級數(shù)
label = {}# 頻段級及對應(yīng)的貸款貸款金額
for i in money:
for j in range(1, labelnum+1):
if round(i / L) == j:
if j not in label.keys():
label[j] = [i]
else:
label[j].append(i)
label
Output:{1: [5, 4, 3], 2: [8, 9, 10]}
—————————————————————————————————
arr = np.zeros((len(label[1])+1,labelnum))# 各個頻段級對應(yīng)的違約數(shù)的概率分布
# λ=1
rv = st.poisson(1)
for i in range(arr.shape[0]):
for j in range(arr.shape[1]):
arr[i][j] = round(rv.pmf(i), 4)
arr
Output:array([[ 0.3679, 0.3679],
[ 0.3679, 0.3679],
[ 0.1839, 0.1839],
[ 0.0613, 0.0613]])
—————————————————————————————————
pro = np.zeros((arr.shape[0], arr.shape[0]))# 聯(lián)合違約概率
loss = np.zeros((arr.shape[0], arr.shape[0]))# 違約總損失
for i in range(pro.shape[0]):
for j in range(pro.shape[1]):
loss[i, j] = i * L + j * 2* L
pro[i, j] = round(arr[i, 0] * arr[j, 1], 4)
pro
Output:array([[ 0.1354, 0.1354, 0.0677, 0.0226],
[ 0.1354, 0.1354, 0.0677, 0.0226],
[ 0.0677, 0.0677, 0.0338, 0.0113],
[ 0.0226, 0.0226, 0.0113, 0.0038]])
loss
Output:array([[ 0., 10., 20., 30.],
[ 5., 15., 25., 35.],
[ 10., 20., 30., 40.],
[ 15., 25., 35., 45.]])
—————————————————————————————————
arr2 = {}# 整理之后的貸款違約損失的概率分布
for i in range(pro.shape[0]):
for j in range(pro.shape[1]):
if loss[i, j] not in arr2.keys():
arr2[loss[i, j]] = pro[i, j]
else:
arr2[loss[i, j]] = round((arr2[loss[i, j]] + pro[i, j]), 4)
arr2 = sorted(arr2.items(), key=lambda x: x[0])
arr2 = dict(arr2)
arr2
Output:{0.0: 0.13539999999999999,
5.0: 0.13539999999999999,
10.0: 0.2031,
15.0: 0.158,
20.0: 0.13539999999999999,
25.0: 0.090300000000000005,
30.0: 0.056399999999999999,
35.0: 0.0339,
40.0: 0.011299999999999999,
45.0: 0.0038}
—————————————————————————————————
accu_pro = {}# 累積概率密度
for j in range(len(arr2)):
sum = 0
for i in range(j+1):
sum = sum + list(arr2.values())[i]
accu_pro[list(arr2.keys())[j]] = sum
accu_pro = sorted(accu_pro.items(), key=lambda x: x[0])
accu_pro = dict(accu_pro)
accu_pro
Output:{0.0: 0.13539999999999999,
5.0: 0.27079999999999999,
10.0: 0.47389999999999999,
15.0: 0.63190000000000002,
20.0: 0.76729999999999998,
25.0: 0.85760000000000003,
30.0: 0.91400000000000003,
35.0: 0.94790000000000008,
40.0: 0.95920000000000005,
45.0: 0.96300000000000008}
—————————————————————————————————
E_loss = [i*j for i,j in arr2.items()]# 期望損失
E_loss
Output:[0.0,
0.67699999999999994,
2.0310000000000001,
2.3700000000000001,
2.7079999999999997,
2.2575000000000003,
1.6919999999999999,
1.1864999999999999,
0.45199999999999996,
0.17100000000000001]
—————————————————————————————————
print(np.mean(E_loss))
print(np.std(E_loss))
Output:1.3545
0.93740327501
結(jié)果分析:該銀行6筆貸款組成的貸款組合另玖,未來一年期望的損失金額為1.35萬人民幣,大致可看出未來有95%的把握損失不會超過40萬人民幣表伦。
5谦去、模型優(yōu)缺點
優(yōu)點:
(1)要求的估計量和輸入數(shù)據(jù)較少,僅需要債務(wù)工具的違約和風(fēng)險暴露的數(shù)據(jù)蹦哼,模型應(yīng)用比較簡單
(2)不需要對違約原因做任何假設(shè)
(3)將違約率視為連續(xù)隨機變量鳄哭,并將違約率的波動率納入模型體現(xiàn)違約率本身的不確定性這一特征。通過使用違約波動率參數(shù)纲熏,模型得到簡化妆丘,而且不用考慮違約相關(guān)性特征
缺點:
(1)忽略了信用等級變化,因而貸款信用風(fēng)險在計算期間內(nèi)固定不變局劲,與實際情況不符合
(2)分組時勺拣,對每筆貸款暴露近似到組,從而將高估投資組合的方差
(3)忽略了市場風(fēng)險