最终成绩:11 / 4780
比赛地址:https://tianchi.aliyun.com/competition/entrance/531830/introduction
开源地址:https://github.com/LogicJake/tianchi-loan-default-prediction-top11

这个比赛属于天池办的一系列入门赛的其一,没奖金只有一些小奖品,所以竞争很小。总的来说该方案没有什么耀眼的操作,就是简单的数据处理,暴力特征工程和模型融合,单纯看好久没更博文了,发上来凑个数。

赛题背景

赛题以金融风控中的个人信贷为背景,要求选手根据贷款申请人的数据信息预测其是否有违约的可能,以此判断是否通过此项贷款,这是一个典型的分类问题。

数据介绍

赛题以预测用户贷款是否违约为任务,数据集报名后可见并可下载,该数据来自某信贷平台的贷款记录,总数据量超过120w,包含47列变量信息,其中15列为匿名变量。为了保证比赛的公平性,将会从中抽取80万条作为训练集,20万条作为测试集A,20万条作为测试集B,同时会对employmentTitle、purpose、postCode和title等信息进行脱敏。

Field Description
id 为贷款清单分配的唯一信用证标识
loanAmnt 贷款金额
term 贷款期限(year)
interestRate 贷款利率
installment 分期付款金额
grade 贷款等级
subGrade 贷款等级之子级
employmentTitle 就业职称
employmentLength 就业年限(年)
homeOwnership 借款人在登记时提供的房屋所有权状况
annualIncome 年收入
verificationStatus 验证状态
issueDate 贷款发放的月份
purpose 借款人在贷款申请时的贷款用途类别
postCode 借款人在贷款申请中提供的邮政编码的前3位数字
regionCode 地区编码
dti 债务收入比
delinquency_2years 借款人过去2年信用档案中逾期30天以上的违约事件数
ficoRangeLow 借款人在贷款发放时的fico所属的下限范围
ficoRangeHigh 借款人在贷款发放时的fico所属的上限范围
openAcc 借款人信用档案中未结信用额度的数量
pubRec 贬损公共记录的数量
pubRecBankruptcies 公开记录清除的数量
revolBal 信贷周转余额合计
revolUtil 循环额度利用率,或借款人使用的相对于所有可用循环信贷的信贷金额
totalAcc 借款人信用档案中当前的信用额度总数
initialListStatus 贷款的初始列表状态
applicationType 表明贷款是个人申请还是与两个共同借款人的联合申请
earliesCreditLine 借款人最早报告的信用额度开立的月份
title 借款人提供的贷款名称
policyCode 公开可用的策略_代码=1新产品不公开可用的策略_代码=2
n系列匿名特征 匿名特征n0-n14,为一些贷款人行为计数特征的处理

提交结果为每个测试样本是1的概率,也就是y为1的概率。评价方法为AUC评估模型效果。

方案总结

数据处理

原数据中有贷款等级和贷款等级之子级两个类别特征,但因为有明显的大小关系,所以需要将其映射为数值。贷款等级范围为“A-G”,将其映射为“1-7”。子级在每个等级上又细分了5个数字等级,所以用“等级×5+细分等级”映射。

就业年限(年)特征也是具有明显大小关系的类别特征。首先将“10+ years”替换成“10 years”,“< 1 year”替换成“0 years”。随后提取数字年份为新特征。

特征工程

业务特征

业务特征就做了两个没细挖。用贷款发放的年份减去借款人最早报告的信用额度开立的年份可以大致得到借款人的年龄(?)。贷款金额除以贷款期限(year)可以得到每年的负债,再除以年收入可以得到年负债比。

暴力特征

暴力特征主要围绕类别特征展开,对类别特征进行批量无筛选式的特征构造。主要进行了一阶和二阶组合下的 count 运算。

也对数值特征进行了二阶相加构造,但对模型没有提升就删去了。

欺诈率

类比点击率特征,针对是否会欺诈的01标签,同样也可以利用五折交叉统计计算欺诈率特征。欺诈率以类别为单位统计,所以同样可以对类别特征进行一阶和二阶下的暴力构造。

模型融合

模型融合采用树模型三兄弟:LightGBM,Xgboost和Catboost。融合方式采用指数加权融合,三个模型的权重都是0.5。