赛题解读

赛题介绍:https://tianchi.aliyun.com/competition/entrance/231573/introduction

数据集介绍及下载:https://tianchi.aliyun.com/competition/entrance/231573/information

代码见:https://github.com/Sendren/The-Purchase-and-Redemption-Forecast-Challenge-baseline.git

阅读完赛题介绍后,总结了一下这个赛题的目的就是预测未来一个月,每天余额宝总的的转入金额和转出金额。是一个回归问题

下载解压数据集后有五个表格。提供了很多的信息,一开始看到这么多信息让我无从下手啊!目前这个阶段先看下,熟悉下五个表中有什么吧~~ 后面通过数据探索阶段来熟悉变量间的关系!

这里的评价标准有点意思~看图自己领悟

赛题解析

  • 类型:回归预测
  • 标签:由于赛题没有提供,所以要根据其他数据统计每天的申购总额和赎回总额
  • 解决方案:时间序列预测问题方案
  • 基准方法:临近数据、中位数等 时间序列规则与模型 抽取特征、利用机器学习方法建模

数据分析与探索

本来准备把代码也贴出来,但是做了会发现代码又臭又长,贴出来意义不大,所以这一张准备写一些数据探索的从零如何上手。

周特征分析

由于本次预测的目标是每日的余额宝的申购和赎回总量,是一个时间序列,所以先探索一下时间因素和它的关系。

画出2014年4-8月的时序图。

从图中得出以下结论:

  1. 月末时赎回高于购买(月末时更需要钱)
  2. 申购与赎回看起来有关联
  3. 每月有4个波峰、4个波谷

周一到周日申购总量和赎回总量的差异

用小提琴图和分布图画出一周中申购赎回的分布情况(还可以画出中位数图、箱线图),发现星期日到星期四较高,星期五六较低,这可能是与余额宝收益和赎回计算方式有关。

#### 构造星期变量,分析与申购总量和赎回总量间相关性
对weekday进行onehot encoding,然后做一个与申购赎回的相关系数图。由于weekday是一个定序变量,申购赎回是一个定距变量,所以要用Spearman相关系数。参考下图:

出图了,发现线性相关性挺弱的
#### 测试特征与标签的独立性

MVTest可以用这个github上的文件,也可以用pip下载,但是有些源找不到这个包 Ref: https://github.com/ChuanyuXue/MVTest

发现p—value小于0.05,说明我们错误拒绝H0假设的概率为0.01,所以可以拒绝H0假设,所以测试特征与标签存在依赖关系。
知识补充:

月份特征分析

每月申购总额与赎回总额的分布特点

用sns.kdeplot()画出每月申购赎回概率分布,发现13年7-10月与其他月份差异明显。

日期特征分析

利用直方图分析14年8月份申购总额与赎回总额,通过下面三张图,得出一些结论。

  1. 每周开始倾向购买,每周中期倾向于赎回
  2. 周末不倾向交易
  3. 赎回波动性比购买大

利用直方图分析13年9月份申购总额与赎回总额,通过下面三张图,发现16号——购买峰值(中秋节前);28号——赎回峰值(国庆节前)11号和25号——赎回峰值(周三),19-21号(中秋节);28-30号(国庆节),说明节假日对申购和赎回都有影响。所以我们重点分析下节假日。

分析节假日及特殊日期

过节时

选了这几个假期来进行
The QingMing festerval (April.5 - April.7)
The Labour day (May.1 - May.5)
The DuanWu festeval (May.31 - June.2)
The MidAutumn festeval (Sep.6 - Sep.8)
与平时均值对比一下
与同时其非假日对比

结论是假日申购和赎回量都比平时小,618没什么变化,这个可能是因为淘宝支持余额宝付款的缘故。

过节前后

画出过节和节前后交易量变化,意料之中的是节前交易量下降,节后交易量上升。
至此,有关时间的探索告一段落,下面对别的数据进行探索。

异常数据的探索(大额交易)

将单笔交易大于100万的金额,视为大额交易。
将数据区分为大额交易和小额交易,画图对比,发现小额交易的日申购赎回总额都要小于大额交易的日总额,还是有钱人多啊!
小额交易的购买要大与赎回,穷人喜欢存钱。
14年5月下旬后,大额交易的赎回大于购买(资本套现)


画出小额和大额交易星期类型的箱型图,大额交易更不愿在周五发生

分析用户交易纪录表中其他变量

做一下‘total_purchase_amt’,‘total_redeem_amt’,‘report_date’, ‘tBalance’, ‘yBalance’, ‘direct_purchase_amt’, ‘purchase_bal_amt’, ‘purchase_bank_amt’,‘consume_amt’, ‘transfer_amt’, ‘tftobal_amt’,‘tftocard_amt’, 'share_amt’这些变量的相关性图。用的是皮尔森系数。

对于银行及支付宝利率的分析

画出银行及支付宝利率与标签的时序图

拆解利率与交易量关联

余额宝收益与交易量关联

可以总结出:

The influence of share is more likely to act on Purchase
The influence of bank rate is more likely to act on Redeem
The influence of share rate is for short
The influence of bank rate is for long

