车辆贷款违约预测 Top1(2021科大讯飞)
共 3855字,需浏览 8分钟
·
2022-04-18 14:09
向AI转型的程序员都关注了这个号👇👇👇
机器学习AI算法工程 公众号:datayx
随着监管政策步入关键落地期,受合规监管标的限额影响,曾备受追捧的大额标的逐渐消失,小额分散的车贷业务成为网贷平台转型的主要方向之一。车贷资产由于进入门槛低、借款额度低、流动性高、限期短等优点,但做好风险防控依然是行业的主要问题之一。
国内某贷款机构就面临了这样的难题,该机构的借款人往往拖欠还款或拒不还款,导致该机构的不良贷款率居高不下。面对如此头疼的问题,该机构将部分贷款数据开放,诚邀大家帮助他们建立风险识别模型来预测可能违约的借款人(敏感信息已脱敏)。
任务
给定某机构实际业务中的相关借款人信息,包含53个与客户相关的字段,其中loan_default字段表明借款人是否会拖欠付款。任务目标是通过训练集训练模型,来预测测试集中loan_default字段的具体值,即借款人是否会拖欠付款,以此为依据,降低贷款风险。
数据说明
总数据量超过25w,包含52个特征字段。
可以看到,这个做的是车贷违约预测问题,参赛选手们需要建立风险识别模型来预测可能违约的借款人。数据量的话还是可以的,其中 训练集15w,测试集3w
包含52个特征字段,各个字段主办方也是给了相应的解释
评估指标:F1 Score
所以,其实可以很快的写出一个baseline来。
解题思路
这种偏数据挖掘的比赛的关键点在于如何基于对数据的理解抽象归纳出有用的特征,因此,我一开始做的时候,并没有想着说去套各种高大上的模型,而是通过对数据的分析去构造一些特征。如果不想往后看代码的话,我在这一章节会简单把我的整个方案讲一下:
正负样本分布:可以看到这道题的正负样本比为 82:18 这样,在风控里面其实已经属于正负样本分布较为平衡的数据了,所以我在比赛中,并没有刻意的去往正负样本不平衡这块去做,有做了一些过采样的尝试,但效果反而不增反降
特征工程:
首先我一开始就发现有很多ID类的特征,然后我就基于这些ID类特征做了一些target encoding特征,这些简单的特征 + 树模型就已经0.583了,能让我前期一直处在Top 10;
而后,从业务角度构造了一些诸如:主账户和二级账户的年利率特征(因为往往银行的利率表现了其对用户的信用预测);从数据分布角度对一些金额类的特征做了些分箱操作;再从特征本身的有效性和冗余角度出发,剔除了一些毫无信息量的特征,比如贷款日期等。这时,我们可以做到0.587这样的水平;
然后,在一次误打误撞的模型训练时,我误把客户ID放进模型中去训练了,结果我发现似乎还对模型性能有一定提升?那我这时候的想法是:这一定是由于欺诈有些集中性导致的,黑产可能在借贷银行(where)或借贷时间(when)上存在一定的集中性,而这种集中性一方面可以通过branch_id/supplier_id/manufacturer_id等反映出来,另一方面,本身客户的customer_id也是可以体现时间上的集中性,因此,我又基于这个点构造了近邻欺诈特征,这时候我们就能做到0.589了;
模型选取:
正负样本分布:可以看到这道题的正负样本比为 82:18 这样,在风控里面其实已经属于正负样本分布较为平衡的数据了,所以我在比赛中,并没有刻意的去往正负样本不平衡这块去做,有做了一些过采样的尝试,但效果反而不增反降
特征工程:
首先我一开始就发现有很多ID类的特征,然后我就基于这些ID类特征做了一些target encoding特征,这些简单的特征 + 树模型就已经0.583了,能让我前期一直处在Top 10;
而后,从业务角度构造了一些诸如:主账户和二级账户的年利率特征(因为往往银行的利率表现了其对用户的信用预测);从数据分布角度对一些金额类的特征做了些分箱操作;再从特征本身的有效性和冗余角度出发,剔除了一些毫无信息量的特征,比如贷款日期等。这时,我们可以做到0.587这样的水平;
然后,在一次误打误撞的模型训练时,我误把客户ID放进模型中去训练了,结果我发现似乎还对模型性能有一定提升?那我这时候的想法是:这一定是由于欺诈有些集中性导致的,黑产可能在借贷银行(where)或借贷时间(when)上存在一定的集中性,而这种集中性一方面可以通过branch_id/supplier_id/manufacturer_id等反映出来,另一方面,本身客户的customer_id也是可以体现时间上的集中性,因此,我又基于这个点构造了近邻欺诈特征,这时候我们就能做到0.589了;
模型选取:
前期,我一直是用的LightGBM,然后也没有很仔细的去调参(比如hyperopt/optuna等工具,我都没有用),就很随意(平平无奇的手动调参小天才)
后期,我开始尝试其他的XGBoost/CatBoost/TabNet等模型,但是发现CatBoost和TabNet效果都不是很好,就没有深入往下去钻了(主要白天还是要上班的,因此精力有限,说是摸鱼打比赛,但更准确的说是 熬夜打比赛)
阈值选取:由于该题是用F1 Score作为评判标准的,因此,我们需要自己划一个阈值,然后决定哪些样本预测为正样本,哪些样本预测为负样本。在尝试了不同方案后,我们的方案基于oof的预测结果,选出一个在oof上表现最优的阈值,此时在榜上的效果是最佳的(千分位的提升)
融合策略:最后选定了两个模型来融合,一个是LightGBM,一个是XGBoost(哈哈哈,就很土有没有),然后,直接按预测概率加权融合的话效果是比较一般的,而按照其ranking值分位点化之后再加权融合效果会更好。效果而言,单模LGB最优是0.5892,XGB是在0.5872这边,按照概率加权最优是0.59011,按照排序加权最优是0.59038
其实主要思路和方案,就如同上述文字所描述的了。但看起来总是干巴巴的,如果你还对代码有兴趣的话,可以继续往下看。毕竟 Talk is Cheap, :)
代码详解
全部代码,数据集获取方式:
关注微信公众号 datayx 然后回复 车贷 即可获取。
特征工程
target encoding/mean encoding,这里要注意的是,为了防止过拟合,需要分折来做
年利率特征/分箱等特征:
近邻欺诈特征(ID前后10个近邻的欺诈概率,其实可以更多不同尝试寻找最优的近邻数,但精力有限哈哈)
最终我只选取了47维特征:
模型训练
LightGBM(十折效果更优)
XGBoost
模型融合与阈值选取
机器学习算法AI大数据技术
搜索公众号添加: datanlp
长按图片,识别二维码
阅读过本文的人还看了以下文章:
基于40万表格数据集TableBank,用MaskRCNN做表格检测
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch自然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
如何利用全新的决策树集成级联结构gcForest做特征工程并打分?
Machine Learning Yearning 中文翻译稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx