第四届拍拍贷魔镜杯冠军方案分享

## 1.介绍

? 队员:@回头是岸,@林萧, @观想,作者:@[一休](https://www.zhihu.com/people/qlmx-61/activities)

## 2. 赛题背景

资金流动性管理迄今仍是金融领域的经典问题。在互联网金融信贷业务中,单个资产标的金额小且复杂多样,对于拥有大量出借资金的金融机构或散户而言,资金管理压力巨大,精准地预测出借资金的流动情况变得尤为重要。本次比赛以互联网金融信贷业务为背景,以《现金流预测》为题,希望选手能够利用我们提供的数据,精准地预测资产组合在未来一段时间内每日的回款金额。

本赛题涵盖了信贷违约预测、现金流预测等金融领域常见问题,同时又是复杂的时序问题和多目标预测问题。希望参赛者利用聪明才智把互联网金融的数据优势转化为行业解决方案。

![img](https://aifile.ppdai.com/752890cd0f9e4aa0b36d529bd4433580..png)

数据包含训练样本、测试样本、每个标的的属性表、借款用户基础信息表、用户画像标签列表、借款用户操作行为日志表和用户还款日志表五个部分。

赛题的详解和数据见:[官网](https://ai.ppdai.com/mirror/goToMirrorDetail?mirrorId=17&tabindex=1)。
如失效关注公众号:**AI成长社**,回复:**魔镜杯** 即可获得
## 3.赛题理解

基于对赛题的分析以及金融风控业务的理解,得到以下几点:

- 赛题重要性:准确预测未来一段时期资产组合回款量。这能够帮助互联网金融企业更好的**把控运营节奏**,进行良性**资金配置**和**流动性管理**,最大化的利用现有资金。
- 赛题目标:预测资产组合在未来一段时间内每日的回款金额(但是我们无法预知资产组合的构成)

基于以上分析,决定在未知资产组合的情况下将原有的问题从宏观和微观两个方面进行挖掘,从微观角度挖掘用户的一些借贷习惯;从宏观挖掘公司每月每日资金的流入流出情况,来拟合最终的资产组合的回款情况,具体的结构如下图。

![stpe](http://tva1.sinaimg.cn/large/007X8olVly1g7m1p29069j30mj07fmzk.jpg)

## 4. 特征工程

由于金融风控领域对模型特征要求有很强的可解释性,在挖掘基本的特征时,我们都会考虑挖掘的特征最终的作用点。我们最终的特征有三部分来源,分别是基本信息特征、用户浏览行为特征和用户还款行为特征。

**1.基本特征**

基于时间过滤筛选出未穿越的基本时间特征,具体特征如下图:
![]()

![feature](http://tva1.sinaimg.cn/large/007X8olVly1g7m1p2et4mj30p107kwh7.jpg)

- 针对用户属性特征,删除了**cell_province**,**id_province**,**id_city**三个看似很强的地域特征。这部分数据存在缺失值,曾今尝试过用**id_province**的对**cell_province**进行填充,**id_city**进行分省份填充,但是最终线上结果没有有直接删除有效,删除操作线上提升大概200多分

```python
##尝试的填充代码
data[‘cell_province‘] = data[‘cell_province‘].fillna(data[‘id_province‘])
data[‘id_city‘] = data[‘id_city‘].fillna(data[‘id_province‘] + ‘000‘)
```

- 对age进行分桶处理

- 在标的属性特征中添加月利率特征:原始数据提供的是年利率,考虑到标的期限有3,6,9,12月,因此改成月利率特征,线上提升100左右

- 标的还款日期特征:应还款日期是在几月份,几号,星期几,线上提升200左右

- 用户画像特征: 对用户画像做TFIDF处理,保留10维特征

```python
Tfidf_vect = TfidfVectorizer(max_features=10, ngram_range=(1, 1), min_df=1)
Tfidf_vect.fit(list(train[‘taglist‘]))
```

**2.用户浏览行为特征**

- 时间段切分:将一天分为8个时间段,统计每个时间段用户的操作天数及占比,凌晨和深夜操作的逾期概率更高
- 行为间隔频度:将用户行为序列的最大间隔天数和最小间隔天数取出,推测借款人粘性

**3.用户还款行为特征**

- 历史还款习惯(还款月粒度-33天):有的用户喜欢还款日还款,有的喜欢提前一天还款,有的没有固定时间,基于此采用统计特征表示(众数、平均数、最大值、最小值、方差)
- 历史还款习惯(自然月粒度-上旬中旬下旬):有的用户喜欢在月初还款,有的喜欢月末还款(可能与其工资日相关),采用还款日期的众数表示
- 历史借款情况:用户拥有标的数量,用户相邻标的间隔天数,用户从注册日到借款等待的天数

## 5 模型的设计

**1.label设计**
$$
公式:label = due\_date - repay\_date
$$
由于受到大小月份的影响,进行适当的修正,其中31表示借款当天还款,即$$auditing\_date == repay\_date$$, 32表示逾期,其余不存在的日期用0填充。最终的结果分布如下图。修正后的label定义方式相比直接采用距离天数的定义方式,线上提升100多分。

![label](http://tva1.sinaimg.cn/large/007X8olVly1g7m1p2o0tpj30u60oiacj.jpg)

**2.训练集的调整**

统计数据发现2018年数据2月和3月的还款情况和其他月份有很大不同,逾期率更大,分析可能是由于春节的原因,故将2018年的2月和3月作为线下验证集,然后将其余的数据作为线下训练集。这种方式验证集比直接随机选取数据做验证集效果更好,线上提升在150分左右。如果分拆成两个模型,分别是2月作为验证集和3月作为验证集,线上还能再提升50分左右,最终为了模型更简单,没有使用这种方案。

**3.模型结构**

![model](http://tva1.sinaimg.cn/large/007X8olVly1g7m1p34s2fj30ip0a1adu.jpg)

我们的模型分为两个部分,微观部分对应用户的一些特征,主要挖掘方向就是用户的还款风险以及还款时间偏好,特征见上面的特征部分,模型使用的事lightgbm模型。宏观部分主要是分析公司每月,每日的资金运转流通情况,统计分析自然天资金回流的概率,在微观预测的基础上调整回流日资金分配。最终线上得分5424分。

优点:

- 有一定可解释性,知道特征来源
- 可操作性比较强
- 模型稳定,切榜成绩几乎没有波动

**4.loss 优化**

- 预期类别权重调整:考虑到风控模型应该是越来越好,即往后逾期率会变低,如下图所示,基于此,训练模型时将逾期的类别适当降低,线上提升50;

![loss1](http://tva1.sinaimg.cn/large/007X8olVly1g7m1p2tfofj30t30m73zn.jpg)

- 日期权重调整:统计分析月初的还款量较大,月底的还款量较小,将每月月初的loss权重增到到1.12,月末的loss权重的loss减小到0.79。复赛线上单模型5623。

![loss2](http://tva1.sinaimg.cn/large/007X8olVly1g7m1p2y7kbj30xp0notaq.jpg)

针对该部分的代码:

```python
# 设置时间权重权重
train_data[‘sample_weight‘] = 1.0
train_data.loc[(train_data[‘repay_date‘] == ‘2018-01-01‘) |
(train_data[‘repay_date‘] == ‘2018-02-01‘) |
(train_data[‘repay_date‘] == ‘2018-03-01‘) |
(train_data[‘repay_date‘] == ‘2018-04-01‘) |
(train_data[‘repay_date‘] == ‘2018-05-01‘) |
(train_data[‘repay_date‘] == ‘2018-06-01‘) |
(train_data[‘repay_date‘] == ‘2018-07-01‘) |
(train_data[‘repay_date‘] == ‘2018-08-01‘) |
(train_data[‘repay_date‘] == ‘2018-09-01‘) |
(train_data[‘repay_date‘] == ‘2018-10-01‘) |
(train_data[‘repay_date‘] == ‘2018-11-01‘) |
(train_data[‘repay_date‘] == ‘2018-12-01‘) |
(train_data[‘repay_date‘] == ‘2019-01-01‘),
[‘sample_weight‘]] = 1.124115183 # 每月1号
train_data.loc[(train_data[‘repay_date‘] == ‘2018-01-31‘) |
(train_data[‘repay_date‘] == ‘2018-02-28‘) |
(train_data[‘repay_date‘] == ‘2018-03-31‘) |
(train_data[‘repay_date‘] == ‘2018-04-30‘) |
(train_data[‘repay_date‘] == ‘2018-05-31‘) |
(train_data[‘repay_date‘] == ‘2018-06-30‘) |
(train_data[‘repay_date‘] == ‘2018-07-31‘) |
(train_data[‘repay_date‘] == ‘2018-08-31‘) |
(train_data[‘repay_date‘] == ‘2018-09-30‘) |
(train_data[‘repay_date‘] == ‘2018-10-31‘) |
(train_data[‘repay_date‘] == ‘2018-11-30‘) |
(train_data[‘repay_date‘] == ‘2018-12-31‘) |
(train_data[‘repay_date‘] == ‘2019-01-31‘),
[‘sample_weight‘]] = 0.79326 # 每月月底
```

## 6.总结

- 用组合目标趋近于实际的目标:整个赛题的目标是想预测资产组合的回款情况,但是资产组合我们无法预知,通过微观的标的回款情况加上宏 观的日回流情况来对实际目标进行趋近
- 对整体目标进行可解释性的拆解有助于特征的设计:将目标拆解为用户的信用风险、还款习惯以及整体的日回流趋势,让特征提取思路清晰可追溯
- 可进行多目标学习的尝试:基于我们现有模型的整体架构和思想,可进行多目标学习的尝试,这方面可以继续挖掘和扩展

## 7. 可深入探索模型

![model2](http://tva1.sinaimg.cn/large/007X8olVly1g7m1p3avw7j30mq0as44n.jpg)

?

推荐阅读:

如果出现出现图片失效的情况请阅读:原文

作者的知乎:一休, 知乎专栏:ML与DL成长之路

微信公号:AI成长社:ML/DL/CV的成长圣地。

原文地址:https://www.cnblogs.com/ikkyu/p/11622009.html

时间: 2024-10-29 19:07:53

第四届拍拍贷魔镜杯冠军方案分享的相关文章

高手晋级篇在拍拍贷实现高收益的指南技术贴

与拍拍贷的首次结缘,是在2013年7月.由于余额宝开始关注理财,作为一个技术宅工作多年省吃俭用的也有了点闲钱,一次偶然与同事闲聊的机会下,知道了拍拍贷.经过了一年多的摸爬滚打,每天勤劳的找标投标总结,自己和看到别人也交了不少学费,在拍拍贷也算是老兵一枚了,坏账率和收益率在PPD都属于领先水平.趁着这次拍拍贷活动,给大家分享下,也可以帮助新人少走弯路. http://www.ppdai.com/zixun/zt_shidajijingongsi 如何看自己的坏账率        要比较不同人群的坏

我在拍拍贷的投资经验分享(净值200W+)

1,结缘: 2013.6.27日无意间在CCTV2上看到了拍拍贷在介绍,模糊的记得光头强(张俊)吹虚着他的拍拍贷.咦!这不正是我想要的.于是当晚就注册了账号,并充值1000元试水.挑了几个个人感觉还不错的标,每个人大方的投了他们50元.然后就没理他了.一个月后回来发现那些人挺守信用的,按时按量还款了.不错!得给赞.于是在论坛认真学习了一个月,期间认识了大鬼,JIANGMUXI,炮哥,qingyehanchuang,SK等高手,和他们交流中学习了不少投标技巧.在此感谢老友们的帮助. http://

我的拍拍贷投资心路分享

坏账,在拍拍贷基本是避免不了,还是要相对乐观地看待这个问题,首先可以看下自己能够承受多大的坏账,比如在我看来,坏账在收益的10%以下我觉得可以接受,这样来看每个月的收益和坏账心情相对会好很多,如果坏账超标了,那就反思为什么会这么高,如何更好地做风控,适当降低投资利率投向更保险的标的,如果坏账远未达到预期,那可以更加激进地投资.有些是习惯的问题,我们从来不曾在借贷这块愿意承担坏账,所以只要看到坏账心情就比较糟糕,而不会理会坏账的数量和比例到底有多少,心情好最重要,就当坏账是捐了吧. http://

感谢拍拍贷!让我从银行活期“大客户”成长为理财小达人

开门要见山,账户总览图奉上: 5 天前 上传 下载附件 (85.53 KB) 也许看到这里,大家已经觉得没意思了,投资额不高,收益率一般,不过客官暂且留点耐心,往下面看看. 我在拍拍贷初始投资的时候像各位刚刚接触P2P网贷的投资人一样, 抱着试探的心态只投8%-9%的安全标,后期对拍拍逐渐有所认识, 并且累计了一些经验后,才投高利率的标.所以,综合来看,总体的收益率我还是比较满意的.http://www.ppdai.com/zixun/zt_xinlangwaihui 我不喜欢长篇大论,关于我在

备份方案 分享

备份方案 分享

利用R分析拍拍贷数据

拍拍贷数据集分析 ```{r echo=FALSE, message=FALSE, warning=FALSE} # 加载你最终使用的所有组件 # 在这个代码块的分析中. # 注意,在这个代码块中,将参数 "echo" 设为假. # This prevents the code from displaying in the knitted HTML output.这可以避免代码混入 HTML 输出显示. # 应当在文件中,对所有代码块设为 echo=FALSE . library(gg

c#并行任务多种优化方案分享(异步委托)

遇到一个多线程任务优化的问题,现在解决了,分享如下. 假设有四个任务: 任务1:登陆验证(CheckUser) 任务2:验证成功后从Web服务获取数据(GetDataFromWeb) 任务3:验证成功后从数据库获取数据(GetDatFromDb) 任务4:使用2.3的数据执行一个方法 (StartProcess) 一个比较笨的方法(本人最开始的方法,记为方法1)是直接开启一个线程,按照顺序依次执行四个任务: new Thread(delegate                {        

使用正则表达式处理html标签方案分享

首先呢,阅读本文前建议大家去读下这篇文章点击打开链接,是关于java正则工具类Matcher相关的一些探讨和建议 下面这是其中一项关于处理匹配内容替换的范例, appendReplacement() + appendTail()组合 import java.util.regex.Pattern; import java.util.regex.Matcher; public class MatcherReplaceExample { public static void main(String[]

旅游行业GIS应用方案分享

旅游地理信息系统(Travel GeographicInformation System, 简称TGIS) 是以旅游地理信息数据库为基础, 在计算机硬软件支持下, 运用系统工程和信息科学的理论和方法, 综合地.动态地获取.存储.管理.分析和应用旅游地理信息的多媒体信息系统.旅游信息系统的建立, 将以其快速高效收集.存储.整理.输出.查.询.检索等功能来提高旅游决策效率, 更以其优越的空间分析功能使旅游规划更为科学. 旅游与地理信息相关性极强,GIS 中如图形.区域景观资源信息.交通路线等诸多要素