原创|手把手教你构建评分卡模型

a654d479cf159a5759b53f0b490efd15.png

作者:胡赟豪‍‍‍‍
本文约2800字,建议阅读5分钟
本文介绍了构建评分卡模型。‍‍‍

一、背景

在各种机器学习、深度学习模型快速发展的当下,评分卡模型作为一种可解释机器学习模型,仍然在金融、营销等领域被广泛使用。这一模型通过构建一组基于输入变量的评分规则,能够直观地对样本进行评分,非常易于理解和操作。举一个金融信用风险评分卡的例子,要判断一笔贷款能够被按时偿还的风险大小,可以设置这样一个评分卡:

是否有车

0

10

是否有房

0

30

是否已婚

0

10

年龄

[0,25)

0

[25,40)

5

[40~55)

10

[55,+∞)

5

学历

初中及以下

0

高中

5

本科

10

硕士及以上

20

月均收入        

0~3000

0

3000~6000

5

6000~10000

10

10000~20000

15

20000+

20

这个评分卡的得分范围是[0,100],分数越高,违约的风险就越小。对于一个有房有车,有着本科学历和15000元月收入的30岁已婚申请者,按照评分卡可以计算其得分:10+30+10+5+10+15=80分,据此风险评估人员可以快速地判断出该申请者的信用风险较小。

评分卡的强可解释性一方面使其能够快速给出结论,另一方面也能给出原因。通过查看每个评分项的得分,我们也可以清楚看到申请者在哪些项目扣了多少分。在一些其他场景下我们如果要给予被评分人建议,也可以清楚地看到哪一项提升到什么程度,对应能够增加多少得分。

那么评分卡为什么最后是选用这些变量?这些分数又是怎么计算出来的呢?接下来我们一起看看评分卡的构建过程。

二、数据清洗

在上面的例子中,模型的目标是申请者是否会按时偿还,特征则是每个申请者的个人信息。在收集好样本数据之后,首先需要对数据进行清洗,包括异常值、缺失值处理等。

异常值可以基于规则或者离群值检测来发现,例如发现年龄为负数、收入高于平均值的X%(X可以自行调整)等情况的样本,可以予以剔除,避免干扰后续的模型构建。   

缺失值则可以用平均数、相似样本填充等方法进行填补,也可以直接保留缺失状态,在后续的建模中作为单独的一个分箱。

三、分箱

评分卡模型的一大特点是对每个输入变量的不同分箱分别进行打分。例如在上面例子中,我们注意到每个输入变量都是离散的。即使是像收入、年龄这样的连续型变量,也是先进行分箱(分成不同的取值区间)后再进行打分,因此模型最后的得分也是离散的。

分箱的常见方法包括:

(1)等距分箱

将变量可能取值的区间分为k个相同大小的小区间,例如连续区间[0,3]拆分为[0,1)和[1,2)、[2,3]三个分箱。

(2)等频分箱

将变量可能取值的区间分为k个区间(可以不同大小),每个区间内的样本频率相同,例如[0,3]拆分为[0,1)和[1,3]两个区间,但样本中在两个区间内的取值频率相同。

(3)最优分箱

最优分箱方法是有监督的,需要样本的标签信息,使用类似于决策树的方法,通过计算信息熵增益等指标来决定拆分点。

四、WOE编码

分箱之后输入变量变成一系列取值为0或1的变量分箱,接下来我们需要对它们进行有监督的WOE(证据权重,weight of evidence)编码,将“1”转换成其他更加有预测能力的数字。   

假设样本标签中违约为1,按时偿还为0,则对于变量分箱i,定义以下变量:

608f5225db558708993d57b4e8bf92bb.jpeg为分箱i中违约客户占所有样本中违约客户的比例

e145c046ef63b3efab9998a1a2660319.jpeg为分箱i中按时偿还客户占所有样本中违约客户的比例

cf206e1fd7b5bab105343e36898773fb.jpeg为分箱i中违约客户人数

9b6c99e3b316cd3b6730ec3b00611348.jpeg为分箱i中按时偿还的客户人数

dbc868f11fe70f55b719b7dcfff77758.jpeg为所有样本中违约客户人数

ae970748c8079e6b347d948c93d12aeb.jpeg为所有样本中按时偿还的客户人数

则分箱i的WOE取值为

674df5b21d6efaa4d2762a147db52c7f.jpeg 