分析用户信息

分析各城市交易量

分析男、女交易量差异


分析星座

哈哈,这个好扯,用屁股想都知道没啥关系

结论

based on above analysis, we can simply find three features:

the weekday
is it weekend
is it holidy
the distance from the start of week(monday)
the distance from the end of week(sunday)
the distance from the holiday centre(centre of QingMing DuanWu Labour ZhongQiu)
the distance from the start of month
the distance from the end of month
the mean/max/min value of the same week in last month
the value in last day of last month
the city
user’s gender

时间序列规则与baseline

基本规则法快速入门

原文点击这里


看到这基本就明白什么是时间序列规则了。上文中的周期应该怎么确定呢?有下面几个tip

  • 周期一般为(一周、一月)
  • 确定组成一个周期的元素(周1-周日、1号-31号)
  • 结合STL分解观察周期变化
  • 缺点:不考虑节假日、突发事件等

那么对于本赛题,怎么应用时间序列规则来解呢?祥见下图,总之就是求出每天的周期因子,再乘以对应号数的均值,得到的就是预测值。

三种时间序列规则的资金流入流出预测

下面用三种时间序列规则做预测

  1. 以星期为周期的中位数预测
  2. 基于周期因子(以星期为周期)的预测
  3. 基于周期因子(以月份为周期)的预测

最后线上效果135.51

特征工程

从前面数据分析和探索我们可以找出一些候选特征。

基于《数据分析与探索》提取是/否类型的特征(稀疏特征)

  • 是否周一、是否周二……是否周日
  • 与节假日相关的特征——是否节假日、是否节假日第一天、是否节假日最后一天等等
  • 与月初、月末相关的特征


筛选掉正负样本数量严重不平衡的,做一下相关性分析,去掉相关性小的(如<0.1).

考虑到节假日、月初、月末等的特殊性,提取相关距离特征

  • 距放假的天数、距上班的天数等
  • 距月初天数、距月中天数、距星期日天数等
    做点线图和相关性图看对标签量的影响。

考虑距波峰、波谷的天数

  • 如何确定波峰、波谷?(以星期为周期)
  • 申购总额时序图

从个月的申购时序图,可以找出每月的波峰波谷是在那(赎回时序图也一样)
下图是统计出来的是各月波峰波谷的时间。

结果发现相关性还挺强的

添加《时间序列规则与baseline》中的周期因子

  • 星期周期因子
  • 月份周期因子
    发现 赎回周期因子也与申购总额相关

淘汰特征

由于前面构造了好多特征,所以要筛选掉一些

  • 利用MV test判断弱相关特征是否与因变量存在非线性关联
  • 利用相关性分数来筛选
  • 采用Shap方法分析特征重要性,并排序
  • 采用Permutation Importance方法分析特征重要性,并排序
  • 最后,对不同方法的排序列表前Top K取交集

模型训练与构建

常用的回归预测模型:

  • 常用回归模型
  • 线性回归
  • 决策树
  • 随机森林
  • 梯度提升树:Gradient Boosting Tree、Xgboost、LightGBM、Catboost

基本上梯度提升树模型可以做到其他传统机器模型的效果,现在竞赛用的除了神经网络,其余基本用的都是Xgboost及其变种。

模型参数的设置

  • 不建议将精力放在调参;黔驴技穷时再调参
  • 仅需大体的设置主要参数即可,例如,Xgboost,learning_rate=0.1,nround=200,max_depth=6

下面是各各机器学习模型的得分,明显看出LGBM分数最好,但是线上效果不好,过拟合的原因可能是因为模型复杂,数据量又少。相比LR的线上得分缺比较高。

模型融合

  • 加权:算数平均数、几何平均数、调和平均数等
  • Stacking:交叉验证;类似于深度学习
  • Blending:简单划分数据集;相当于只做Stacking的一折
  • 模型平均
  • 时序方法/模型与机器学习的融合

这里没有做演示,后面再试试吧~

总结

参加这次活动收获还是挺多的。

  1. 社区的重要性。一个人埋头学习的效果相当于闭门造车,遇到问题了不能讨论,学到什么水平自己也没什么底。

  2. 时间序列的挖掘问题解法。有几种方法,1、规则法、统计学方法(如ARIMA)以及机器学习方法。
    收获最大的就是对于机器学习方法处理时间序列预测的问题。一般需要预测一星期或者一个月后的标签。但是一个月后的很多信息我们是不知道的,如题中的当天银行利率,这些对我们解决本题问题没有一点帮助,因为我们不可能知道一个月后的利率是多少。所以我们构造的因变量必须是已知的,如上文中是否周末、是否节假日、距离波峰波谷这些。

  3. 赛题 提供的那么多信息,很多是永不上的,不必因为看到这么多的数据和类目害怕。冷静下来抓住关键少数!

  4. 作比赛还是很费时费力的!

