某农商行用户画像项目——数据预处理部分

一、项目背景及目的

1.1 项目背景

随着我国经济飞速发展,信用贷款业务逐渐发展,信贷客户的信用风险管理问题逐渐受到人们的广泛关注,传统的信用征信虽然能在一定程度上减少风险隐患,但在信息获取的及时性、全面性上明显存在短板。随着互联网迅猛发展,大数据、用户画像等新技术应用,为银行等财富管理机构识别优质客户和融通资金、降低信贷风险,开拓了新的思路和方法。

1.2 项目目的

本项目基于用户的贷款逾期数据、征信数据、消费金融数据,通过对数据的多维度、精细化、关联性的挖掘,来构建用户画像,并对用户分群,识别优质客户与高风险用户,为银行提供贷后本息催收过程的风险识别与控制。

1.3 数据说明

数据包含征信数据、百度金融数据以及用户在商行一段时间内的贷款逾期数据:

  • 征信数据共63个字段约65000条记录
  • 贷款数据共60个字段约61500条记录,逾期数据共13个字段约10000条记录,循环贷共66个字段约1700条记录。客户贷款信息表和逾期信息表都是借据层的原始数据,需要一定逻辑的计算汇总之后才是客户级的数据;循环贷为客户级数据,数据量较小,里面已经标注了好坏客户标签,无需再匹配。
  • 百融数据包括房贷、消费贷以及循环贷数据,涉及领域丰富,内容多样化,但部分字段缺失严重。
    项目分析中以贷款和逾期数据为主,其余数据为辅。
    其中各类数据如图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

二、业务与数据理解

主要结合业务理解数据,并观察各字段数据的特征。
针对不同类型数据采取不同方法:

  • 数值型:分布特征分析
  • 类别型:占比分析
  • 时间数据:时序分析(变化特征)

2.1 贷款、逾期数据

2.1.1 贷款数据

# 载入数据
loan_data = pd.read_excel('昆山农商行数据/贷款、逾期数据/1客户贷款信息宽表_20170510.xlsx',na_values=['(null)','无','未知'])
loan_data.head() # 查看前5行数据
loan_data.info() # 查看数据质量

在这里插入图片描述
总共60个字段,籍贯、户籍等一些字段值缺失严重。

类别型数据分析(占比分析)示例:

# 绘制饼图
loan_data.groupby(loan_data['客户类型']).count().标识码.plot(kind='pie',figsize=(8,8),autopct='%1.1f%%')

时间型数据分析(时序分析)示例:

# 绘制折线图
loan_data.groupby(loan_data['申请时间']).count()['借据编号——唯一标识'].plot(figsize =(12,8))
# 贷款时间大部分是2015-2016年

数值型数据分析(分布分析)示例:

# 涉及金额的数据(二八定律——帕累托分布)取对数再看分布
sns.distplot(np.log(loan_data[loan_data['职业收入(元)']>0]['职业收入(元)'].dropna()), kde=False,color='blue',bins=200)

贷款数据唯一标志识别:

# 查看唯一标志
len(loan_data),len(loan_data['借据编号——唯一标识'].unique())

存在问题:'借据编号——唯一标识’字段存在重复值,即数据说明中提到的客户贷款信息表是借据层的原始数据,需要一定逻辑的计算汇总之后才是客户级的数据。通过统计同一借据编号下出现多个值的字段来分析具体原因。

# 分析"借据编号——唯一标识"不唯一的原因
from collections import defaultdict
from tqdm import tqdm
d_result_dict = defaultdict(int)
for d_id in tqdm(loads_duplicated_data['借据编号——唯一标识'].unique()):
    d_data = loan_data[loan_data['借据编号——唯一标识'] == d_id]
    for d_data_col in d_data.columns:
        if len(d_data[d_data_col].unique())>1:
            d_result_dict[d_data_col] += 1
d_result_dict

在这里插入图片描述
结论: 根据分析结果,借据编号不唯一的原因是同一个借据编号,由于抵押物认定价值的变化,银行更新数据导致的。

2.1.2 逾期数据

overdue_data = pd.read_excel('昆山农商行数据/贷款、逾期数据/2客户逾期信息宽表.xlsx', na_values=['(null)','无','未知'])
overdue_data.head()
overdue_data.info()

在这里插入图片描述

# 查看有多少个借据存在逾期现象
len(overdue_data),len(overdue_data['借据编号'].unique())