通过公式可以看出,分箱中违约客户比例越高,WOE值越大,理论上8052ccb8b8bc7ba420e010f000ecc40b.jpeg 。当分箱i中违约客户占比高于总体时WOE>0,小于总体时WOE<0;违约客户的占比和总体一致时,WOE值为0,分箱没有预测能力

9cfb190b1c67bed1d3bb34143e74df2c.jpeg

从上面的式子可以看出,WOE值能够反映分箱对目标预测的贡献情况,在分箱的分类信息“1”的基础上增加该分箱的权重信息,因此WOE被称为“证据权重”。注意在计算时,即使是缺失值组成的分箱也可以算出一个WOE分数。

但是WOE的计算为什么是这个形式?一种解释是为了更加适配后续的logistic建模,从以下推导中可以看出,WOE分数和预测目标的对数几率的变化近似线性相关。   

Logistic模型公式:67104700fd765347d9b55e613e6beaa4.jpeg,其中p为客户违约概率,f1ca41bebf566421aed14ceb2de9315c.jpeg为模型的参数向量

8179672e67d76978ee8d80f3c62c2ca4.jpeg ,其中773fc9edfa1319ea5b78c09199b83871.jpeg为分箱i中客户违约概率,d07f67aa607104bea18552f0bec5dac6.jpeg为总体的违约对数几率。

五、变量选择

变量选择的目标主要有两个,一个是筛选出预测能力强的变量,另一个是处理多重共线性问题。

评分卡模型中常用IV值(信息价值,information value)来表示变量的预测能力,变量的IV值是其所有分箱的IV值之和:

d9827f36038a0eeb560cbcce66fecb72.jpeg

由于公式中的两个项同向,故IV≥0,IV值越大,变量对目标的预测能力越强。

多重共线性则可以结合变量间相关系数、VIF值等进行判断,在多个共线性较高的变量中,可以优先保留预测能力较高的变量。

六、模型训练与评估

训练前首先对样本进行样本集和测试集的拆分。评分卡模型本质上是一个二分类预测模型,使用logistic模型来估计参数,接下来只需要将筛选后的变量的分箱WOE值输入到模型中,完成模型的训练即可。在测试集上可以计算模型的AUC、KS等指标,来评估模型效果。   

七、评分卡转换

至此还剩下最后一个问题:怎样将模型的结果转化为文章开头那样的评分卡里的分数?

例子中评分卡的分数实际上表达的是违约的对数几率大小(因为希望分数大小和违约几率负相关所以加入负号):f7f9f1afca4f93ea93e1533cf2695a81.jpeg

假设向量x取某个值时,违约几率为odds0,则此时得分为358ecdbf55b55efba4c421a664b7dc6e.jpeg;再假设几率翻倍时,有330391f9fbf8cb72692893f6992f9fc8.jpeg,其中PDO表示违约几率翻倍时分数的变动幅度。可以将以上两个式子联成一个方程组,在人工设定基础分数s0、基础几率odds0和PDO的基础上即可解出A、B大小。

在式子673476d561a6002664e491fc88c62d89.jpeg中代入A、B后,就可以将各个变量的分箱得分计算出来,生成评分卡了。注意此时评分卡得分的阈值范围很可能并不是0~100这样比较规整的区间,但可以通过分数的映射再进行一些调整得到。

编辑:王菁

作者简介

胡赟豪,硕士毕业于清华大学经济管理学院,现从事于互联网数据科学相关工作,主要技术探索方向为机器学习及其在商业中的应用。

数据派研究部介绍

数据派研究部成立于2017年初,以兴趣为核心划分多个组别,各组既遵循研究部整体的知识分享实践项目规划,又各具特色:

算法模型组:积极组队参加kaggle等比赛,原创手把手教系列文章;

调研分析组:通过专访等方式调研大数据的应用,探索数据产品之美;

系统平台组:追踪大数据&人工智能系统平台技术前沿,对话专家;

自然语言处理组:重于实践,积极参加比赛及策划各类文本分析项目;

制造业大数据组:秉工业强国之梦,产学研政结合,挖掘数据价值;

数据可视化组:将信息与艺术融合,探索数据之美,学用可视化讲故事;

网络爬虫组:爬取网络信息,配合其他各组开发创意项目。

点击文末“阅读原文”,报名数据派研究部志愿者,总有一组适合你~

转载须知

