0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何运用MATLAB中的Binning Explorer来创建评分卡?

MATLAB ? 来源:MATLAB ? 作者:MATLAB ? 2021-06-13 15:46 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

这个案例展示如何运用 MATLAB 中自带的 Binning Explorer 小程序来创建信用评级中的评分卡。用 Binning Explorer 对样本进行分箱操作, 创建图表来展示分箱信息,并将创建的对象”creditscorecard”导出。然后利用 creditscorecard 对象,结合 Financial Toolbox 中的函数来对逻辑回归模型进行拟合, 为样本进行评分并计算违约概率(PD),然后用三个不同的指标对评分卡模型进行验证。

步骤1 将样本数据导入到 MATLAB 的工作区

步骤2 将数据导入到 Binning Explorer 小程序

步骤3 在 Binning Explorer 中对分箱做进一步调整

步骤4 在 Binning Explorer 中将 creditscorecard 对象导出

步骤5 对逻辑回归模型进行拟合

步骤6 检查并调整评分卡分数的比例

步骤7 对样本进行评分

步骤8 计算违约概率 PD

步骤9 用 CAP,ROC,KS 检验来对信用评分卡模型进行验证

◆ ◆ ◆ ◆

步骤1. 将样本数据导入到 MATLAB 的工作区将保存在 CreditCardData.mat 中的数据导入 MATLAB 工作区 (使用 Refaat 2011 的数据)。 运行代码如下:

load CreditCardData

disp(data(1:10,:))

步骤2. 将数据导入到 Binning Explorer 小程序方法一, 从 MATLAB 工具栏中打开 Binning Explorer : 在 Apps 菜单下, 找到计算金融学(Computational Finance), 点击 Binning Explorer 的图标。 方法二, 在 MATLAB 中运行如下命令行 。 binningExplorer(更多关于启动 Binning Explorer 小程序的信息, 参见 Start from MATLAB Command Line Using Data or an Existing creditscorecard Object.) (链接如下)https://ww2.mathworks.cn/help/risk/common-binning-explorer-tasks.html#startbinningexplorercommandline在 Binning Explorer 的工具栏,点击 Import Data 按钮来打开导入数据的窗口。

在 Step 1(第一步)下, 选择 data 为需要导入的数据在 Step 2(第二步)下, 可在 Variable Type 下为每个变量指定其类型。 缺省设置下,数据的最后一列(本例中为’status’)为‘Response’, 也就是因变量。因变量的值最好的样本(本例中为“0“)被标记为‘Good’。 所有其它的变量被归为因变量。此外, 在这个例子中,‘CustID’(客户的编号)不是一个包含信息的因变量, 因此把 Variable Type 下面的‘CustID’ 对应设为 Do not include注意

如果导入的数据中有一列是各个因变量的权重,那么在 Step 2 的下面, 对应的 Variable Type , 应在下拉菜单中选中 Weights.

如果原始数据中有部分数据缺失,那么在 Step 2 , 将 Bin missing data 设置为 Yes.

l在 Step 3, 选择 Monotone 作为缺省的初始化的分箱算法。点击 Import Data 完成这一导入数据的步骤。在数据导入的过程中,Binning Explorer 采用我们之前选中的算法自动的对应每个自变量对样本进行分箱。每个自变量对应的样本分箱的结果都单独以柱状图的形式显示如下。点击其中一个因变量,对应的分箱结果的详细信息就会在左下角的 Bin Information 以及右下角的 Predictor Information 这两个面板中显示出来。Binning Explorer 对应每个自变量,都对样本自动进行分箱。采用的缺省算法是“Monotone”。

该算法是针对信用评分卡最理想的算法,因为通过该算法得出的样本数据的分箱结果,对应每个分箱的 WOE(Weight of Evidence)都是尽可能(完全或近似的)呈单调线性的趋势(线性递增或递减)。