天池比赛:资金流入流出预测相关推荐

  1. 天池竞赛-资金流入流出预测总结

    天池竞赛-资金流入流出预测总结 1.竞赛背景 时序问题:根据2013年7月份到2014年8月份的用户数据,预测支付宝每日的资金流入流出情况. 数据集情况 数据集主要包括四个表格:1.用户信息表主要记录 ...

  2. 阿里AI天池大赛-资金流入流出预测-基于周期因子的时间序列预测

    1:报名地址 https://tianchi.aliyun.com/competition/entrance/231573/score 2:排名分数 3:模型源码 废话不多说,直接上源码 import ...

  3. 资金流入流出预测(上)(阿里云天池大赛)

    文章目录 前言 比赛介绍 采用不同的模型预测以及结果分数 prophet模型 1数据加载 2数据探索与预处理 2.1数据特征探索 2.2按照时间聚合目标值total_purchase_amt和tota ...

  4. Datawhale~数据挖掘实践之序列问题处理~天池·资金流入流出预测-挑战Baseline~Day01~数据探索与分析

    写在前面✍ 本系列笔记基于天池平台上"资金流入流出预测-挑战Baseline"学习赛,记录如何完整的打一次数据挖掘类比赛.同时,该比赛属于序列建模问题,希望学习完成这个任务,可以对 ...

  5. 【算法竞赛学习】资金流入流出预测-挑战Baseline_建模预测

    赛题简介 蚂蚁金服拥有上亿会员并且业务场景中每天都涉及大量的资金流入和流出,面对如此庞大的用户群,资金管理压力会非常大.在既保证资金流动性风险最小,又满足日常业务运转的情况下,精准地预测资金的流入流出 ...

  6. 【算法竞赛学习】资金流入流出预测-挑战Baseline_特征工程

    赛题简介 蚂蚁金服拥有上亿会员并且业务场景中每天都涉及大量的资金流入和流出,面对如此庞大的用户群,资金管理压力会非常大.在既保证资金流动性风险最小,又满足日常业务运转的情况下,精准地预测资金的流入流出 ...

  7. 【算法竞赛学习】资金流入流出预测-挑战Baseline_时间序列规则

    赛题简介 蚂蚁金服拥有上亿会员并且业务场景中每天都涉及大量的资金流入和流出,面对如此庞大的用户群,资金管理压力会非常大.在既保证资金流动性风险最小,又满足日常业务运转的情况下,精准地预测资金的流入流出 ...

  8. 【算法竞赛学习】资金流入流出预测-挑战Baseline_数据探索与分析1

    赛题简介 蚂蚁金服拥有上亿会员并且业务场景中每天都涉及大量的资金流入和流出,面对如此庞大的用户群,资金管理压力会非常大.在既保证资金流动性风险最小,又满足日常业务运转的情况下,精准地预测资金的流入流出 ...

  9. 资金流入流出预测—数据探索与分析

    数据探索与分析 背景介绍 蚂蚁金服拥有上亿会员,每天都涉及大量的资金流入和流出,资金管理压力会非常大 在既保证资金流动性风险最小,又满足日常业务运转的情况下,精确地预测资金的流入流出情况变得尤为重要 ...

最新文章

  1. 深度学习入门课程学习笔记06 反向传播
  2. 3 命名空间与命名规范
  3. TPC-W 一个实验结果和分析
  4. BZOJ1406: [AHOI2007]密码箱 数论
  5. 怎么判断程序运行的当前目录在哪?关键词:根目录
  6. 【Python】 1055 集体照 (25 分)
  7. webView 显示一段 html 代码
  8. AddressBookUI.Framwork应用之ABPersonViewController, ABUnknownPersonViewController,ABNewPersonViewContro
  9. boost::contract模块实现是否constexpr的测试程序
  10. C++_数据类型_布尔类型_以及数据的输入_以及算术运算符_加减乘除运算---C++语言工作笔记013
  11. 超酷jQuery进度条加载动画集合
  12. 每周进度条(第10周)
  13. coolpro2 剪切并淡出
  14. 2014年南京航空航天大学计算机学院推荐研究生公示,南京航空航天大学2013-2014学年研究生评优评奖公示...
  15. Java程序员该怎么更好的提升自己
  16. 宝真酒业:借助用友U8cloud数智化转型,小集团也能“小而美”
  17. 【测控电路】信号分离电路 二阶滤波器 RC滤波电路
  18. VMware Workstation Pro界面设置为中文界面
  19. python 识别人名_HanLP中人名识别分析
  20. SCA可达性分析基础知识普及

热门文章

  1. 将KEIL中memory window 数据保存到文本,然后改造成十进制数组,方便导入excel进行分析
  2. Derby/IJ基础环境配置与使用
  3. UIAutomation---IOS自动化测试的工具
  4. 苹果cms最新漏洞总是被挂马跳转劫持 如何解决
  5. 放屁模拟器v1.0手机版
  6. 对预测分析中FIRST和FOLLOW集合的理解
  7. 一把王者荣耀的时间打卡剑指 Offer简单入门题
  8. 小程序图标库----之用css画对号和icon图标
  9. 对计算机网络技术基础的建议,计算机网络技术基础课件-ppt.ppt
  10. #飞特STS3215舵机测试与使用记录--附带基础样例-记录笔记-第三章