代码+数据集+PPT 获取方式
关注微信公众号 datayx 然后回复 风控 即可获取。
随着人工智能和大数据等技术不断渗透,依靠金融科技主动收集、分析、整理各类金融数据,为细分人群提供更为精准的风控服务,成为解决消费金融风控问题的有效途径。简言之,如何区别违约风险用户,成为金融领域提供更为精准的风控服务的关键。
基于本赛题,大数据金融的违约用户风险预测,本文解决方案具体包括以下步骤:
1.对用户的历史行为数据预处理操作;
2.根据历史行为划分训练集数据、验证集数据;
3.对用户历史数据进行特征工程操作;
4.对构建特征完成的样本集进行特征选择;
5.建立多个机器学习模型,并进行模型融合;
6.通过建立的模型,根据用户历史行为数据对用户在未来一个月是否会逾期还款进行预测。
其中,图1展示了基于大数据金融的违约用户风险预测解决方案的流程图。
1.异常值处理:针对数据中存在未知的异常值,采取直接过滤的方法进行处理会减少训练样本数量,从这里出发,将异常值用-1或者其他有区别于特征正常值的数值进行填充;
2.缺失值的多维度处理:在征信领域,用户信息的完善程度可能会影响该用户的信用评级。一个信息完善程度为100%的用户比起完善程度为 50%的用户,会更加容易审核通过并得到借款。从这一点出发,对缺失值进行了多维度的分析和处理。按列(属性)统计缺失值个数,进一步得到各列的缺失比率,按对数据进行多维度处理,其中为数据集中某属性列缺失值个数,C为样本集总数,为数据集中该属性列缺失率:
3.其他处理:空格符处理,某些属性取值包含了空格字符,如“货到付款”和“货到付款 ”,它们明显是同一种取值,需要将空格符去除;城市名处理,包含有“重庆”、“重庆市”等取值,它们实际上是同一个城市,需要把字符中的“市”全部去掉。去掉类似于“市”的冗余之后,城市数目大大减少。
根据用户历史数据,统计违约数量和未违约数量跟时间周期的关系,可视化实现如下图所示:
图2 违约数量和未违约数量跟时间周期的关系图
可以看出,时间对用户是否违约是成一定周期性的,且2017年明显比2016年的数量增加了很多,因此本文解决方案涉及很多时序特征。
对违约用户风险预测是一个长期且累积的过程,采取传统的按训练和测试集对应时间段滑窗法划分数据集并不是最佳方案,从这里出发,将历史用户数据全部用于训练集,更好的训练用户行为习惯,其中,验证集的构建采取交叉验证的方式,交叉验证如下图所示:
主要基于auth、credit、user表提取,这三张表的id没有重复。
(1)标记auth表的Id_card、auth_time、phone是否为空;标记credit表的credit_score、overdraft、quota是否为空;标记user表的sex、birthday、hobby、merriage、income、id_card、degree、industry、qq_bound、wechat_bound、account_grade是否为空。
(2)标记auth表的Id_card、auth_time、phone是否正常(不为空);标记credit表的credit_score、overdraft、quota是否正常(不为空);标记user表的sex、birthday、hobby、merriage、income、id_card、degree、industry、qq_bound、wechat_bound、account_grade是否正常(不为空)。
主要基于auth、credit、user表提取,标记这三张表每条样本的信息完整度,定义为该条样本非空的属性数目/总属性数目。
主要基于user表提取。
One-hot离散user表的sex、merriage、income、degree、qq_bound、wechat_bound、account_grade属性。
基于业务逻辑提取的特征,最有效的特征,主要基于credit、auth、bankcard、order表提取。
(1)用户贷款提交时间(applsbm_time)和认证时间(auth_time)之差
(2)用户贷款提交时间(applsbm_time)和生日(birthday)之差
(3)信用评分(credit_score)反序
(4)信用额度未使用值(quota减overdraft)
(5)信用额度使用比率(overdraft除以quota)
(6)信用额度使用值是否超过信用额度(overdraft是否大于quota)
(7)银行卡(bankname)数目
(8)不同银行的银行卡(bankname)数目
(9)不同银行卡类型(card_type)数目
(10)不同银行卡预留电话(phone)数目
(11)提取order表的amt_order次数、type_pay_在线支付、type_pay——货到付款、sts_order_已完成次数,按id对order表去重,保留id重复的第一条样本
特征工程部分,构建了一系列基础特征、时序特征、业务特征、组合特征和离散特征等,所有特征加起来高达数百维,高维特征一方面可能会导致维数灾难,另一方面很容易导致模型过拟合。从这一点出发,通过特征选择来降低特征维度。比较高效的是基于学习模型的特征排序方法,可以达到目的:模型学习的过程和特征选择的过程是同时进行的,因此我们采用这种方法,基于 xgboost 来做特征选择, xgboost 模型训练完成后可以输出特征的重要性(见图2),据此我们可以保留 top n 个特征,从而达到特征选择的目的。
本文共计四个xgb模型,分别进行参数扰动、特征扰动,单模型效果均通过调参和特征选择,保证单模型最优,按四个模型不同比例融合,最终生成模型结果。
原始数据集很多属性比较乱,清洗了例如日期这样的属性方便特征提取;加入了信息完整度特征,很好地利用到了含有空值的样本;对于order这个id含有重复的样本,尝试了提取特征后按时间去重和按第一条和最后一条去重,发现按第一条去重效果是最好的,很好地使用到了order的信息;通过特征的重要性排序筛选了特征,也发现了提取的业务相关的特征是最重要的。
模型的创新点主要体现在模型融合上。考察指标为AUC,侧重于答案的排序。在进行加权融合时,先对每个模型的结果进行了归一化,融合效果很好。
清洗数据非常重要,像时间这样的属性非常乱,处理起来也比较麻烦,我们只是简单地进行了处理,如果能够更细致的处理效果应该更好;某些属性,例如hobby,内容太复杂没有使用到,但这个属性肯定包含了许多有价值的信息,但遗憾没有发现一个好的处理方式。