文件交换

图片缩略图

信用风险与MATLAB建模

版本1.5.0.1 (3.99 MB) Ameya Deoras
这些是MathWorks研讨金宝app会的支持MATLAB文件相同的名字。
5.0
9评级

6下载

更新2016年9月01日

查看许可协议

在这个信用风险建模网络研讨会,您将学习MATLAB如何帮助团队建立一个敏捷风险信用风险管理基础设施。如果你有兴趣开发和部署风险分析,这个网络研讨会将适合你。
网络研讨会重点包括:
•信用评级分类
•过渡矩阵和违约概率
•信用风险分析

这个研讨会是金融从业者和学者的重点是风险管理、信贷结构,定量分析,或资产估值。熟悉MATLAB是有帮助,但不是必需的。

引用作为

Ameya Deoras (2020)。信用风险与MATLAB建模(//www.tatmou.com/matlabcentral/fileexchange/27847-credit-risk-modeling-with-matlab), MATLAB中央文件交换。检索

评论和评级(35)

沙市D

当安装exe文件的信贷风险,跟踪误差报道:

CreditRisk_1_0。dll加载失败。
确保二进制存储在指定的路径中。请帮助……

胭脂

你好,
你能帮我吗?
当我运行Credit_Var。m文件,matlab给这个信息:

错误使用instargbondmod(第119行)结算必须小于所有债券到期。

(CouponRate cfamounts误差(第284行),解决,成熟,期间,基础,EndMonthRule,…

错误prbyzero(54行)[CFlowAmounts CFlowDates] = cfamounts (CpnRate定居,成熟,…

我不明白为什么。

你能帮我吗?

谢谢

胭脂

便雅悯

亲爱的迈克尔,

我想说,从12月8日在我的文章中解决的问题。问题确实是Microsoft Access的32位版本不支持64位版本的Matlab R2010b。金宝app一个朋友曾访问的64位版本安装,可以很容易地定义ODBC数据源并运行脚本“Credit_Rating”和“TransitionProbabilities”。

不幸的是,我们发现了另一个问题:“Credit_VaR”运行的脚本时,出现以下错误:

? ? ?错误使用= = > datenum享年182岁
DATENUM失败了。

错误= = > Credit_VaR 52
BondData。成熟= datenum (BondData。成熟,“mm / dd / yyyy”);

引起的:
错误使用= = > dtstr2dtnummx
失败将日期字符串转换为日期号码。

你有一个建议来解决这个问题吗?

再一次,非常感谢。

便雅悯

亲爱的迈克尔,

我不能够遵循的readme文件读取的第一步:
“定义数据库的“数据”文件夹为一个ODBC数据源”。

因此,我试图遵循的步骤:
http://www.mathworks.de/de/help/database/gs/configuring-your-environment.html bt1lm85-1

虽然我有安装Microsoft Office,“Microsoft Access司机”不是deiplayed列表中的“第六步”,因此,我不能够建立一个连接到“HistoricalCreditRatings”数据库。也许这是由于32位版本的Microsoft Access 2007在我的MATLAB 64版本冲突,然而,这不会对我有意义,因为MATLAB应该是向后兼容的。

有另一种方法导入“HistoricalCreditRatings”?你会推荐什么步骤来做前期工作任务”中定义的数据库“数据”文件夹为一个ODBC数据源”。

任何帮助都是高度赞赏。

但它不是我创建一个ODBC数据源显示在我querrybuilder(无项目选择或插入)。谁能帮我请吗?

尼科

我不能导入数据库文件。我想我的matlab只能导入JDBC文件。我用Mac OS。

我将感谢任何帮助。我是新在这

米歇尔-

这些结果是完全符合分类树是如何工作的。只是重新调节输入通过乘以不同的系数应该在树上没有影响。

这是为什么,我建议Breiman的书中引用(doc),但简短的回答是,树木每个指标的观察和尝试的候选人将在每个缺口。树将会选择出“最好”的分割标准的分裂(这是一种完全不同的讨论)。扩展预测只能规模这一过程,但它不会从根本上改变结果。

作为一个例子:假设我们有一组简单的obervations预测一直以1,2,4,10。这棵树会分裂为1.5,3和7。假设“最好”的分裂在7。

现在我们继续,重新调节这个输入——mulitply它到100年或其他系数。现在,这棵树试图分裂为150,300,和700,它仍然会选择在700年分手。重新调节并不能改变什么。

现在,如果我们要巧妙地创建_new_预测的精心挑选的组合(线性或其他)我们现有的预测,那肯定会改变树的性能。例如,在X 6日预测从奥特曼的系数乘以你原始X,那么你可能会得到一些有趣的结果。

米歇尔

嗨,迈克尔,

我注意到一个非常好奇treebagger的结果,和想知道你有经验。

我发送一个矩阵X 5列的各种会计数据。我还发送Y,它是一个矢量的信用评级。我有大约3000行数据。

我知道破产学术界做过广泛的研究,以确定最优系数来预测破产。我认为这是有趣的看到的影响系数在装袋的结果。所以我创建了一个矢量,多项式系数,乘以每一行的X参数多项式系数。

例如:奥特曼的系数是{0.717 0.847 3.107 0.42 0.998}

奇怪的是,不同oobErrors系数没有影响。我运行的循环变化的系数来跟踪一下。

似乎在极限的情况下系数趋于零,应该有一个效果。

感谢任何见解。

Ab

米歇尔

谢谢你迈克尔的澄清vs oobPredict预测函数的使用。我知道的好处的treebagger自动分割数据,我只是想能够看到单个位。

对直方图是好你的观点,但是我认为直方图有价值看到前后的数据分布,即使它没有提供洞察装袋机的性能。你强调的各种方法代码是伟大的。

我处理实际信贷数据,所以作为一个视觉的人,我喜欢看评级分布的样子开始/结束的过程。我认为应该好奇如果机密数据完全不同的分布。

再次感谢你的演示和网络研讨会,我发现它非常有用。

米歇尔-

我怕我不明白直方图将在这里为你做。一个通常与“实际”输出匹配模型的预测输出和比较它们之间的差异在某些方面来评估模型的性能。混淆矩阵,ROC曲线,和其他技术是常用的。直方图不习惯,因为他们可以掩盖大量的信息。考虑这个简单的例子中,可以对数据进行分类的值“1”或“2”:

%的“实际”数据:
Y = [1 2 1 2 2 1];
%的“预测”数据,到达通过一些模型:
Y_Pred = (2 1 2 1 1 2);

大多数人都认为,这种“模型”是可怕的:它有一个100%的误分类率!尽管如此,嘘(Y)和嘘(Y_Pred)给相同的情节。

可视化问题不谈,我认为有一些困惑关于装袋是如何工作的。在这个例子中,“实际”评级是Y,和每一个观察是用于培训。所以,Y也是培训评级。合奏方法像装袋的优势之一是,它不需要手动将数据分为训练集和验证集:你可以有你的蛋糕和吃它,太。out-of-bag错误在这种情况下,有一个特殊的意义,这里太多的解释,你应该检查医生或(更好的)Breiman原始文章的更多细节。一句话,你不应该使用OOB错误的方式使用它们,你似乎在这里。如果你正在寻找合奏的预测评分,他们只是发现了
Y_Pred =预测(b, X);

米歇尔

嗨,迈克尔,
我试图将行添加到代码绘制直方图三组观测的评级。
我希望看到三个不同的直方图由于调用treebagger:地面实况评级,培训评级,评级预测。

你能确认我已经实施了正确的代码,建议在第二的可能性?我添加了自己的数据文件与不同的评级,但是使用相同的想法。

1)地面实况评级

嘘(Y)

2)培训评级
似乎无法找到矩阵存储这些评级。

3)预测评级:Out-of-bag treebagger常规预测。
文档表示,程序自动分区数据作为训练和预测。

