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
    +关注

    关注

    175

    文章

    2922

    浏览量

    228431
  • 小程序
    +关注

    关注

    1

    文章

    227

    浏览量

    11840

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

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

收藏 人收藏

    评论

    相关推荐

    虹科干货丨轻松掌握PCAN-Explorer 6,dll调用一文打尽!

    虹科PCAN-Explorer 6(下称“PE6”)作为一款专业的CAN/CAN FD网络处理软件,不仅提供了强大的报文监控和发送功能,还通过其创新的dll加载功能,为用户带来了更加灵活和高效的批量
    的头像 发表于 04-19 10:36 112次阅读
    虹科干货丨轻松掌握PCAN-<b class='flag-5'>Explorer</b> 6,dll调用一文打尽!

    求助,如何在配置向导创建用户定义的选项

    我想在配置向导创建选项,如下图所示。 我该怎么办?
    发表于 01-31 08:34

    如何使用MATLABMATLAB Parallel Server扩展整车仿真呢?

    使用 MATLAB 和 Simulink 设计和构建 Rivian 车辆仿真界面平台帮助我们实现了关键目标。我们为工程师和非工程师创建了统一平台,用于运行整车仿真、后处理结果和创建报告。
    的头像 发表于 01-10 18:22 820次阅读
    如何使用<b class='flag-5'>MATLAB</b>和<b class='flag-5'>MATLAB</b> Parallel Server扩展整车仿真呢?

    运用AD8232评估板进行心电测量时,三电极模式和双电极模式能否通过跳线进行转换?

    运用AD8232评估板进行心电测量时,三电极模式和双电极模式能否通过跳线进行转换?
    发表于 11-22 07:39

    Matlab创建一个Message方法

    创建一个空白ROS消息,并用机器人路径的X和Y位置填充它。然后将更新后的ROS消息发布到ROS网络。 简单介绍一下Blank Message模块的作用:Blank Message模块用指定
    的头像 发表于 11-15 18:18 360次阅读
    <b class='flag-5'>Matlab</b>中<b class='flag-5'>创建</b>一个Message方法

    Simulink中如何创建一个Publisher

    创建一个Publisher 配置一个block,并向/location的节点发送一条geometry_msgs/Point类型的消息。 需要做到以下几个步骤: 1.在MATLAB工具条中,选择
    的头像 发表于 11-15 17:32 292次阅读
    Simulink中如何<b class='flag-5'>创建</b>一个Publisher

    使用MATLAB Simulink和HDL编码器创建自定义IP--AWB

    自动白平衡模块的设计是使用 HDL Coder 在 MATLAB 和 Simulink 中创建的。HDL Coder能够生成 HDL 文件,这些文件可以作为 IP 在我们的目标 FPGA 中运行。
    的头像 发表于 11-13 09:27 510次阅读
    使用<b class='flag-5'>MATLAB</b> Simulink和HDL编码器<b class='flag-5'>创建</b>自定义IP--AWB

    MATLAB如何实现PID?

    中实现PID控制:1.打开MATLAB,启动MATLAB软件。2.创建新的MATLAB脚本,在MATLAB命令窗口或编辑器中
    的头像 发表于 11-04 08:00 1099次阅读
    <b class='flag-5'>MATLAB</b>如何实现PID?

    MATLAB数学建模编程资料

    它已经成为世界上应用最广泛的数学软件之一,尤其在工程计算领域、高校应用最广。该软件以矩阵运算为基础,将计算、可视化、程序设计融合在简单易用的交互式环境。u3000u3000运用MATLAB可以实现
    发表于 09-22 08:19

    创建一个RTX内核系统完成CAN任务

    同时必须处理许多任务时, 我们可以使用 RTOS (实时操作系统) 帮助我们管理这些任务。 在 RTOS 系统, CPU 处理时间被分为若干时间段。 每个时段处理不同的任务, 而这些任务之间的转换
    发表于 08-22 07:19

    Matlab App Designer工具的主要功能

    Matlab App Designer是一种强大的工具,允许用户以交互式方式创建专业和精美的应用程序。下面是对它的一些主要功能的总结。
    的头像 发表于 07-28 14:21 1520次阅读
    ​<b class='flag-5'>Matlab</b> App Designer工具的主要功能

    虹科科技 | 探索CAN通信世界:PCAN-Explorer 6软件的功能与应用

    引言CAN(ControllerAreaNetwork)总线是一种广泛应用于汽车和工业领域的通信协议,用于实时数据传输和设备之间的通信。而虹科的PCAN-Explorer6软件是一款功能强大的CAN
    的头像 发表于 07-05 10:12 4911次阅读
    虹科科技 | 探索CAN通信世界:PCAN-<b class='flag-5'>Explorer</b> 6软件的功能与应用

    DAQexpress调用matlab模块问题

    *附件:PROJ.rar 目前在做血压-脉搏波显示的程序 从采集usb-6009提取两路传感器的信号 DAQexpress-matlab模块折算出血压 而编程完毕后总是会报告error
    发表于 06-28 11:04

    ESP8266使用D1创建计数灯,为什么一直找不到端口?

    我目前正在尝试按照这些说明进行操作:目标是使用 D1 创建计数灯。在插入电路板并看到端口出现之前,一切都与结构顺利进行。我可以插入,蓝灯闪烁,然后……什么都没有。没有端口出现。我没有安装驱动程序
    发表于 06-01 10:57

    ls1028如何创建可启动SD

    L5.15.71-2.2.0 — 2023 年 2 月 17 日 在文档中有构建复合固件的信息。 我没有找到为 ls1028 构建它的方法。 如何创建可启动 SD
    发表于 05-09 08:46