在这里插入图片描述
逾期数据量较少,其中应还本金、应还利息等几个字段缺失值较多。在总共6万余个借据中,有3745个借据出现过逾期现象。

时间型数据分析(时序分析):
贷款数据时序分析结果
逾期数据时序分析结果
可以发现,与贷款数据中时序分析结果差异较大,贷款数据中借据申请时间大多集中在2015-2016年(近期),而逾期数据中借据大多为申请时间较早,2008-2011年期间多。这个现象很容易从业务场景去理解,假设某个人每年的逾期概率相同,时间周期越长,其发生逾期的概率越高:1-(1-p)^n

# 看一下逾期时间的分布
overdue_data.groupby(overdue_data['逾期时间']).count().借据编号.plot(figsize =(12,8))

在这里插入图片描述
结果表明,逾期时间大多集中在2016-2017年,结合业务可以发现,早期的逾期事件都已经由平台处理掉了。

贷款数据唯一标志识别:

# 查看唯一标志
len(overdue_data),len(overdue_data['借据编号'].unique()) 

存在问题:'借据编号——唯一标识’字段存在重复值,与贷款数据一致,通过统计同一借据编号下出现多个值的字段来分析具体原因。
在这里插入图片描述
结论: 根据分析结果,借据编号不唯一的原因是同一个借据编号,可能因为多次还款或反复逾期产生多条数据,导致不唯一。

2.1.3 循环贷数据

查看循环贷数据与贷款数据关联性:

# 查看循环贷数据与贷款数据关联性
re_loan_data = pd.read_excel('昆山农商行数据/贷款、逾期数据/3循环贷宽表.xlsx', na_values=['(null)','无','未知'])
loan_data_merge = pd.merge(loan_data,re_loan_data, left_on=['标识码'], right_on=['CUS_ID'], how='inner')
len(loan_data['标识码'].unique()), len(re_loan_data['CUS_ID'].unique()), len(loan_data_merge['标识码'].unique())

在这里插入图片描述
结论: 循环贷对应的1692个客户均能匹配到贷款数据中,也就是说贷款数据已经包含了循环贷数据信息,因此舍弃该数据。

2.2 征信数据

2.1.1 征信数据

# 载入数据
credit_data = pd.read_excel('昆山农商行数据/昆山农商行征信数据/征信数据201704前.xlsx', na_values=['(null)','缺失','--'])
credit_data.head() # 查看前5行数据
credit_data.info() # 查看数据质量

在这里插入图片描述

# 查看唯一标志
len(credit_data),len(credit_data['客户标识码'].unique())

在这里插入图片描述
征信数据存在的问题:

  • 征信数据以记录客户违约记录为主,所以大量字段为空值
  • 数据缺乏时间戳,且信息冗余度较高(一个客户具有多条征信数据)
    因此数据预处理时考虑针对同一个客户直接通过取median的方式对数值型字段去重、取众数对类别型变量去重。

2.1.2 征信查询数据

# 数据读取
credit_query_data = pd.read_excel('昆山农商行数据/昆山农商行征信数据/征信查询201704前.xlsx', na_values=['(null)','缺失','--'])
credit_query_data.head()
credit_query_data.info()

在这里插入图片描述

# 查看数据时间跨度
credit_query_data['id'] = credit_query_data.index
credit_query_data.groupby(pd.to_datetime(credit_query_data['查询日期']).dt.date).count().id.plot(figsize =(12,8))

在这里插入图片描述
数据存在的问题: 1、缺少单次查询的唯一标识,无法与其余数据匹配;2、时间跨度为2016.12-2017.05,和贷款逾期时间重合较少。综合以上原因,舍弃此数据。

2.3 百融数据

2.1.1 征信数据

# 数据读取
bairong_data10 = pd.read_excel('昆山农商行数据/百融数据/1-0 房贷_百融评分、风险规则、审批建议.xlsx', na_values=['.'])
# 数据读取
bairong_data20 = pd.read_excel('昆山农商行数据/百融数据/2-0 消费贷_百融评分、风险规则、审批建议.xlsx', na_values=['.'])
# 数据读取
bairong_data30 = pd.read_excel('昆山农商行数据/百融数据/3-0 循环贷_百融评分、风险规则、审批建议.xlsx', na_values=['.'])

分别与贷款数据进行连接,查看有多少数据能够匹配到贷款数据:

# 数据连接示例:
loan_data_merge = pd.merge(loan_data,bairong_data10, left_on=
  • 8
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值