Y_Pred = oobPredict (b);
Y_Pred_Num =序数(Y_Pred, [] {“AAA”“AA +”“AA”“AA - ' ' + ' ' ' ' - '……
“BBB +”“BBB”“BBB -”“BB +”“BB”“BB -的“B +”“B”“B -”……
“CCC +”“CCC”“CCC - ' ' CC ' ' C ' ' D '});
图(4);
嘘(Y_Pred_Num);
包含(“评级”);
ylabel(包出现的);
标题(“包预测结果”);

谢谢你的帮助!
米歇尔

菲利普

嗨,迈克尔,
我仍然有错误消息,”? ? ?未定义的函数或方法的获取输入参数类型的“结构”。

错误= = > getdbdata 23
e =获取(e);“

当我运行CreditRisk_pkg。exe,我还有“LoadLibrary (“CreditRisk_1_0.dll)失败——找不到指定的模块”。你能帮吗?谢谢。顺便说一下,我如何在代码中指定文件在哪里,”康涅狄格州=数据库(历史的信用评级,”、“密码”);?我可以拯救了HistoricalCreditRatings硬盘的任何地方。

顺便说一下,我可以运行Credit_VaR。m。谢谢。

菲利普:在这个页面我们所需的产品列表运行这段代码。下载188bet金宝搏MATLAB R2010b应该没事的只要你有所有所需的工具箱。

这个包是一个README文件中提供一步一步的指示如何定义数据源(似乎错了什么在你的上面的错误消息),如何让MCR的副本,当你可能需要重新编译代码。我总是寻求改善这些指令,让我知道你没有找到他们。

菲利普

嗨。我有MATLAB 7.11.0 (R2010b)。我可以运行代码吗?

菲利普

我得到这个错误消息当我运行getdbdata。”? ? ?未定义的函数或方法的获取输入参数类型的“结构”。

错误= = > getdbdata 23
e =获取(e);“

顺便问一下,我怎样分配数据源名称?我也有当我试图运行“CreditRisk_pkg错误消息。exe文件,“LoadLibrary (“CreditRisk_1_0.dll)失败”——找不到指定的模块。我怎么才能“MCR 7.13版”?谢谢。

这是有用的反馈,Michelle。我已经回到我们的开发团队,我们考虑将这些建议。谢谢!

米歇尔

谢谢你的小费在花括号。现在是有意义的。它很有趣能够生动地看到各种树木。

从一个方面说明,也许我忽略的某些特性标准MATLAB窗口查看决策树的叶子,但它将是非常有用的能够:

一)阅读所有的叶子节点/标签。他们中的一些人目前被覆盖。
b)剪切/粘贴图,以便操纵/印刷在powerpoint。
c)写在窗口做出评论

考斯塔斯:你基本上是正确的。PRBYZERO引用干净的价格;担心部分优惠券,您需要使用一个肮脏的价格约定或(等价)计算应计利息。ACCRFRAC功能是有用的在这种情况下,(更健壮)BONDBYZERO函数在金融衍生品工具。

你也是正确的,我们选择干净或肮脏的价格并不影响结果只要我们一致:如果存在,积累的利益从原始债券价格和模拟的债券价格最后相互抵消。

米歇尔:你有正确的想法,但语法有点掉。如果你试着花括号(注意):

一个= b.Trees {1}
视图(一个)

然后你会看到你想要的。注意,树袋装合奏往往比在一个新手well-pruned自行决策树——这通常使整体更强的学习者。

米歇尔

这是一个很好的演示!我感兴趣的“观看”的一些个人treebagger函数生成的决策树。当我看
b.Trees (1)

ans =

[1 x1 classregtree]

与classregtree相关的事实,这是让我相信我应该能叫“视图”命令在这个变量。例子的虹膜数据显示这是如此。例如:

一个= b.Trees (1)
视图(一个)

但是我得到一个错误声明:
? ? ?在37错误使用= = >视图
无效的输入参数

请建议如果有一种方法可以把个人treebagger函数的决策树结果?

迈克尔谢谢你这个伟大的演示
我有一些问题关于债券的估值| Credit_VaR。m |文件。