在本例中各个自变量的分箱图中可以看到 WOE 这一单调性的趋势。我们来看一下如何对数据进行一些初步的分析。以‘ResStatus’(居住状况)这个类别型变量(categorical variable)为例。点击 ResStatus 的分箱图。 在 Bin Information 面板中包含了不同分箱(分组)的好样本和坏样本的数量和其他的分箱信息如 WOE。以“Tenant”这一分箱(样本人的居住状况为“租房”)为例:在租房居住的样本中,307 个为好样本(没有发生过违约),167 个坏样本(有违约记录)好样本与坏样本之比(Odds)为1.8383。对于数值型的变量, 以 CustIncome 为例,点击 CustIncome 的分箱图。则 Bin Information 的面板中的数据更新为 CustIncome 的分箱信息。

步骤3. 对分箱结果进行手动调整以 CustAge (客户年龄) 为例,点击 CustAge 这个变量的分箱图。注意第一组和第二组分箱(年龄为 33 岁以下,以及 33 到 37 岁)的 WOE 非常接近,第五组和第六组分箱也是类似情况。 我们认为这两对相邻的分组并没有把样本更好的区分开来,也就是说,这样的分组并没有给接下来的打分操作(以便区分好样本和坏样本)带来可以明显区分的信息。因此可以将这两对分组分别合并。

要合并第一组和第二组分箱,我们进行如下操作:在 Binning Explorer 菜单下, 点击 Manual Binning 可将当前选中的变量 CustAge 在一个新的窗口下打开(Manual Binning: CustAge)。 您也可以直接用鼠标双击对应变量的图来打开 Manual Binning 窗口。 用 Ctrl + 鼠标点击来同时选中要合并的分箱 1 和 2,此时两个分箱的柱状图会被蓝色边框圈起来。

在 Manual Binning 菜单下, Edges 右边的两个文本框显示的是将要合并的两个分箱所涵盖的变量的取值的范围,本例是从 0 到 37 岁(不含37岁)。

点击 Merge 将前两个分箱合并。此时在 Overview 窗口下面的 CustAge 的图已经更新为了合并后的新的分箱的图例,同时在 Bin Information 和 Predictor Information 面板下的数据也会相应更新。

接下来,合并初始的第 4 和第 5 分箱(上面合并步骤后的第 3 和第 4 分箱,即 46~48 岁组和 48 到 58 岁组), 因为这两组的 WOE 也非常接近。

变量 CustAge 的分箱图在前面两个合并操作后已经更新为了新的信息。Bin Information 和 Predictor Information 这两个面板的信息也同样更新了。(注: Predictor Information 在合并操作后没有变化,是因为这两次操作并没有改变具体的样本,因此没有影响到该面板下的四个数据统计的信息)对下面这些有接近的 WOE 的分箱进行类似的合并操作:

变量 CustIncome (客户的收入情况), 合并分箱 3、4 和5.

变量 TmWBank (在该银行的开户时长), 合并分箱 2 和 3.

变量 AMBalance, (账户平均每月盈余),合并分箱 2 和 3.

现在所有变量的分箱显示的 WOE 都为近似线性单调(递增或递减)的趋势。步骤4. 将 creditscorecard 对象从 Binning Explorer 导出到工作区在完成所有分箱的操作之后,在 Binning Explorer 菜单下,点击 Export Scorecard 然后给 creditscorecard 这个对象命名。 本例中将该对象命名为“sc”保存到工作区 。步骤5. 进行逻辑回归拟合通过 fitmodel 函数来对WOE数据进行逻辑回归的拟合。 (链接如下)https://ww2.mathworks.cn/help/finance/creditscorecard.fitmodel.htmlfitmodel 会对训练集的数据样本进行分箱,将其转化成相应的 WOE 的值,并与相应因变量的值进行映射,(即好样本对应的因变量值为1)然后做线性的逻辑回归模型的拟合。缺省设置下,fitmodel 逐一将变量进行测试来决定是否将其纳入模型中作为自变量。 代码运行结果如下:

sc = fitmodel(sc);

1200 observations, 1192 error degrees of freedom

Dispersion: 1

Chi^2-statistic vs. constant model: 89.7, p-value = 1.42e-16

步骤6. 检查并调整评分卡的分数

