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

2024-06-12 22:38

本文主要是介绍第四届拍拍贷魔镜杯冠军方案分享,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

浏览更多内容,可访问:http://www.growai.cn

1.介绍

​ 队员:@回头是岸,@林萧, @观想,作者:@一休

2. 赛题背景

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

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

img

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

赛题的详解和数据见:官网。
如失效关注公众号:AI成长社,回复:魔镜杯 即可获得

3.赛题理解

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

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

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

stpe

4. 特征工程

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

1.基本特征

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

feature

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

    ##尝试的填充代码
    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维特征

    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设计
公 式 : l a b e l = d u e _ d a t e − r e p a y _ d a t e 公式:label = due\_date - repay\_date label=due_daterepay_date
由于受到大小月份的影响,进行适当的修正,其中31表示借款当天还款,即 a u d i t i n g _ d a t e = = r e p a y _ d a t e auditing\_date == repay\_date auditing_date==repay_date, 32表示逾期,其余不存在的日期用0填充。最终的结果分布如下图。修正后的label定义方式相比直接采用距离天数的定义方式,线上提升100多分。

label

2.训练集的调整

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

3.模型结构

model

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

优点:

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

4.loss 优化

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

loss1

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

    loss2

    针对该部分的代码:

    # 设置时间权重权重
    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


推荐阅读:

如果出现出现图片失效的情况请阅读:https://mp.weixin.qq.com/s/0V0CkJ7HE-O8jp8g4GCeGA

  • 基于lightgbm实现的二分类、多分类和回归任务
  • 基于xgboost实现的二分类、多分类和回归任务
  • 基于keras实现的二分类、多分类和回归任务
  • 基于pytorch实现的二分类、多分类和回归任务

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

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

这篇关于第四届拍拍贷魔镜杯冠军方案分享的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055540

相关文章

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Redis KEYS查询大批量数据替代方案

《RedisKEYS查询大批量数据替代方案》在使用Redis时,KEYS命令虽然简单直接,但其全表扫描的特性在处理大规模数据时会导致性能问题,甚至可能阻塞Redis服务,本文将介绍SCAN命令、有序... 目录前言KEYS命令问题背景替代方案1.使用 SCAN 命令2. 使用有序集合(Sorted Set)

MyBatis延迟加载的处理方案

《MyBatis延迟加载的处理方案》MyBatis支持延迟加载(LazyLoading),允许在需要数据时才从数据库加载,而不是在查询结果第一次返回时就立即加载所有数据,延迟加载的核心思想是,将关联对... 目录MyBATis如何处理延迟加载?延迟加载的原理1. 开启延迟加载2. 延迟加载的配置2.1 使用

Android WebView的加载超时处理方案

《AndroidWebView的加载超时处理方案》在Android开发中,WebView是一个常用的组件,用于在应用中嵌入网页,然而,当网络状况不佳或页面加载过慢时,用户可能会遇到加载超时的问题,本... 目录引言一、WebView加载超时的原因二、加载超时处理方案1. 使用Handler和Timer进行超

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

高效+灵活,万博智云全球发布AWS无代理跨云容灾方案!

摘要 近日,万博智云推出了基于AWS的无代理跨云容灾解决方案,并与拉丁美洲,中东,亚洲的合作伙伴面向全球开展了联合发布。这一方案以AWS应用环境为基础,将HyperBDR平台的高效、灵活和成本效益优势与无代理功能相结合,为全球企业带来实现了更便捷、经济的数据保护。 一、全球联合发布 9月2日,万博智云CEO Michael Wong在线上平台发布AWS无代理跨云容灾解决方案的阐述视频,介绍了