本文描述的是CreditRisk+模型,該模型是一個信用風險模型崇摄,根據(jù)銀行自身的違約率平均值涨薪,結(jié)合回收率和風險暴露,得到所有債務(wù)人的資產(chǎn)組合的預期違約損失分布袋哼。該分布可以給銀行做參考冀墨,準備相應(yīng)的年度信用準備金。
目錄
1.CreditRisk+模型簡介:主要說明CreditRisk+模型是什么涛贯,該模型需要的假設(shè)以及大概的計算流程诽嘉。
2.計算過程:主要說明Z計分模型里的特征含義,以及Z值的用途弟翘。
3.用到的python庫及其方法:主要說明導入的庫的用途以及使用方法
4.模型演示:給出數(shù)據(jù)虫腋,看一下Python代碼是如何實現(xiàn)的,并分析結(jié)果稀余。
5.總結(jié):總結(jié)該模型的優(yōu)缺點悦冀。
1、CreditRisk+模型簡介
在財產(chǎn)保險精算思想和方法的啟發(fā)下睛琳,瑞士信貸銀行金融產(chǎn)品部開發(fā)出了基于財險精算方法的違約模型盒蟆,記為CreditRisk+模型。
該模型只考慮違約或不違約兩種狀態(tài)师骗,同時假定違約率是隨機的茁影,并以此為前提度量預期損失、未預期損失及其變化丧凤,所以CreditRisk+模型是一個違約模型
模型假設(shè):(1)每筆貸款在給定期間內(nèi)違約率不變募闲;(2)每個借款人的違約率非常小,且違約數(shù)相互獨立愿待。所以違約事件發(fā)生的概率分布服從泊松分布浩螺。
定義:CreditRisk+模型僅僅考慮了違約風險靴患,而沒有考慮信用等級降級風險,屬于信用違約風險度量模型要出。利用CreditRisk+模型可以得到貸款組合損失的概率分布鸳君。
流程:先用貸款組合中最大一筆風險暴露值與風險暴露頻段值L相除并四舍五入為整數(shù)得到風險暴露頻段總級數(shù)m;然后將每筆貸款的風險暴露數(shù)除以L四舍五入為整數(shù)將其歸類到該整數(shù)對應(yīng)的頻段級患蹂,即將所有貸款分類在m個頻段級里或颊;再計算每個頻段級的貸款違約數(shù)量的概率分布和違約損失的概率分布(貸款違約數(shù)服從泊松分布,違約損失=違約數(shù)量*平均風險暴露)传于;最后計算貸款組合的違約損失的概率分布(相同的組合損失金額可能對應(yīng)多種損失組合囱挑,所以要加總概率)
2、計算過程
2.1沼溜、模型所需特征
輸入:貸款組合的風險暴露平挑,風險暴露頻段值L
中間:風險暴露頻段級數(shù)m,各個頻段級的貸款違約數(shù)量的概率分布和違約損失的概率分布
輸出:貸款組合的違約損失的概率分布
2.2系草、計算過程
所需特征已經(jīng)給出通熄,那么接下來就是說明這些特征的處理或計算的過程了,這些過程主要分三步
2.2.1 第一步:風險暴露頻段分級法
我們以N筆貸款構(gòu)成的組合為例找都,具體介紹頻段分級法:
(1)先根據(jù)所有貸款的風險暴露情況設(shè)定風險暴露頻段值唇辨,記為L,例如可以取L=2萬元作為一個頻段值能耻。
(2)用N筆貸款中最大一筆貸款風險暴露值除以頻段值L助泽,將計算數(shù)值按照四舍五入湊成整數(shù),稱之為風險暴露的頻段總級數(shù)嚎京,設(shè)為m,于是隐解,就得到m個風險暴露頻段級鞍帝,以此為v1、v2煞茫、…帕涌、vm,vi所對應(yīng)的風險暴露量為Li续徽。
(3)將每筆貸款的風險暴露量除以頻段值L蚓曼,再按照四舍五入的規(guī)則將計算數(shù)值湊成整數(shù),然后將該筆貸款歸類到該整數(shù)值歲對應(yīng)的頻段值钦扭,類似地纫版,可將所有貸款歸類。
2.2.2 第二步:各個頻段級的違約概率和損失分布
假設(shè)處于vi頻段級的貸款的平均違約數(shù)為λi客情,同時設(shè)將N筆貸款劃級歸類后處于vi頻段級的貸款數(shù)目為Ni其弊,顯然癞己,N1 + N2 + … + Nm = N于是,可得:
其中梭伐,Li = L × i 為vi頻段級對應(yīng)的風險暴露數(shù)痹雅,L為頻段值。于是糊识,我們可以得到處于vi頻段級的違約概率分布及其對應(yīng)的損失分布绩社。
2.2.3 第三步:N筆貸款組合的違約概率和損失分布
求出各個頻段級的貸款違約概率和預期損失后,要加總共m個風險暴露頻段級的損失赂苗,以得到N筆貸款組合的損失分布愉耙。
(1)首先要考慮各種預期損失可能的結(jié)合來計算概率。
假設(shè)N筆貸款中處于vi頻段級的違約數(shù)為ni哑梳,這樣得到一個依次對應(yīng)于m個頻段級的違約組合(n1劲阎,n2,…鸠真,nm)悯仙,于是,根據(jù) Li = L × i 可計算出該違約組合對應(yīng)的風險暴露量為:
(2)根據(jù)貸款違約事件的獨立性假設(shè)和泊松分布假設(shè)吠卷,得到對應(yīng)于違約組合(n1锡垄,n2,…祭隔,nm)的N筆貸款組合的違約概率為:
(3)我們用G表示滿足的所有不同組合的違約組合(n1货岭,n2,…疾渴,nm)的集合千贯,即:
則N筆貸款組合的風險暴露或違約損失=nL的概率及其對應(yīng)的預期損失分別為:
其中,n = 1搞坝,2搔谴,…,于是桩撮,通過上式就可以得到N筆貸款組合的違約概率和損失分布敦第。
3、用到的python庫及其方法
這里用到了兩個庫店量,分別是scipy和numpy芜果。
3.1、scipy
scipy庫建立在Numpy庫之上融师,提供了大量科學算法右钾,主要包括這些主題:
*特殊函數(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)
CreditRisk+模型引入第三方科學計算庫模塊scipy.stats,使用poisson(λ)****計算泊松分布的概率質(zhì)量函數(shù):
用法如下:
importscipy.statsasst
po=st.poisson(1)
[po.pmf(i)foriinrange(5)]#pmf:probabilitymassfunction,概率質(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è)風險暴露頻段值選定為L = 5萬人民幣张抄,—個信貸組合中一年內(nèi)發(fā)生1個違約事件砂蔽,即 λ = 1
代碼和計算過程一樣分為3個部分:
第一部分為將6筆貸款除以風險暴露頻段值,將貸款分成兩類署惯,輸出字典變量label左驾。
第二部分是計算各個頻段級的違約概率和損失分布,輸出的每一列對應(yīng)每個頻段級的概率分布arr极谊。
第三部分計算更多了诡右,先是計算各個違約損失組合的違約概率,然后整理成一個數(shù)組對象并計算出概率分布轻猖。最后得出未來一年內(nèi)的預期損失期望帆吻,變量為E_loss。
代碼如下咙边,代碼里用到的重要變量都有注釋:
import numpy as np
import scipy.stats as st
money = [5,4,8,9,10,3]
L = 5
labelnum = round(max(money) / L) # 風險暴露總級數(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}
—————————————————————————————————
“”“
繪制圖像
”“”
plt.rcParams['font.sans-serif'] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False
x_list = list(range(0,10,1))
height_list = list(accu_pro.values())
rects1 = plt.bar(x=x_list, height=height_list, width=0.5, alpha=0.8, color='red', linewidth=2)
# 設(shè)置x軸坐標點顯示
tick_labels = list(accu_pro.keys())
tick_pos = x_list
plt.xticks(tick_pos, tick_labels)
plt.title("資產(chǎn)組合的預期違約損失分布", size=16)
plt.xlabel("期望損失金額", size=14)
plt.ylabel("不違約概率", size=14)
for a,b in zip(x_list,height_list):
plt.text(a, b+0.02, '%.4f' % b, ha='center', va= 'bottom',fontsize=10)
plt.show()
—————————————————————————————————
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王带、總結(jié)
credit disk+模型優(yōu)缺點總結(jié)如下:
優(yōu)點:
(1)要求的估計量和輸入數(shù)據(jù)較少,僅需要債務(wù)工具的違約和風險暴露的數(shù)據(jù)市殷,模型應(yīng)用比較簡單
(2)不需要對違約原因做任何假設(shè)
(3)將違約率視為連續(xù)隨機變量愕撰,并將違約率的波動率納入模型體現(xiàn)違約率本身的不確定性這一特征。通過使用違約波動率參數(shù)被丧,模型得到簡化,而且不用考慮違約相關(guān)性特征
缺點:
(1)忽略了信用等級變化绪妹,因而貸款信用風險在計算期間內(nèi)固定不變甥桂,與實際情況不符合
(2)分組時,對每筆貸款暴露近似到組邮旷,從而將高估投資組合的方差
(3)忽略了市場風險