在进行模型拟合之后,各个变量的分箱对应评分卡的分数尚未按照比例进行调整,是直接以WOE 值和模型变量的系数的乘积得来的分数。用 displaypoints 函数可以看到评分卡上所有的分箱和对分数。 (链接如下)https://ww2.mathworks.cn/help/finance/creditscorecard.displaypoints.html代码运行结果如下:

p1 = displaypoints(sc);

disp(p1)

用 modifybins 函数来调整对变量的每个分箱的文字描述。

16ce87a6-c41d-11eb-9e57-12bb97331649.png

评分卡的分数通常要按照一定的比例调整并四舍五入进行取整。可用 formatpoints 函数来进行这些操作。 (链接如下)https://ww2.mathworks.cn/help/finance/creditscorecard.formatpoints.html比如,可设定达到一定好坏样本比例(odds ratio)的分箱可以获得的分数,以及每次该比例翻倍时候可以增加的分数。运行代码如下:

1716cd72-c41d-11eb-9e57-12bb97331649.png

步骤7. 对样本进行评分用 score 函数来计算训练集中的样本的分数。(链接如下)https://ww2.mathworks.cn/help/finance/creditscorecard.score.html也可以用该函数来计算其它样本的分数,比如预留的用来验证模型的测试集样本。该函数也可以显示每个客户样本在每个自变量上所获得的分数。运行代码如下:

[Scores,Points] = score(sc);

disp(Scores(1:10))

disp(Points(1:10,:))

528.2044

554.8861

505.2406

564.0717

554.8861

586.1904

441.8755

515.8125

524.4553

508.3169

步骤8. 计算违约概率PD用 probdefault 函数来计算违约概率 pd. (链接如下)https://ww2.mathworks.cn/help/finance/creditscorecard.probdefault.htmlpd = probdefault(sc);定义好样本的概率,并将好坏样本的比率 (odds) 和对应的评分卡分数画图显示。图中我们可以看出,样本的分数与对应的好坏样本比(odds)相吻合,并且满足预定义的“odds翻倍则分数增加50“。运行代码如下:

176d8cac-c41d-11eb-9e57-12bb97331649.png

步骤 9. 利用 CAP、ROC 和 Kolmogorov-Smirnov 检验来验证信用评分卡模型Creditscorecard 这个对象支持三种验证方式: CAP,ROC 和 K-S 检验。 更多关于这三种检验方式的信息,参见 validatemodel. 运行代码如下:

17c5a8e2-c41d-11eb-9e57-12bb97331649.png

原文标题:实用案例 | 用 Binning Explorer 小程序创建评分卡

文章出处:【微信公众号:MATLAB】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • matlab
    +关注

    关注

    189

    文章

    3004

    浏览量

    234994
  • 小程序
    +关注

    关注

    1

    文章

    243

    浏览量

    13000

原文标题:实用案例 | 用 Binning Explorer 小程序创建评分卡

