基于python的信用卡评分模型

article/2025/8/3 13:29:22

基于python的信用卡评分模型

1. 项目背景介绍

1.1 信用风险和评分卡模型的基本概念

       信用风险指的是交易对手未能履行约定合同中的义务造成经济损失的风险,即受信人不能履行还本付息的责任而使授信人的预期收益与实际收益发生偏离的可能性,它是金融风险的主要类型。

      借贷场景中的评分卡是一种以分数的形式来衡量风险几率的一种手段,也是对未来一段时间内违约、逾期、失联概率的预测。一般来说,分数越高,风险越小。

      信用风险计量体系包括主体评级模型和债项评级两部分。其中主体评级模型包含以下四个方面内容:

  • 申请者评级模型:主要应用于相关融资类业务中新用户的主体评级,适用于个人及机构融资主体。位于贷前准入环节。
  • 行为评级模型:主要用于相关融资类业务中存量客户在续存期内的管理,如对客户可能出现的逾期、延期等行为进行预测,仅适用于个人融资主体。 
  • 催收评级模型:主要应用于相关融资类业务中存量客户是否需要催收的预测管理,仅适用于个人融资主体。 
  • 欺诈评级模型:主要应用于相关融资类业务中新客户可能存在的欺诈行为的预测管理,适用于个人和机构融资主体。 在贷前准入环节里面。

       本项目主要针对申请者评分模型。

1.2 数据来源

         本项目数据来源于kaggle竞赛Give Me Some Credit

2. 信用卡评分模型开发

      模型的构建主要包含以下几大部分内容:数据准备及数据预处理、变量选择、模型构建、模型验证、模型评估、模型部署、模型监控几大部分。下面一一讲述。

2.1 数据准备及数据预处理

2.1.1 获取数据

       数据获取包括存量客户包括获取存量客户及潜在客户的数据。存量客户是指已经在证券公司开展相关融资类业务的客户,包括个人客户和机构客户;潜在客户是指未来拟在证券公司开展相关融资类业务的客户,主要包括机构客户,这也是解决证券业样本较少的常用方法,这些潜在机构客户包括上市公司、公开发行债券的发债主体、新三板上市公司、区域股权交易中心挂牌公司、非标融资机构等。

       首先我们来观察现有的数据及指标。

       本项目数据来源于kaggle竞赛Give Me Some Credit。其中训练数据共计15万条。

变量名

描述

类型

标号

SeriousDlqin2yrs

超过90天或更糟的逾期拖欠

Y/N

Y

RevolvingUtilizationOfUnsecuredLines

 

贷款以及信用卡可用额度与总额度比例

百分比

x0

age

借款人当时的年龄

整型

x1

NumberOfTime30-59DaysPastDueNotWorse

35-59天逾期但不糟糕次数

整型

x2

DebtRatio

 

负债比率

百分比

x3

MonthlyIncome

月收入

 

real

x4

NumberOfOpenCreditLinesAndLoans

开放式信贷和贷款数量,开放式贷款(分期付款如汽车贷款或抵押贷款)和信贷(如信用卡)的数量

整型

x5

NumberOfTimes90DaysLate

90天逾期次数:借款者有90天或更高逾期的次数

 

整型

x6

NumberRealEstateLoansOrLines

不动产贷款或额度数量:抵押贷款和不动产放款包括房屋净值信贷额度

整型

x7

NumberOfTime60-89DaysPastDueNotWorse

60-89天逾期但不糟糕次数:借款人在在过去两年内有60-89天逾期还款但不糟糕的次数

整型

x8

NumberOfDependents

家属数量:不包括本人在内的家属数量

整型

x9


2.1.2 数据预处理

       通过python里的describe()函数可以浏览整份数据的大致情况:

如下图:

 

图 2.1

A. 缺失值处理

       变量中如果有缺失值,针对缺失值有四种情况:

  • 缺省值极多:若缺省值样本占总数比例极高,直接舍弃,因为作为特征加入反而会引入噪声值。
  • 非连续特征缺省值适中:如果缺值的样本适中,而该属性非连续值特征属性,就把NaN作为一个新类别,加入到类别特征中。
  • 连续特征缺省值适中:如果缺值的样本适中,考虑给定一个step,然后离散化,将NaN作为一个type加入到属性类目中。
  • 缺省值较少:考虑利用填充的办法进行处理。其中有均值、众数、中位数填充;用sklearn里的RandomForest模型去拟合数据样本训练模型,然后去填充缺失值;拉格朗日插值法。

     可以看出MonthlyIncome(月收入)及NumberOfDependents(家属数量)两个变量出现了缺失值。由于MonthlyIncome缺失值达到29731条数据,比例较大,因此不能直接将缺失值删除,选择随机森林法。而NumberOfDependents的缺失较少,对数据影响不大,因此直接删除。

       使用dropna()函数删除空值,使用drop_duplicates()删除重复值。