1。关于估值日期我猜一定是未来一年的日期,因为我们使用的是一年期远期利率
2。如果我们假设(如信用度量技术文档。p27),债券票面价值:100,期限:5年,票面利率:6%,一年期远期零线,第一年3.72%,第二年4.32%,第三年4.93%、4 5.32%
然后我们将有一个现金流(6 6 6 6 106)和价格
P = 6 + 6 / (1 + 3.72/100) + 6 / (1 + 4.32/100) ^ 2 + 6 / (1 + 4.93/100) ^ 3 + 106 / (1 + 5.32/100) ^ 4 = 108.6430

但是如果我们使用prbyzero函数(如Credit_VaR你使用。m文件)
prbyzero ([datenum(1 - 12月- 2005),0.06],datenum(1 - 12月- 2001)、(3.72 4.32 4.93 5.32)”/ 100,datenum({' 1 - 12月- 2001 ',' 1 - 12月- 2002 ',' 1 - 12月- 2003 ',' 1 - 12月- 2004 '})”)
将获得102.5294

与上面的语法我认为这是因为我们失去了优惠券的第一年。
有什么语法,可以帮助我们正确价格债券N -几年?

我想这没有结果的差异
我们有趣的原始和新组合的差异值(请确认)
谢谢你!
考斯塔斯。

作者:这取决于Credit_Rating你看的哪个版本。“MATLAB文件”文件夹内的版本提供了完整的开发过程工作流和绝对显示TreeBagger在其所有的荣耀。

“Excel部署”文件夹内的版本是不同的工作流。在这个工作流程中,我们已经在历史数据训练分类器,我们唯一的任务是把它应用到新数据。因此,它只是加载pre-trained TreeBagger从包括MAT-file(因此创建TreeBagger viariable工作区中的“b”)并运行新数据的预测方法。

我建议关注“MATLAB文件”文件夹中的代码首先,只看“Excel部署”一旦你需要分析到另一个环境。

比尔:我很确定,问题是运行的版本的办公室。注意,这些电子表格XLSX和XLSM文件格式,仅支持Office 2007和以后。金宝app由于MATLAB使用微软技术读取自己的文件格式,你的办公室2003不正确的任务阅读该文件。

这是我的猜测,我希望帮助。

你好,
我找不到参考TreeBagger Credit_Rating文件。我错过的东西吗?

比尔邹

迈克尔:谢谢你的代码。我试着运行代码Credit_VaR,但系统给我以下消息

? ? ?错误使用= = > setobsnames 28
新名称必须是一个非空的字符串或一个单元阵列的非空的字符串。

当我跟踪这个问题,这是由于以下行:

BondData =数据集(…
“XLSFile”、“CreditPortfolio。xlsx’,……
“表”、“组合信息”,……
“ReadObsNames”,真的,…
“ReadVarNames”,真正的);

我不确定有什么问题。你能给我一个线索。我的版本matlab 7.12.0.635。excel是2003版本。

再次感谢你的帮助!

Panagiotis——

这是一个很好的抓住你。我选择创建一个非常大的“ratingsMask”变量决定通过平衡问题的计算速度和内存开销。你在这里看到的代码确实有大内存使用,但作为回报它运行速度比其他任何变化我的代码。

事实上,我特意选择了模拟的数量是32位内存限制下的债券投资组合。这是有用的研讨会,研讨会的目的,但你是正确的,它会导致投资组合规模增长时内存问题。

如果你愿意增加投资组合的规模和/或模拟的数量,你有选择:

