资源描述
目 录
一、课题背景 2
1. 课题描述 2
2. 实训目的 3
二、原理或方法介绍 3
三、数学模型描述 4
四、计算方法与流程 4
五、主要代码与分析 6
六、仿真与编程计算 10
七、结果与检验 11
八、分析与总结 13
参考文献 13
信用风险度量的KMV模型及其MATLAB求解
一、课题背景
1. 课题描述
信用风险管理模型是对信用风险进行量化的一个 巨大进步,摆脱了传统的信用风险管理方法的束缚,在对信用风险尽可能精确量化的基础上,使信用风险的定价趋于合理,使资本的配置趋于有效和优化。
信用风险是指由于借款人或其他合约义务人的信用质量发生变化,致使其在贷款或其他合约到期时不能偿还本息,或者不能履行合约规定的义务而带来的损失。当一个债务人信用质量发生恶化的时候,其风险贴水也应该增加,而一笔贷款贷出也就确定了风险贴水,但与现时的超过无风险利率的均衡的价差是不相符的,准确地掌握贷款的价值变化,对于风险管理的意义是巨大的。
KMV模型是美国旧金山市KMV公司于90年代建立的用来估计借款企业违约概率的方法。KMV模型认为,贷款的信用风险是在给定负债的情况下由债务人的资产市场价值决定的。但资产并没有真实地在市场交易,资产的市场价值不能直接观测到。为此,模型将银行的贷款问题倒转一个角度,从借款企业所有者的角度考虑贷款归还的问题。在债务到期日,如果公司资产的市场价值高于公司债务值(违约点),则公司股权价值为公司资产市场价值与债务值之间的差额;如果此时公司资产价值低于公司债务值,则公司变卖所有资产用以偿还债务,股权价值变为零。
KMV模型的优势在于以现代期权理论基础作依托,充分利用资本市场的信息而非历史账面资料进行预测,将市场信息纳入了违约概率,更能反映上市企业当前的信用状况,是对传统方法的一次革命。KMV模型是一种动态模型,采用的主要是股票市场的数据,因此,数据和结果更新很快,具有前瞻性,是一种“向前看”的方法。在给定公司的现时资产结构的情况下,一旦确定出资产价值的随机过程,便可得到任一时间单位的实际违约概率。其劣势在于假设比较苛刻,尤其是资产收益分布实际上存在“肥尾”现象,并不满足正态分布假设;仅抓住了违约预测,忽视了企业信用品质的变化;没有考虑信息不对称情况下的道德风险;必须使用估计技术来获得资产价值、企业资产收益率的期望值和波动性;对非上市公司因使用资料的可获得性差,预测的准确性也较差;不能处理非线性产品,如期权、外币掉期等。
2. 实训目的
1) 掌握运用方程和方程组求解;
2) 熟悉fzero函数与fsolve函数的用法;
3) 初步理解KMV模型的计算方法
二、原理或方法介绍
1. 方程
若x为变量,方程 ,若存在,使得,则为方程 的解或者根。求解方程算法为迭代算法,通常使用优化算法求解方程
若上述方程有解,则对于上述优化问题的最小值为0,对应的最优点即为方程的解(根),若方程有多解,则优化问题存在多个极值使得函数值为0。
2. 方程组
若x为变量,方程组
若存在,使得
则为方程组的解或者根。求解方程算法为迭代算法,通常可以使用优化算法求解方程
若上述方程组有解,则对于的优化问题的最小值为0,对应的最优点即为方程组的解(根),若方程有多解,则优化问题存在多个极值使得函数值为0。
三、数学模型描述
例 某公司流动负债为1亿元,长期负债为5000万元,根据上市公司的股价行情(表1 公司股权价值与收益率表)表可以统计计算出E(为公司的股权价值)与(为公司股权价值的波动率),计算公司的违约率?
MarKetValueAndStockPrice
月份
总市值(元)
收益率
1
129523558
-13.65%
2
149885462
13.58%
3
142316387
-5.32%
4
149440912
4.77%
5
147924524
-1.03%
6
130439432
-13.40%
7
136313024
4.31%
8
140972464
3.31%
9
148405095
5.01%
10
144898861
-2.42%
11
144904609
0.00%
12
130292794
-11.21%
均值
标准差
141276427
8.35%
表1 公司股权价值与收益率表
四、计算方法与流程
步骤1:基本参数计算
公司股价波动率为8.35%(月度),为公司股权价值的波动率(年化)
(在实践计算中,我们通常计算时日波动率,假设一年的交易日为250个,则年化波动率为日波动率乘以交易日数量的平方根)。
公司的股权价值E=141276427元
KMV模型违约点DP=SD+0.5×LD=1.25亿
步骤2:使用数值技术优化方程组
利用fsolve函数求解KMV方程组,fsolve是matlab最主要内置的求解方程组的函数,KMV模型方程组中的两个未知变量和可从以下联立方程组中求出。
其中, E为公司的股权价值;D为公司负债的市场价值;为公司资产的市场价值;τ为债务期限,一般设为一年;为公司资产价值的波动率;r为无风险利率;为公司股权价值的波动率。
由于两个未知变量和数量级相差巨大,数量级为亿、千万等等,而取值范围一般为[0,10], fsolve函数使用迭代方法进行方程组计算,为准确求解方程组必须将标准化,将根据负债D进行标准化,引入参数EtD为E/D,便于fsolve函数迭代求解。若不变化,将出现程序失败或计算结果误差巨大的情况。
将代入KMV方程组,两个未知变量x和,KMV方程组变为
引入参数EtD,上式简化为:
计算出x和,根据可以计算出公司资产的市场价值。
五、主要代码与分析
1. fzero函数
fzero是matlab最主要内置的求解单变量方程的函数
函数语法
[x,fval,exitflag,output] = fzero(fun,x0,options)
输入参数:
Fun: 目标函数 一般用M-文件形式给出
X0: 优化算法初始迭代点
Options: 参数设置
函数输出:
X: 最优点输出(或最后迭代点)
Fval: 最优点(或最后迭代点)对应的函数值
Exitflag: 函数结束信息 (具体参见matlab help )
Output: 函数基本信息 包括迭代次数,目标函数最大计算次数,使用的算法名称,计算规模
例 求解下列方程
目标函数Eqfunobj1.m
求解函数SolveEqfun1.m
2. fsolve函数
fsolve是matlab最主要求解多变量方程与方程组的函数
函数语法:
[x,fval,exitflag,output,jacobian] = fsolve(fun,x0,options)
输入参数:
Fun: 目标函数 一般用M-文件形式给出
X0: 优化算法初始迭代点
Options: 参数设置
函数输出:
X: 最优点输出(或最后迭代点)
Fval: 最优点(或最后迭代点)对应的函数值
Exitflag: 函数结束信息 (具体参见matlab help )
Output: 函数基本信息 包括迭代次数,目标函数最大计算次数,使用的算法名称,计算规模
Jacobian:Jacobian矩阵(主要用来判断是否得到有效解)
例 求解多变量方程实例演示:解下列方程
编写目标函数Eqfunobj2.m和求解函数SolveEqfun2.m
例 求解多变量方程组实例演示,例如 求解方程组
编写目标函数,Eqfunobj3.m和求解函数,SolveEqfun3.m
3. 含参数方程组求解
例 求解方程组当a,b给定时的方程组的解。
编写目标函数,CEqfun.m和求解函数,SolveEqfun.m
4. KMV模型计算方法
利用Black-Scholes期权定价公式,根据企业资产的市场价值、资产价值的波动性、到期时间、无风险借贷利率及负债的账面价值估计出企业股权的市场价值及其波动性。其次根据公司的负债计算出公司的违约实施点 (企业一年以下短期债务的价值加上未清偿长期债务账面价值的一半),计算借款人的违约距离。 最后,根据企业的违约距离与预期违约率(EDF) 之间的对应关系,求出企业的预期违约率。
假设:KMV模型方程组中的两个未知变量和可从以下联立方程组中求出。
其中, E为公司的股权价值;D为公司负债的市场价值;为公司资产的市场价值;τ为债务期限,一般设为一年;为公司资产价值的波动率;r为无风险利率;为公司股权价值的波动率。
假设公司资产价值服从对数正态分布,那么我们可以通过KMV方程租计算出上市公司的违约距离。
其中,为公司资产未来价值的期望值。DP为违约点,DP=SD+0.5×LD,为企业一年以下短期债务的价值加上未清偿长期债务账面价值的一半。
相应的违约概率为,为标准正态分布函数。
六、仿真与编程计算
步骤1:基本参数计算
KMV方程组计算函数,M文件KMVfun.M
F=KMVfun(EtoD,r,T,EquityTheta,x)
输入参数:
EtoD:E/D,为公司的股权价值比公司负债的市场价值;
R:无风险利率
T:预测周期
EquityTheta:公司的股权价值的波动率
X:公司资产的市场价值 比例
输出参数:
F:方程组的函数值
程序源码:
function F=KMVfun(EtoD,r,T,EquityTheta,x)
%KMVfun
% ´Ë´¦ÏÔʾÏêϸ˵Ã÷
d1=(log(x(1)*EtoD)+(r+0.5*x(2)^2)*T)/(x(2)*sqrt(T));d2=d1-x(2)*sqrt(T);F=[x(1)*normcdf(d1)-exp(-r*T)*normcdf(d2)/EtoD-1;normcdf(d1)*x(1)*x(2)-EquityTheta];
end
步骤2:使用数值技术优化方程组
KMV方程组求解函数,M文件KMVOptSearch.m
[Va,AssetTheta]=KMVOptSearch(E,D,r,T,EquityTheta)
输入参数:
E:公司的股权价值
D:公司负债的市场价值
R: 无风险利率
T: 预测周期
EquityTheta: 公司的股权价值波动率
输出参数:
Va:公司资产的市场价值
AssetTheta:公司资产价值的波动率
程序源码:
function [Va,AssetTheta]=KMVOptSearch(E,D,r,T,EquityTheta)
%KMVOptSearch ´Ë´¦ÏÔʾÓйش˺¯ÊýµÄÕªÒª
% ´Ë´¦ÏÔʾÏêϸ˵Ã÷
EtoD=E/D
x0=[1,1]
VathetaX=fsolve(@(x) KMVfun(EtoD,r,T,EquityTheta,x),x0);
Va=VaThetaX(1)*E;
AssetTheta=VathetaX(2);
end
七、结果与检验
程序测试计算,M(文件KMVcompute.M
公司的股权价值E=141276427;
公司负债的市场价值D=DP=SD+0.5LD= 125000000
无风险利率R=2.2%
预测周期T=1年
公司的股权价值波动率EquityTheta=0.2893
程序源码:
公司资产的市场价值为2.6350e+008元
公司资产价值的波动率0.1551即15.51%
公司负债违约距离为3.3886
公司违约概率为3.5129e-004 ,0.3512% (违约概率比较低)
优化算法的迭代计算结果与迭代初始点相关性较大,尤其在求解多元优化问题时,若变量的数量级相差巨大时,常常会使得迭代计算过程出现异常导致计算结果有误。因此,在使用含有循环迭代计算的函数时需要对模型中不同数量级的变量进行标准化。
八、分析与总结
基于公司违约数据库,模型可依据公司的违约距离得出一个期望违约频率,这个期望违约频率就是公司未来某一时期的违约概率。由于历史违约数据的积累工作滞后,确定违约距离和实际违约频率之间的映射仍然无法实现,而直接计算出来的理论违约率的结果说服力偏离很大。这里直接应用违约距离来比较上市公司的相对违约风险大小。
这学期学习的MATLAB,结合了数学、经济学以及计算机,过去学的积累的都是纸上的知识,今天能够实际的运用起来,解决现实生活中的实际问题,达到真正的学以致用的目的,这其中的成就感与满足感不言而喻。其中求解方程与方程组,在多种解法的情况下得到的答案并不唯一,迭代方法就是其中较为实用的方法之一。生活中我们可以将迭代方法求解方程组的方法推广,进行方法的类比操作。比如银行对上市公司的贷款定价,利率市场化要求银行能按风险来确定贷款利率。运用基于期权定价理论的KMV模型来得到公司的预期违约率和违约损失,从而能合理地确定贷款利率。
学习MATLAB的过程中,总是会遇上很多小问题,但是如果细心排查和请教,可以得到新的学习体会与见解。与同学的交流过程中,大家对新知识的学习感受都很相似,山重水复疑无路,柳暗花明又一村。找到突破口的时候是最令人欣喜的,学习的兴趣也得到激发。
KMV循环语句:
output=zeros(48,2)
for i=1:48;
r=0.02
T=5
D=input(i,1)
E=input(i,2)
EquityTheta=input(i,3)
[Va,AssetTheta]=KMVOptSearch(E,D,r,T,EquityTheta)
output(i,1)=Va
output(i,2)=AssetTheta
twoway(scatter Spread DD)(lowess Spread DD)
参考文献
[1]郑志勇.金融数量分析——基于MATLAB编程(第3版)[M].北京: 北京航空航天大学出版社 2014.
[2]贺剑 .KMV模型度量国内信用风险适用简析[J]-内蒙古科技与经济 2007 (4)
13
展开阅读全文