B.异常值处理

      缺失值处理完毕后,我们还需要进行异常值处理。异常值是指明显偏离大多数抽样数据的数值,比如个人客户的年龄大于100或小于0时,通常认为该值为异常值。找出样本总体中的异常值,通常采用离群值检测的方法。 离群值检测的方法有单变量离群值检测、局部离群值因子检测、基于聚类方法的离群值检测等方法。  

       在本数据集中,采用单变量离群值检测来判断异常值,采用箱线图。

       对于age变量而言,我们认为大于100岁小于等于0岁的为异常值,由箱线图可知,异常值样本不多,故直接删除。

 

图 2.2

       对于RevolvingUtilizationOfUnsecuredLines(可用额度比值)及DebtRatio(负债率)而言,箱线图如下图:


图 2.3

      因为上述两变量的数值型为百分比,故大于1的值全部删除。

      对于变量x2(逾期30-59天笔数)、x6(逾期90天笔数)、x8(逾期60-89天笔数做箱线图,由图可知,有两异常值点,数值为96、98,删除。



图 2.4

2.2 探索数据

      探索数据主要是为了分析各变量对输出结果的影响,在本项目中,主要关注的是违约客户与各变量间的关系。

2.2.1 单变量分析

      首先来观察好坏客户的整体情况。

      

       图 2.5

        再看年龄对违约客户率的影响,由下图可知,违约客户率随着年龄增大而逐步下降。

 

图 2.6

     现在再来分析月收入对违约客户数量的影响,将月收入划分为以下几个级别:[0,5000],[5000,10000], [10000,15000],[15000,20000],[20000,100000].由下面两图可知,在20000收入之前随着收入增加,违约客户率递减,而当月收入大于20000后,违约客户率又随收入增高发生递增。

 

图 2.7

 

图 2.8

       接下来我们再分析NumberOfDependents(家属数量)与最终输出结果之间的关系。可以看出随着家庭人口增多,违约客户率呈现递增的态势。

 

图 2.9

 

图 2.10

     观察逾期30-59天次数与违约客户率之间的关系,可以看出随着违约次数增加,违约客户率呈现递增的态势。

 

图 2.11

      对数据的单变量分析就暂时处理到这里,剩余的变量也采取同样的方式进行分析。

 

2.2.2 多变量分析

      多变量分析主要用于分析变量之间的相关的程度,python中可采用corr()函数计算各变量间的相关性。由图11知,各变量间相关性较小,不存在共线性可能。

     

 

图 2.12

3. 构建模型

3.1特征选择

      特征选择非常重要,好的特征能够构造出较好的模型,至于Python的变量选择代码实现可以参考结合Scikit-learn介绍几种常用的特征选择方法在此,我们采用信用卡评分模型常用的IV值筛选。具体的IV值及WOE计算方法在下面这篇博文中有详细解释,此处就不再赘述。

3.1.1 特征分箱

      特征分箱指的是将连续变量离散化或将多状态的离散变量合并成少状态。离散特征的增加和减少都很容易,易于模型的快速迭代,离散化后的特征对异常数据有很强的鲁棒性,能够减少未离散化之前异常值对模型的干扰,同时离散化后可以进行特征交叉。此外本文所选的模型算法为逻辑回归,逻辑回归属于广义线性模型,表达能力受限;单变量离散化为N个后,每个变量有单独的权重,相当于为模型引入非线性,提升模型表达能力,加大拟合,同时也降低了模型过拟合的风险。

       特征分箱常用的有以下几种方法:有监督的有Best-KS,ChiMerge(卡分分箱),无监督的包括等频、等距、聚类。根据数据特征,针对不同数据采用不同分箱方式。代码如下:


3.1.2 WOE值计算

       定义WOE值并计算。

 


3.1.3 计算IV值

      IV的全称是Information Value,中文意思是信息价值,或者信息量。13为各变量的IV值。我们定义IV值低于0.2的特征为预测能力较弱或无关特征,因此将DebtRatio等五个变量删除。

 

图 3.1

3.2 构造模型

3.2.1 WOE值替换

        将筛选后的特征变量进行WOE转换,目的是减少逻辑回归的自变量处理量。

      

3.2.2 LR建模

      采用sklearn里的linear_model 中的LogisticRegression()来构建模型。

 

4. 模型检验

利用测试集进行测试。看到ROC如下图:

 

图 4.1

        从上图可知,AUC值为0.85,说明该模型的预测效果还是不错的,正确率较高。

5. 信用评分

      上面的模型的输出结果可以为每个客户的客户类别(好客户还是违约客户),也可以说出每个客户是好客户/违约客户对应的概率值。这种结果看起来不直观,我们需要把LR模型的结果值转化为对应的分数(0-999分)。

 


 

根据资料查得:

a=log(p_good/P_bad)

Score = offset + factor * log(odds)



 

      得出各对应特征分组分数为:

 

图 5.1

       在基础分数上对对应的分组分数加减,得出对应的评分,评分越高则违约风险越高。

 

6. 总结

       本文通过对kaggle上的Give Me Some Credit数据的挖掘分析,结合信用评分卡的建立原理,从数据的预处理、变量选择、建模分析到创建信用评分,创建了一个简单的信用评分系统。本项目还有许多不足之处,比如分箱应当使用最优分箱或卡方分箱,减少人为分箱的随机性,此外模型采用的是逻辑回归算法,还可以多多尝试其他模型。


7.  参考文献

信用卡评分模型
信用标准评分卡模型开发及实现
Python异常值处理与检测
结合Scikit-learn介绍几种常用的特征选择方法
https://cloud.tencent.com/developer/article/1092230




http://chatgpt.dhexx.cn/article/5kAhR6Mm.shtml

相关文章

信用标准评分卡模型开发及实现

一、信用风险评级模型的类型 信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用“四张卡”来表示,分别是A卡、B卡、C卡和F卡;债项评级模型通常按照主体的融资用途&#xf…

我眼中的信用评分模型

关于信用风险 之前工作中涉及到信用风险,接下来几天就分享些我在信用风险建模领域的一些经验吧~ 推荐一本比较好的资料书-《信用风险评分卡研究-基于SAS的开发与实施》,书的核心内容为以逻辑回归为基础构建信用评分模型,如果将这本书的内容理…

信用卡评分模型(数据获取+数据预处理+探索分析+变量选择+模型开发+模型评估+信用评分+建立评分系统)

最近两次遇到关于信用卡评分的题目,遂了解一波。 Reference: 基于python的信用卡评分模型(超详细!!!) https://www.jianshu.com/p/f931a4df202c https://blog.csdn.net/zs15321583801/article/details/81234446 https://blo…

信用评分模型详解(下)之 信用评分系统搭建

信用评分问题中一般使用逻辑回归作为主要的模型。过程主要包括变量分箱、变量的WOE(证据权重)变换和变量选择(IV值)、逻辑回归估算。 一个完整的评分卡流程主要包括以下几个步骤: 数据准备数据探索性分析数据预处理&…

【信用评分预测模型(一)】信用评分预测模型简介

文章目录 前言一、数据准备1.文章所使用的数据都是基于下面这两个网站:2.观察期和表现期 二、数据处理1.缺失值和异常值2.筛选数据 三、相关性检验四、特征工程1.特征变量 五、模型构建1.随机森林模型2.决策树模型3.AHP分析 总结 前言 在传统的信用风险预测的模型中…

大数据分析案例-基于多元线性回归算法构建用户信用评分模型

🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集…

【综合案例】信用评分模型开发

目录 一、案例背景二、前置知识2.1 数据分箱2.2 属性选择2.3 回归方程 三、数据处理3.1 数据清洗3.2 因素分析 四、模型训练五、模型预测六、结语后记 一、案例背景 在上一篇文章网络贷款违约预测案例中,我们在分析属性关系时发现:FICO信用评分与分类标…

信用评分模型(R语言)

信用评分 2016年1月10日 本文详细的介绍了信用评分卡的开发流程,开发语言为R语言,python版本请见:一行代码搞定信用评分模型(python) python版实例和数据请见我的github:https://github.com/chengsong990020186/CreditScoreModel,如觉得实用就点下star,欢迎大家一起…

信用评分卡模型分析(基于Python)--理论部分

信用风险计量体系包括主体评级模型和债项评级两部分。主体评级和债项评级均有一系列评级模型组成,其中主体评级模型可用“四张卡”来表示,分别是A卡、B卡、C卡和F卡;债项评级模型通常按照主体的融资用途,分为企业融资模型、现金流…

企业信用评分卡模型实战(python,附代码)

企业信用评级在全球金融领域有广泛应用。它涉及到公司管理,企业债发行,企业融资,企业上市,企业并购,个人炒股和购买公司债券等多个场景。企业债发行 企业主体信用评级越高,意味着该企业抗风险能力、盈利能力…

银行信用卡评分模型(一)| python

文章目录 背景介绍题目分析一、申请者评级模型二、欺诈评级模型三、行为评级模型四、催收评级模型总结 背景介绍 信用风险和评分卡模型的基本概念:信用风险指的是交易对手未能履行约定合同中的义务造成经济损失的风险,即受信人不能履行还本付息的责任而使…

【单片机毕业设计】【mcuclub-cl-010】基于单片机的灭火小车的设计

最近设计了一个项目基于单片机的灭火小车系统,与大家分享一下: 一、基本介绍 项目名:灭火小车 项目编号:mcuclub-cl-010 单片机类型:STC89C52、STM32F103C8T6 具体功能: 1、通过一对红外寻迹管进行寻迹&a…

详细介绍如何从零开始制作51单片机控制的智能小车(四)———通过蓝牙模块实现数据传输以及通过手机蓝牙实现对小车运动状态的控制

我会通过本系列文章,详细介绍如何从零开始用51单片机去实现智能小车的控制,在本系列的上一篇文章中介绍了如何让小车实现自动避障,本文作为本系列的第四篇文章,主要介绍蓝牙模块的使用,如何通过蓝牙进行数据传输&#…

课设-基于51单片机的智能小车(循迹+避障+APP控制)

51单片机课设—智能小车 一、课设任务二、硬件设计及相关传感器模块1、车模2、51单片机3、红外循迹模块4、电机及驱动5、蓝牙模块6、硬件搭建 三、程序代码1、main.c文件2、motor.c文件 四、我的大学--“造车”史 注:本设计资源可在微信公众号:“Kevin的…

基于51单片机智能小车循迹功能的实现

基于51单片机智能小车循迹功能的实现 目录 基于51单片机智能小车循迹功能的实现一、思路(仅供参考)二、部分硬件模块介绍1、L298n电机驱动模块2、两路红外循迹模块 三、实现1、代码2、运行视频(...注意:该视频有声音!!…

基于51单片机的循迹小车

在大学期间,单片机是部分学生的专业课之一,在学完课本上枯燥的知识后,需要实践加强巩固。简单且综合性尚可的循迹小车必然是实践的首要选择。下面将主要从机械、电控、代码三个部分对以51单片机为主控芯片的循迹小车进行简述 目录 1.总体介…

51单片机智能蓝牙小车

作为大一电子小趴菜,在和队友学习制作蓝牙小车过程中遇到了许多困难。本文既为大家避坑,也作为团队总结。 这篇文章分为两部分 1,组装篇 2,代码篇 思维导图: 组装篇 先准备好一块电源拓展板,用于为电机驱…

浅谈51单片机简易循迹小车制作方案

目录 省流助手(方案清单) 前言 一、小车模型 二、电机 三、电源 1、电池: 2、PCB电源选择: 3、MCU供电方案: 4、MCU和电机的供电方案: 四、主控MCU最小系统 五、电机驱动 1、让电机动起来:&…

基于51单片机制作的蓝牙小车

基于51单片机制作的蓝牙小车 这是本人(小菜鸡一枚)于大一寒假所做的小玩意,以展现我这几月所学,这也是我发的第一篇博客,准确来说这可能是我搞51单片机的巅峰所做了,因为部长说以后要学stm32开发板了&…

【项目实战】基于STM32单片机的智能小车设计(有代码)

【1】背景意义 近些年随着国民生活水平的提升,以小车为载体的轮式机器人进入了我们的生活,尤其是在一些布线复杂困难的安全生活区和需要监控的施工作业场合都必须依赖轮式机器人的视频监控技术。因此,基于嵌入式技术的无线通信视频监控轮式机…