如需转载,请在开篇显著位置注明作者和出处(转自:数据派THUID:DatapiTHU),并在文章结尾放置数据派醒目二维码。有原创标识文章,请发送【文章名称-待授权公众号名称及ID】至联系邮箱,申请白名单授权并按要求编辑。

未经许可的转载以及改编者,我们将依法追究其法律责任。

43ec8d376aff66533b56ef976234a72e.png点击“阅读原文”加入组织~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/706276.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML静态网页成品作业(HTML+CSS)——我的家乡江永网页设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

上海亚商投顾:沪指低开低走 两市成交额跌破8000亿

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 市场全天震荡走低&#xff0c;三大股指尾盘均跌近1%。地产股逆势走强&#xff0c;光大嘉宝、天地源、云南城投…

【NLP】文本分类

n-gram 的局限性 n-gram 只能对于填空这样的通顺性问题做出推测&#xff0c;但是没有办法完全解决句子的语义问题&#xff0c;从而无法实现文本的分类 文本的分类&#xff0c;就是将文本在语义的理解下划分到特定的主题下 手工规则 如一些垃圾过滤系统&#xff0c;需要人工制…

Spring实现数据库读写分离(MySQL实现主从复制)

目录 1、背景 2、方案 2.1 应用层解决: 2.2 中间件解决 3、使用Spring基于应用层实现 3.1 原理 3.2 DynamicDataSource 3.3 DynamicDataSourceHolder 3.4 DataSourceAspect 3.5 配置2个数据源 3.5.1 jdbc.properties 3.5.2 定义连接池 3.5.2 定义DataSource 3.6…

静态IP地址:网络通信的稳定之锚

在数字化时代&#xff0c;网络通信是企业运营和个人生活不可或缺的一部分。而在这个过程中&#xff0c;IP地址扮演着至关重要的角色。静态IP地址&#xff0c;作为一种特殊的网络配置&#xff0c;为网络通信提供了稳定性和可靠性。本文将从五个方面深入探讨静态IP地址的重要性、…

vue3 自定义组件

在项目中&#xff0c;我们会遇到一些没有现成的组件&#xff0c;那这个时候我们就需要自己去写一个满足我们需求的组件。 比如&#xff0c;我需要一个上下排布&#xff0c;上面显示标题&#xff0c;下面显示内容的组件。封装完成后方便复用。 1、布局组件 我定义一个上下结构的…

finallyshell激活-支持所有版本(老版 + 最新版) + 所有平台(mac + windows)

一&#xff1a;打开finally shell的激活页面 二&#xff1a;点击离线激活 三&#xff1a;复制机器码&#xff0c;然后执行一下代码 原文&#xff1a;大哥原文&#xff0c;但是这个大佬是用java实现的&#xff0c;执行因为依赖的问题一直报错 基于以上问题&#xff0c;所以使…

线程池的一些问题

核心线程数1.最大线程5.队列5.存活时间10s 1.场景一 如果核心线程数.被一直占用得不到释放.新进来1个任务.会怎么样?答: 会在队列中中死等. 只要进来的任务.不超过队列的长度,就会一直挡在队列中死等 package com.lin;import java.util.concurrent.Executors; import java.u…

ApiHug - 闭门造车, 出门合辙

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Nex…

flutter开发实战-JSON和序列化数据

flutter开发实战-JSON和序列化数据 大多数移动应用都需要与 web 服务器通信&#xff0c;同时在某些时候轻松地存储结构化数据。当创造需要网络连接的应用时&#xff0c;它迟早需要处理一些常见的 JSON。使用Json时候&#xff0c;可以使用json_serializable 一、引入json_anno…

微服务架构:注册中心 Eureka、ZooKeeper、Consul、Nacos的选型对比详解

微服务架构&#xff08;Microservices Architecture&#xff09;是一种基于服务拆分的分布式架构模式&#xff0c;旨在将复杂的单体应用程序拆分为一组更小、更独立的服务单元。这些服务单元可以独立开发、测试、部署&#xff0c;并使用不同的技术栈和编程语言。它们通过轻量级…

Golang | Leetcode Golang题解之第92题反转链表II

题目&#xff1a; 题解&#xff1a; func reverseBetween(head *ListNode, left, right int) *ListNode {// 设置 dummyNode 是这一类问题的一般做法dummyNode : &ListNode{Val: -1}dummyNode.Next headpre : dummyNodefor i : 0; i < left-1; i {pre pre.Next}cur :…