文章出处:【微信号:MATLAB,微信公众号:MATLAB】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Made with KiCad(138):AnyShake Explorer一款开源、专业级的地震监测系统

    =443cf358-a000-4ffe-8345-d5050507593c PCB License AGPL 仓库 & 下载 可以在Github获取开源仓库: https://github.com/anyshake/explorer Baidu 下载: ??
    的头像 发表于 08-11 11:19 ?887次阅读
    Made with KiCad(138):AnyShake <b class='flag-5'>Explorer</b>一款开源、专业级的地震监测系统

    喜报!科士达以实力超越期待:EcoVadis评分70分,远超客户目标!

    显示的评分上,可以明确看到我司此评分超过88%的同行,属于前15%。超越客户期许,责任实力再获权威印证客户的严格要求是科士达前进的动力。当客户明确提出希望我司达
    的头像 发表于 07-17 11:02 ?420次阅读
    喜报!科士达以实力超越期待:EcoVadis<b class='flag-5'>评分</b>70分,远超客户目标!

    OptiSystem应用:用MATLAB组件实现振幅调制

    本案例展示了在OptiSystem调用MATLAB代码实现振幅调制。 一、建模目标 案例,我们生成两束功率为0dBm,频率分别为192.7THz、191THz的载波,合束之后经过自定义脉冲的调制
    发表于 06-13 08:46

    为什么在SDK 1.3.5创建的配置文件是在SDK 1.3.4创建的 打不开?

    为什么在 SDK 1.3.5 创建的配置文件是在 SDK 1.3.4 创建的 打不开?
    发表于 05-13 07:22

    MATLAB在工程的应用

    电子发烧友网站提供《MATLAB在工程的应用.pdf》资料免费下载
    发表于 04-19 16:54 ?4次下载

    MATLAB仿真在直流电机双闭环调速系统的应用

    启动,需要电流迅速达到最大值并且在一定时间内保持恒定,而主电路存在的电感使得电流不能发生突变,因此,可以采用电流负反馈控制实现这一过程。但电机的速度达到稳态后,系统通过转速负反馈控制,电流负反馈
    发表于 03-20 13:03

    如何运用MATLAB控制DLP4500?

    希望通过用MATLAB实现对DLP4500 的控制?因为现在MATLAB可以控制相机,希望也直接控制DLP。 是否有相关的例子来参考。谢谢
    发表于 03-03 06:19

    有没有什么方案能实现直接用matlab或python调用D4100_usb.dll?

    是32位程序而我的电脑是64位的。 由于实验主要用matlab编程,使用C++程序很不方便,如果能直接用matlab或python调用D4100_usb.dll就会好很多。 因此,我想询问
    发表于 02-27 06:59

    OptiSystem应用:用MATLAB组件实现振幅调制

    本案例展示了在OptiSystem调用MATLAB代码实现振幅调制。 一、建模目标 案例,我们生成两束功率为0dBm,频率分别为192.7THz、191THz的载波,合束之后经过自定义脉冲的调制
    发表于 02-14 09:39

    用ADS1258做了一块采集,请问有比较简单的测试方法测试我的采集的性能和精度吗?

    您好!我现在用ADS1258做了一块采集,请问有比较简单的测试方法测试我的采集的性能和精度吗。 我现在用普通的信号发生器产生了一个正弦波,1KHz的频率,用采集采集了16*1
    发表于 02-10 07:49

    Simulink与 MATLAB 的结合使用 Simulink的信号处理方法

    在工程和科学研究,信号处理是一个重要的领域,涉及到信号的采集、分析、处理和生成。MATLAB 提供了丰富的信号处理工具箱,而 Simulink 提供了一个直观的图形界面,使得复杂的信号处理系统可以
    的头像 发表于 12-12 09:25 ?1684次阅读

    Pure path studio内能否自己创建一个component,实现特定的算法,例如LMS算法?

    TLV320AIC3254EVM-K评估模块, Pure path studio软件开发环境。 问题:1.Pure path studio 内能否自己创建一个component,实现特定的算法
    发表于 11-01 08:25

    MATLAB-网页访问与关闭

    。 要将 MATLAB 浏览器用作打开外部网站的默认浏览器,请转到主页选项,然后在环境部分中点击预设。选择 MATLAB > Web,然后在系统 Web 浏览器部分,清除打开
    发表于 09-05 16:23

    MATLAB的矩阵索引

    对矩阵进行索引是从矩阵中选择或修改部分元素的一种方式。MATLAB 有几种索引样式,它们不仅功能强大、灵活,而且可读性强、表现力强。矩阵是 MATLAB 用来组织和分析数据的一个核心组件,索引是以可理解的方式有效操作矩阵的关键。
    的头像 发表于 09-05 09:28 ?1156次阅读
    <b class='flag-5'>MATLAB</b><b class='flag-5'>中</b>的矩阵索引

    IOy系列BACnetIP协议远程IO模块用于接入江森Facility Explorer?楼宇自控系统

    在智能楼宇管理的新时代,江森的Facility Explorer?楼宇自控系统以其高效能和先进的技术引领着行业的发展。而钡铼技术的IOy系列BACnet/IP协议远程I/O模块BA190的引入,为
    的头像 发表于 08-26 14:23 ?899次阅读