个人征信预测

个人征信预测

                 --数据分析项目报

一、项目概述

   通过脱敏的现有数据,如:用户基本身份信息,消费行为,银行还款等,进行数据处理特征,选取并建立逾期预测模型,预测用户是否会逾期还款。

二、项目概述数据解读

训练集:
用户的基本属性 user_info_train.txt
银行流水记录 bank_detail_train.txt
用户浏览行为 browse_history_train.txt
信用卡账单记录 bill_detail_train.txt
放款时间 loan_time_train.txt
顾客逾期记录 overdue_train.txt

测试集:
用户的基本属性 user_info_test.txt
银行流水记录 bank_detail_test.txt
用户浏览行为 browse_history_test.txt
信用卡账单记录 bill_detail_test.txt
放款时间 loan_time_test.txt
测试用户 usersID_test.txt

三、数据预处理

1、导入各表,观察有无缺失值及用户id数:

发现用户信息表,是否逾期表,放款时间表这三张表的id数目都是55,596,银行流水表为9,294,浏览信息表为47,330,信用卡账单表为53,174。

通过用户id数得到:并非每个用户都有银行流水记录、信用卡账单等信息,所以,取6个表共同用户的记录筛选后组成完整的表。

2、进一步筛选,加入时间范围:

逾期定义:是否逾期是在放款时间那一天之后开始计算的,放款时间之后三十天以上没有还款将视为逾期。
因为要预测的测试集都是还没有放款的用户特征,所以训练数据也只选取放款时间之前的特征。
在这里插入图片描述

将存在时间戳的表与放款时间表进行交叉,只筛选此时间范围内的用户id。

3、筛选出6张表共有的用户id:

