社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

用机器学习做信用评分

AI研习社 • 6 年前 • 673 次点击  

本文为 AI 研习社编译的技术博客,原标题 :

Credit Scoring with Machine Learning

作者 | Hongri Jia

翻译 | 胡瑛皓         

校对 | 酱番梨        审核 | 约翰逊·李加薪       整理 | 立鱼王

原文链接:

https://medium.com/henry-jia/how-to-score-your-credit-1c08dd73e2ed

注:本文的相关链接请访问文末【阅读原文】


信用评分是衡量人们信用的数字表示。银行业通常用它作为支持信贷申请决策的方法。本文讲述如何用Python(Pandas、Sklearn)开发标准评分卡模型,它已成为一种最受欢迎且最简单的衡量客户信用的形式。

   项目动机

如今信用对每个人来说都非常重要,因为它是衡量一个人是否可靠的一种指标。很多时候服务提供商在提供服务前会先评估客户的信用记录,然后决定是否提供服务。可是审核个人资料并手工生成信用报告是非常耗时的。信用评分节省时间而且容易解读,所以就被开发出来服务这些目的。

产生信用分的过程称为信用评分,它被广泛应用于许多行业特别是银行业。银行通常用信用分决定谁应该授信、授信额度是多少、使用什么样的操作策略去避免信用风险。总体来说主要是两部分:

  • 建立统计模型

  • 应用统计模型为信用申请或现有信用帐户打分

本文会介绍最受欢迎的信用评分方法,我们称为评分卡模型。有两个原因使其成为主流的方法。首先,评分卡模型很容易跟没有相关背景和经验的人(诸如客户)解释说明。其次,评分卡模型的开发过程很标准且被广泛接受,这意味着公司不需要投入太多研发经费。以下是评分卡的样例,后面会讲到如何使用。

图1 评分卡样例

   数据探索和特征工程

接下来将详细说明如何开发评分卡模型。我用的数据集来自Kaggle竞赛。 图2列出该数据集的数据字典信息。其中第一个变量是目标变量,二元分类变量,其余变量是特征。

图2 数据字典

浏览完数据后,开始用一些特征工程的方法处理一下数据。首先检查每个特征变量是否包含缺失值,然后用中位数估算补齐。

接下来处理异常值。总体来说,需要根据异常的类型进行处理。例如 如果异常值是由机械错误或测量导致的,可以用缺失值的方法进行处理。在这个数据集中有很大的数值,不过这些值看起来都很合理,所以取top/bottom coding。图3中表明当采用top coding后,数据分布看起来更接近于正态。

图3 用Top coding处理异常值

如图1中样例评分卡所示,很显然每个特征已被分组为不同的属性(或属性组),分组原因如下:

  • 有助于洞察特征的关联属性及性能

  • 在非线性依赖特征应用线性模型

  • 深入了解风险预测器的行为,有助于制定更好的组合管理策略

那么我们可以采用分桶法,处理后每个值被赋予它所应在的一个属性,这样一来数值特征便被转化为分类特征。以下是分桶后的输出样例。

图4 分桶处理“年龄”

所有特征分组后,特征工程就完成了。接下来是计算每个属性的证据权重(WoE)以及每个特点(特征)的信息价值。之前提到将所有数值类型都分桶处理后转换为分类型特征。然而不能直接用这些分类模型去拟合模型,所以需要给这些分类特征赋予一些数值。计算证据权重(WoE)的目的是为每个分类变量分配一个唯一值。信息价值(IV)用来衡量特征的预测力,将被用于特征选择。下面给出WoE和IV的公式。这里“Good”意思是客户不会有严重逾期或者目标变量=0,而“Bad”客户会产生逾期目标变量=1.

通常特征分析报告可提供WoE和IV。我在Python中定义了一个函数自动生成这个报告。以“Age”特征为例,其特征分析报告如图5所示

图5 “Age”特征分析报告

绘制一张柱状图,方便比较各种特征的IV。从柱状图中可以看到最后两个特征“NumberOfOpenCreditLinesAndLoans”和 “NumberRealEstateLoansOrLines”的IV值较小,因而只选用其他8个特征训练模型。

图6 特征预测力

   模型拟合及评分卡得分系数计算

特征选取完成后,用WoE替换原有变量的值进行建模。训练模型的数据已经准备好了。评分卡模型开发通常使用的模型是逻辑回归,它是一个通用的二分类模型。我通过交叉验证和网格搜索调整参数,然后用测试数据集检查模型的精度。 由于Kaggle不会给出目标变量的值,我不得不在线提交以获得精度。为了证明这些数据处理是有效的,我分别用原始数据和处理后的数据进行建模。Kaggle给出的结果,经过数据处理精度从0.693956提升至0.800946。

最后一步是为每个属性计算评分卡得分系数,这样就得到了最终的评分卡。评分卡模型的得分可以通过以下式子计算得到:

Score = (β×WoE+ α/n)×Factor + Offset/n

此处:
β —含 给定属性的逻辑回归模型的系数

α —逻辑回归模型的截距  
WoE — 给定属性的证据权重

n —模型特征数量
Factor, Offset — 缩放参数

前四个参数的计算方法在前面已经提到过,这里给出最后两个参数factor和offset的计算方法。

  • Factor = pdo/Ln(2)

  • Offset = Score — (Factor × ln(Odds))

这里pdo意思是加倍odds需要的点数,坏样本率在之前的特征分析报告中已计算过了。如果评分卡模型的基础odds是50:1,其得分为600,那么pdo=20 ,也就是说每增加20点odds翻一倍,具体来说factor和offset公式如下:
Factor = 20/Ln(2) = 28.85
Offset = 600- 28.85 × Ln (50) = 487.14

算完这些之后,评分卡开发就完成了,图7中列出了评分卡的部分结果。

图7 最终评分卡 部分特征

如果来了一个新客户,你可以立刻查表找出特征对应的得分,然后评分卡最终的得分是每个特征得分值之和。比如说,银行开发了一位新的信用卡申请人,年龄45岁、负债率0.5、月收入5000美元。其信用评分为 53 + 55 + 57 = 165。

如需要开发更精准的评分卡,开发人员需要考虑更多场景。例如有些个人属于“Bad”,然而申请却通过了。或者一些个人属于“Good”,但申请被拒绝。因此拒绝推断需要结合到开发过程中。这里并未实现,因为在我的数据集中缺少拒绝数据。如果你想更深入了解这部分,推荐你阅读Naeem Siddiqi写的 《Credit Risk Scorecards — Developing and Implementing Intelligent Credit Scoring》。

想要继续查看该篇文章相关链接和参考文献?

点击底部【阅读原文】即可访问:

https://ai.yanxishe.com/page/TextTranslation/1626

AI求职百题斩 · 每日一题


每天进步一点点,长按扫码参与每日一题!



点击阅读原文,查看本文更多内容↙

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31412
 
673 次点击