【青大挖掘机】乐信FinTec技术大赛总结
#初赛时间2017.08.01-2017.09.23形式:线上提交
#决赛时间2017.11.15 形式:线下答辩于深圳乐信总部
#队名:青大挖掘机
#初赛:题目一,预测未来逾期三个账期以上的概率;题目二,预测未来消费金额;
#决赛:题目三,额度调优方案.
#成绩:初赛综合第四,决赛优胜奖
这里首先感谢乐信集团给我们这次锻炼机会和这个平台让我们去尝试,非常感谢!
我是参赛队长,这是我们第一次正式的参与数据挖掘的比赛,也是我第一次带队。整个比赛持续了三个多月,遇到了很多问题,也让我受益匪浅。
先说问题,比赛过程中我出现了两个大的决策失误,一个是比赛模型的选择,一个是答辩侧重点。
一、模型选择失误,
由于是第一次参与数据挖掘的比赛,在此之前对模型的理解仅仅限于理论解释,并不透彻,所以选择什么模型比较好,并没有经验参考,因此我们先使用了LR,RF,SVM等模型,一一做了实验,发现RF模型的效果最好。
另外一开始对于本次数据所描述的场景也很陌生,没有完全理解所给的数据的意义,所以在特征工程上我们选择了最简单的处理。对清洗后的数据,类别型用ONE-HOT编码,数值型数据进行求和,求平均,求方差,求最大,求最小处理,并归一化,得到特征为1003列,训练数据达到800M。另外针对数据不平衡问题我们对数据集采用不同的切分方法去实验,用CV去调优。我们遇到很多问题,电脑内存(8G)不够,模型训练太慢等。
这个过程耗费了我们大量的时间和精力,并且结果没有达到我们的逾期,初赛任务线上成绩根本进不了前十。这也就导致了后期在几轮特征工程后上GBDT和XGBoost的时候,时间不够只能把我们商量的觉得最重要的部分实现。算法说明文档在匆匆忙忙中完成提交,留下了很多问题。另外对XGBoost的理解不深,使用的时候未能完全发挥出其模型的优势,特别是在样本不平衡问题的处理上没有正确设置参数,这也造成了我们的模型过于复杂,浪费了许多时间。
二、答辩侧重点失误
算法说明文档中遗漏了一个很重要的内容,就是特征筛选后的特征。这是很重要的内容,因为你模型最终的输入形式,也就是你样本的特征向量形式就取决于你这部分特征的内容。最终在答辩的PPT中我们同样的遗漏了这一内容。除此之外,我们把答辩的内容重点放在了题目三,对于初赛数据分析,特征工程,模型训练这一部分的内容只是笼统概括的进行描述,最终评委老师们反馈说:没有讲明白你们到底是怎么做的。
再说收获,本次比赛最大的收获是大概了解了数据挖掘的整个流程,从数据分析到数据清洗,再到特征工程,模型训练,验证,整个过程有了更清晰的认识。遇到了许多没有考虑到的问题,对于不同的特征的处理方法也有了一个全面的认识,对模型有了更深刻的理解。还有就是近距离接触到行业的大佬们,见识了来自其他名校的同学,更清楚的认识到自己的差距。
附:数据分析,特征工程,特征筛选,模型训练
部分数据分析:
1)样本分布
2)年龄分析
3)是否统招及学历分析
4)性别、授信来源特征分析
5)订单信息
新建订单数 |
新建非延期分期 |
+ |
|
新建延期分期 |
|
当月历史存量订单(数/金额) |
前一个月存量订单(数/金额) |
+ |
|
当月新建订单(数/金额) |
|
当月历史逾期(天/账期)数 |
前一个月历史逾期(天/账期)数 |
+ |
|
当月逾期(天/账期)数 |
|
当前月已还本金 |
前一个月已还本金 |
+ |
|
当前月还款额 |
|
当前月待还本金 |
前一个月待还本金 |
+ |
|
当前月新建订单金额 |
|
- |
|
当前月还款额 |
训练集
测试集
特征工程:
用户信息(ud_mdl.csv)
在对该表格给出的信息进行仔细的数据分析后,我们对表中各特征的数据做了如下处理:
1)离散化处理
对于用户信息表格中的“注册年龄”、“在校人数”、“预计毕业时间”三个连续型变量分别以30岁、10000人、15年为界限做了离散化处理。
2)one-hot编码
对于表格中的“性别”、“是否统招”、“学历”、“授信来源”三个类别型变量分别做了one-hot编码。
3)从用户注册到授信的时间间隔
根据“注册时间”与“授信时间”两个特征,计算出从注册时间到授信时间之间的间隔(此间隔精确到月)
4)用户籍贯及学校所在地信息的离散化处理
对于此处的籍贯及学校所在地数据的处理,首先,根据地理位置差异将各省份按“东部沿海地区”、“东北地区”、“中部地区”、“西北地区”、“西南地区”、“直辖市”、“信息不明”这七类进行离散化处理。其次,根据城市发展差异,将城市按“省会及重要城市”、“中小型城市”、“信息不明”三类进行离散化处理。
省份 |
直辖市 |
北京市、上海市、天津市、重庆市 |
东部沿海地区 |
福建省、广东省、海南省、江苏省、山东省、浙江省 |
|
东北地区 |
黑龙江省、吉林省、辽宁省 |
|
中部地区 |
安徽省、河北省、河南省、湖北省、湖南省、江西省、山西省、陕西省 |
|
西北地区 |
甘肃省、内蒙古自治区、宁夏回族自治区、青海省、*自治区、**自治区 |
|
西南地区 |
广西壮族自治区、贵州省、四川省、云南省 |
|
省份不明(空白) |
|
|
城市 |
省会及重要城市 |
福州市、哈尔滨市、齐齐哈尔市、海口市、济南市、青岛市、广州市、昆明市、秦皇岛市、成都市、贵阳市、杭州市、南宁市、桂林市、合肥市、宁波市、三亚市、厦门市、深圳市、沈阳市、石家庄市、苏州市、太原市、乌鲁木齐市、武汉市、银川市、长春市、长沙市、郑州市、呼和浩特市、西宁市、西安市、兰州市、南京市、南昌市、拉萨市、大连市、连云港市 |
中小型城市 |
其他城市 |
|
城市不明(空白) |
|
过去6个月订单行为汇总(p6m_mdl.csv)
对此表格的处理主要根据实际情况,通过对信息的特征描述、特征相除、特征描述与占比相结合、特征相减的方式对各特征做了处理。
1)特征描述法
通过对本部分的数据分析,选择当前观测月新建各类订单数、截止到当前还款日的应还各类月服务费、截止到当前还款日的应还各类总服务费、当前观测月还款额度、当前观测月额度、额度使用率、剩余可用额度,对每个用户六个月来的记录分别进行求平均、方差、最大值、最小值的计算,并将得到的这四个数字特征作为数据特征,以此来表征个用户六个月来的消费平均水平及离散程度。
2)特征相除
首先,针对“截止到当前应还款日的已全部实现现金还款还完订单数”和“截止到当前应还款日的已全部实现现金还款还完订单金额”之间的关系,最后一个月两特征值相除的结果作为特征,以此来表征“截止到当前应还款日的已全部实现现金还款还完订单的平均订单金额”;
然后,针对“截止到当前应还款日的历史提前还款订单数”和“截止到当前应还款日的历史提前还款订单金额”之间的关系,取最后一个月两特征值相除作为新的特征,以此来表征“截止到当前应还款日的历史提前还款订单平均金额”。
3)特征描述与占比相结合
由于结果要求的是用户未来是否逾期的问题。因此,我们利用“当前观测月新建订单数”、“当前观测月新建延期订单数”、“当前观测月新建非延期订单数”以及相应金额特征,首先计算各用户每个月延期订单数、非延期订单数占总新建订单数的比例,然后再分别对每个用户的六个延期订单占比和六个非延期订单占比求平均、方差、最大、最小。以此来表征各用户在过去的六个月中延期订单和非延期订单在总订单中的比例情况。
相应金额特征的计算同理。
4)特征相减
本表格中的其他特征,如历史存量创建各类订单数及金额、截止到当前还款日的已还各类本金、截止到当前还款日的已还各类月服务费、截止到当前还款日的已还各类总服务费、用户历史逾期天数、用户历史逾期账期数,这些特征均用各用户最后一个月的值减去第一个月的值作为特征,来表征在这过去六个月的经济情况。
过去12个月月度订单金额(p12m_mdl)
此表格中主要对“当前观测月新建订单金额”做了处理。
首先,计算各用户在过去12个月中每月订单金额的增长情况作为新特征;
其次,利用计算每个用户在过去12个月订单的平均、方差、最大值、最小值作为特征。
过去6个月新增订单明细数据(od_in6m_mdl)
由于此表格中内容为订单明细,因此,在对此表格的数据进行处理时主要是基于用户名(“fuid_md5”),根据给出的各种特征及实际情况对订单做数量上的统计,具体处理如下。
1)单一特征数量统计
根据“订单号”,统计了各用户这六个月消费的总的订单数作为特征;
根据“订单创建时间”,统计了各用户每个月的订单个数,并分别求取平均、方差、最大值、最小值来表征每个用户各月创建订单数情况作为特征。
根据“订单状态”,统计了每个用户各种订单状态订单的个数作为特征。
对于“订单金额”和“首付金额”,首先计算了各用户每月的订单金额和首付金额,并将它们做平均、方差、最大、最小处理后作为8个特征,来表征用户每月的订单金额和首付金额情况。
过去6个月用户场景行为信息(login_scene_mdl)
由于该表格是给出的特征皆为数值型特征,没有出现类别型。因此对该表格的初步处理为,统计各用户六个月各种行为信息的平均、方差、最大值、最小值数字特征,输出208个特征。
通过分析在此表格的各类场景中,下单和还款场景与预测结果相关性最高。因此对下单和还款场景分别做了占比处理.特征筛选:
第一,对处理过的特征做统计,将所有样本中该特征值均为0的特征删除;
第二,根据XGBoost模型对人工处理后的特征输出的特征重要性进行二次筛选,删除特征重要性为0的特征。
筛选结果 :有效特征共392个,如图例所示。模型训练:模型最终选择XGBoost,模型的训练过程采用不同的比例切分样本集,cv调参。RF为参考模型。
任务1 中以1500逾期样本+1500不逾期样本到以1500逾期样本+48500不逾期样本,以1500为步长逐步增加不逾期样本数,最后多个模型融合取平均。
learning_rate =0.02;n_estimators = 500;max_depth = 6;
scale_pos_weight=1(有问题);
任务2将回归问题变为一个先分类再回归的问题。先预测是否会消费,根据预测结果打标签,不会消费的预测金额为0,对会消费的近3万样本再进行均分,训练三个回归模型,然后模型融合取平均。
分类:
learning_rate= 0.11;n_estimators = 60;max_depth = 5;
scale_pos_weight=1(有问题);
回归:
learning_rate =0.08;n_estimators =20;max_depth = 7;
scale_pos_weight=1(有问题);