通过上面各个表的信息情况,可以看到除了放款时间表外有时间字段的是银行流水记录表、账单记录表、浏览信息表。
(1) 筛选符合条件的《银行流水记录表》的用户id,筛选出“流水时间”<“放款时间”的记录;
(2) 用户id去重(drop_duplicates());
(3)同理,处理《账单记录表》、《浏览信息表》;
(4) 筛选出这6张表共有的用户id(实际为上述的三张表共同的用户id即可,pd.merge()。
(5)得出5735个用户的记录是完整的。然后通过这5735个id筛选每张表的记录,并进行字段预处理。

4、字段预处理:

(1)银行记录表
A,先筛选出id为‘user2’的记录,根据收入,支出以及工资这三个字段的交易类型进行筛选,并按id进行分组统计,每个分组中生成新的变量;
B,将生成的字段分别与user2 id交叉组合到一起,由于是分组统计生成的字段,分组外用户id对应的数据是缺失的,这里缺失的数据全部填0;
C,将填充完整的六个字段组合到一起。

在这里插入图片描述
(2)账单信息表
去掉了时间、银行id、还款状态这几个变量,按用户id分组,对每个字段进行均值化处理。
(3)浏览记录表
去掉浏览子行为这个变量,对浏览行为数据变量作了按用户id做分组计数统计。
(4)对剩下的用户信息表和逾期记录表筛选;
(5)将筛选后的五个表进行合并。
至此,剩余25个特征字段。

四、特征工程

相关系数矩阵(计算相关性(.corr()):

(1)银行流水记录特征

个人征信预测_第1张图片

可以看出收入/支出/工资的笔数和金额数目是线性关系,同时收入支出相关性同样较强。
这样,我们保留支出笔数、支出金额、工资笔数、工资金额这四个特征,并且利用这四个特征重新创建两个新的特征:每笔支出平均金额expen_avg=支出金额/支出笔数,每笔工资平均收入wages_avg=工资金额/工资笔数。

(2)信用卡特征记录
个人征信预测_第2张图片
可以看出上期账单金额last_bill_amount和上期还款金额last_repay_amount、
本期账单余额cur_bill_bal 和本期账单最低还款额 cur_bill_minrepay、
上期还款金额last_repay_amount和本期账单金额cur_bill_amount
的相关性较强。

还款公式:

本期应还金额 = 上期账单金额-上期还款金额 + 本期账单金额 - 本期调整金额 + 循环利息

根据上期还款金额的多少将上式分为三种情况:
上期还款金额 (或者没还)<上期账单的最低还款额,就视为逾期,而且本期的还款要加上循环利息和上期未还款的那部分
上期最低还款额<上期还款金额<上期账单金额,不视为逾期,但本期的还款要加上循环利息和上期未还款的那部分
上期还款金额 >上期账单金额,也就是说用户还多了,那么本期的还款会减去一个调整金额(多还的那部分),循环利息和上期未还的部分也就为0。
由此也解释了上期还款金额last_repay_amount和本期账单金额cur_bill_amount的相关性较强。

综合以上筛选下信用卡记录的特征:

针对上期账单金额last_bill_amount和上期还款金额last_repay_amount引入一个新特征:上期还款差额 =上期账单金额 - 上期还款金额;
信用额度,字面上感觉与还款是否逾期相关性比较大,所以先保留;
本期的账单余额与最低还款额具有高度共线性,决定只选用最低还款额;
消费笔数,目前来看与其他特征相关性均不高,所以先保留;
本期账单金额,根据还款公式可知会影响本期应还金额,所以先保留;
调整金额和循环利息是跟“上期的还款差额”有关的:
还款差额>0,需要计算循环利息,调整金额不计
还款差额<0,需要计算调整金额,循环利息不计
所以可以将还款差额进行“特征二值化”来代替这两个特征0表示有调整金额,1表示有循环利息,引入新特征last_diff_label

可用余额

信用额度-未还清的已出账金额-已使用未入账的累积金额

应该跟信用额度相关性较大,但是在图中相关性与其他几个特征均存在较弱关系,所以暂时先保留;
预借现金额度,是指持卡人使用信用卡通过ATM等自助终端提取现金的最高额度,取现额度包含于信用额度之内,一般是信用额度的50%左右,通过图中也可以看出跟信用额度等相关性较强,所以可以不用这个特征,选择信用额度即可。
最后,筛选剩下的信用卡记录特征还有:last_repay_diff(上期还款差额),credit_amount,cur_bill_minrepay,cur_bill_amount、cons_num、avail_bal、last_diff_label(上期差额标签)这7个特征。
剩下用户信息和用户浏览行为的特征先保留观察。

特征整理

个人征信预测_第3张图片

整理特征,并添加新特征“上期差额标记(last_diff_label)”。其中,用户属性的几个特征和上期差额标记为分类数据,其他9个位连续型数值变量。

个人征信预测_第4张图片

特征过滤

用Filter法和Wrapper法对特征进行过滤,分别选取性能最好的5个特征进行交叉检验,再综合判断使用哪个模型。
(1)Filter方差分析
筛选的结果为:‘sex’ ,‘job’, ‘expen_avg’, ‘wages_avg’, 'cur_bill_minrepay’为5个F值(组间方差/组内方差)最大的变量。
(2)Wrapper
使用递归消除特征法,使用一个基模型来进行多轮训练,每轮训练后,消除若干权值系数的特征,再基于新的特征集进行下一轮训练。使用feature_selection库的RFE类(递归特征消除Recursive feature elimination )来选择特征。
筛选的结果为:
‘expen_avg’, ‘last_repay_diff’, ‘credit_amount’, ‘cur_bill_minrepay’, ‘brows_beh’
可以看出两个方法,除了特征expen_avg、cur_bill_minrepay,其他选择的特征都不同,且Wrapper法选择的都是连续型变量。

(3)交叉验证
filter法结果为:0.23976097225177595,Wrapper法结果为:0.24132633413428106,
交叉检验的结果表明还是用Filter法好一点。

六、建模

模型选择1

既然筛选的5个特征既有分类型,又有连续型,用决策树最合适。
因为ID3和C4.5不能处理连续型数据,必须转换成离散型,所以,采用CART决策树。
模型结果评价:

个人征信预测_第5张图片

精确率0.82,召回率0.86,f1_score为0.81

模型选择2

将特征变量缩减成Filter法得到的那5个变量:
模型结果评价:
精确率0.84,召回率0.86,f1_score为0.81,可见,精确度有提高。

你可能感兴趣的:(python,python)