数据挖掘实战:个人信贷违约预测

您所在的位置:网站首页 信用贷大数据分析报告 数据挖掘实战:个人信贷违约预测

数据挖掘实战:个人信贷违约预测

2024-07-14 22:02| 来源: 网络整理| 查看: 265

我是小z

本次分享一个数据挖掘实战项目:个人信贷违约预测,此项目对于想要学习信贷风控模型的同学非常有帮助,数据源在文末。

项目背景

当今社会,个人信贷业务发展迅速,但同时也会暴露较高的信用风险。信息不对称在金融贷款领域突出,表现在过去时期借款一方对自身的财务状况、还款能力及还款意愿有着较为全面的掌握,而金融机构不能全面获知借款方的风险水平,或在相关信息的掌握上具有明显的滞后性。这种信息劣势,使得金融机构在贷款过程中可能由于风险评估与实际情况的偏离,产生资金损失,直接影响金融机构的利润水平。

而现今时间金融机构可以结合多方数据,提前对客户风险水平进行评估,并做出授信决策。

解决方法

运用分类算法预测违约

模型选择

单模型: 决策树、贝叶斯、SVM等集成模型: 随机森林、梯度提升树等评分卡模型: 逻辑回归项目可输出: 评分卡

数据描述 数据总体概述

可用的训练数据包括用户的基本属性user_info.txt、银行流水记录bank_detail.txt、用户浏览行为browse_history.txt、信用卡账单记录bill_detail.txt、放款时间loan_time.txt,以及这些顾客是否发生逾期行为的记录overdue.txt。(注意:并非每一位用户都有非常完整的记录,如有些用户并没有信用卡账单记录,有些用户却没有银行流水记录。)

相应地,还有用于测试的用户的基本属性、银行流水、信用卡账单记录、浏览行为、放款时间等数据信息,以及待预测用户的id列表。

脱敏处理:(a) 隐藏了用户的id信息;(b) 将用户属性信息全部数字化;(c) 将时间戳和所有金额的值都做了函数变换。

(1)用户的基本属性user_info.txt。共6个字段,其中字段性别为0表示性别未知。

用户id,性别,职业,教育程度,婚姻状态,户口类型   6346,1,2,4,4,2

(2)银行流水记录bank_detail.txt。共5个字段,其中,第2个字段,时间戳为0表示时间未知;第3个字段,交易类型有两个值,1表示支出、0表示收入;第5个字段,工资收入标记为1时,表示工资收入。

用户id,时间戳,交易类型,交易金额,工资收入标记   6951,5894316387,0,13.756664,0

(3)用户浏览行为browse_history.txt。共4个字段。其中,第2个字段,时间戳为0表示时间未知。

用户id,时间戳,浏览行为数据,浏览子行为编号   34724,5926003545,172,1

(4)信用卡账单记录bill_detail.txt。共15个字段,其中,第2个字段,时间戳为0表示时间未知。为方便浏览,字段以表格的形式给出。

(6)顾客是否发生逾期行为的记录overdue.txt。共2个字段。样本标签为1,表示逾期30天以上;样本标签为0,表示逾期10天以内。

注意:逾期10天~30天之内的用户,并不在此问题考虑的范围内。用于测试的用户,只提供id列表,文件名为testUsers.csv。

用户id,样本标签   1,1   2,0   3,1

各个数据表之间的关系 数据预处理

从表中数据得知并非每一位用户都有非常完整的记录,如有些用户并没有信用卡账单记录,有些用户却没有银行流水记录。

发现用户信息表,是否逾期表,放款时间表这三张表的id数目都是55,596,银行流水表为9,294,浏览信息表为47,330,信用卡账单表为53,174。通过用户id数得到并非每个用户都有银行流水记录、信用卡账单等信息,所以这里我们取6个表共同用户的记录筛选后组成完整的表。

我们要预测的测试集都是还没有放款的用户特征,所以训练数据这里我们也选取放款时间之前的特征,将存在时间戳的表与放款时间表进行交叉,只筛选此时间范围内的用户id。

筛选出这6张表共有的用户id,得出5735个用户的记录是完整的。

user.T 银行账单表 bank_detail_select = pd.merge(left=df_bank_detail_train,                                right=user,                                how='inner',                                on='用户id') 统计用户进账单数,求和 统计用户支出单数,求和 统计用户工资收入计数,求和 银行账单表 bank_train.head() 浏览表

先剔除5735以外的数据,再统计每个用户的浏览记录(count)

browse_train.head() 账单表

去掉了时间、银行id、还款状态这几个变量,按用户id分组后对每个字段均值化处理。

逾期表、用户表 合并五张表

将筛选后的五个表进行合并,得出25个字段

df_train=user_train.merge(bank_train) df_train=df_train.merge(bill_train) df_train=df_train.merge(browse_train) df_train=df_train.merge(overdue_train) df_train.head()

查看完整表格的基本情况,无缺失值,均是数值类型。

df_train.info() 特征工程 基于业务理解的筛选 银行流水记录特征相关性分析 # 相关性结果数据表 corrmat=bank_train[internal_chars].corr()   #热力图 sns.heatmap(corrmat, square=True,              linewidths=.5, annot=True); 

'进账单数'与'进账金额'的相关系数很高,相关系数为0.99

'支出单数', '支出金额'的相关性较高,相关系数分别为0.82,0.85

'进账金额'与'支出单数', '支出金额'的相关性较高,相关系数分别为0.81,0.85

'支出单数'与 '支出金额'的相关性很高,相关系数为0.99

'工资笔数'与'工资收入'相关系数为1

可见收入、支出、工资三个指标的金额跟笔数是线性关系,那么后续将构建一个新的特征:笔均=金额/笔数,取工资笔均;而且收入、支出是强相关(0.82),所以只取一个即可,支出笔均。

后续将用'进账金额/进账单数','支出金额/支出单数','工资收入/工资笔数'得到'进账笔均','支出笔均','工资笔均'

总表相关性分析 # 相关性结果数据表 corrmat=df_train[internal_chars].corr() # 热力图 sns.heatmap(corrmat, square=False,              linewidths=.5, annot=True);  

'本期账单金额'与'本期账单余额'相关系数为0.85

'上期账单金额'与'上期还款金额'相关系数为0.75

'本期账单金额'与'上期还款金额'相关系数为0.64

'信用卡额度'与'上期账单金额'和'上期还款金额'相关系数分别为0.54和0.52

'本期账单金额'与'上期账单金额'相关系数为0.5

本期的账单余额与最低还款额具有高度共线性,决定只选用最低还款额。

生产衍射变量

上期还款差额 =上期账单金额 - 上期还款金额, 上期还款差额还会直接影响用户的信用额度以及本期的账单金额。

调整金额和循环利息是跟“上期的还款差额”有关的:

还款差额>0,需要计算循环利息,调整金额不计

还款差额



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3