1。使用MATLAB的64位版本。应该清楚一切好与任何代码更改。

2。减少模拟一次完成,可能执行模拟块代替。这将需要一些代码更改,比如模拟块的外循环。如果你访问并行计算,这些并行块应该能够被评估。

3所示。重构仿真代码,也许通过移动one-bond-at-a-time结构而不是大量的矢量化版本。这很容易消除记忆的担忧,但它需要更多的重写代码,并将大幅减缓速度,。

当然,我可能很容易就忽略掉了一些解决方案,提供了一个完美的混合速度和内存效率——如果我做了,请让我知道!

迈克尔很好例证。我有一个小点在Credit_VaR强调这部分代码:

% % 2。计算原始投资组合的价值
OriginalPrices = 0(大小(BondData, 1), 1);
日期= [valDate;valDate + 365;valDate + 2 * 365;valDate + 3 * 365);

%的| prbyzero |金融工具箱函数允许我们的价值
%这些债券。
idx = 1:长度(评级)1
ratingsMask = BondData。评级= =评级{idx};
OriginalPrices (ratingsMask) = prbyzero (…
[x2mdate BondData.Maturity (ratingsMask)) BondData.Coupon (ratingsMask)],…% x2mdate失踪了
valDate利率。(评级{idx}),日期);
结束

我认为不是很优因为它导致更大规模投资大内存使用超过3 k债券。你可以检查大组合这是你记忆问题。

OriginalPrices (ratingsMask) = prbyzero (…
的需要重写这部分我想自直接赋值0,1 s评级掩盖有一些问题。你怎么认为?

好问题,路易斯。为了准确地比较初始投资组合的价值和模拟投资组合,我可以滚模拟估价日期一年按照你的建议提出。然后准确地比较这两个结果,我需要回到原来的折扣模拟值估价日期。这两个效应正好相互抵消(他们应该在一个无套利的环境中),所以没有真正的伤害在使用相同的估值日期为原始和模拟投资组合。这是一个简化,但它在这个演示工作。

还请注意,这忽略了风险与利率变化的模拟。风险经理很容易担心这些类型的风险(和MATLAB提供的工具来帮助),但是这段代码只关注信用风险。

至于利率:是的,他们基本上一年期远期利率。这不一定利率——现实的观点,演示的重点是信用风险,所以我们做一些简化利率等次要的事情。更实际的利率曲线可以校准和模拟使用IRDataCurve对象固定收益工具箱和相关功能。

路易斯

谢谢你的代码。它写得很好和很好的记录。特别是,我有一个问题关于Credit_VaR.m中的代码。在步骤2(初始投资组合估值)和步骤6(估值基于模拟的评级)使用相同的日期定价。我认为每个人都应该使用日期提前一年结束时(或VaR估计地平线)在步骤6中(使用prbyzero函数)。此外,你能说的具体些文件中你所说的利率信贷投资组合。xlsx(表转换和利率)。这些一年远期利率吗?

正是我想要的。请更多的财务分析工具包。

安德烈斯-我很高兴你发现了这个代码有用!这个使用波浪号(~)操作符MATLAB R2009b后来的一个特性。它允许我们忽略函数参数如果我们不需要他们。在MATLAB的早期版本中,一个哑变量(如“a1”)使用。

同时,注意,除了上面这个语法,其他地区的MATLAB分析(尤其是使用TreeBagger)需要更多的MATLAB的最新版本,因为他们正在使用新功能。

再次感谢!

在TransitionProbabilities 67行。m可以取代[idx, ~ ~] [a1, idx, a1]。

伟大的代码迈克尔! !

立升苏

更新

1.5.0.1

更新许可证

1.5.0.0

小更新的热图。m将在R2011a抛出,后来一个警告。

MATLAB版本兼容性
创建R2010a
兼容任何释放
平台的兼容性
窗户 macOS Linux
确认

启发:可定制的热图