写在前面✍
- 本系列笔记基于天池平台上“资金流入流出预测-挑战Baseline”学习赛,记录如何完整的打一次数据挖掘类比赛。同时,该比赛属于序列建模问题,希望学习完成这个任务,可以对序列问题的处理有一定的独立思考能力和实践操作能力,可以将所学理论,用编码的形式和实际的问题得到深入。
- 第一篇,EDA,初步了解以及处理的基本步骤
- 学习前先提问:
A. 【数据处理】对于一般的数据挖掘类任务,拿到数据之后,首先要对数据集进行处理,那么需要考虑什么情况呢?比如,异常值、冗余项…
B. 【数据分析】数据分析需要分析哪些性质?比如,对于序列问题而言,将数据集可视化展示,需要看时间维度有没有周期性(是不是和周几有关系、以及月份、突发性事件、节日等)…数据分析的步骤是什么?
C. 【可视化工具】一般可视化使用matplotlib
或者seaborn
进行,要学会如何分析可视化图表。
Content:
- 初步了解赛题及数据
1.1 任务
1.2 用户基本信息数据
1.3 用户申购赎回数据
1.4 收益率表
1.5 银行间拆借利率表
1.6 提交格式
1.7 评分指标 - EDA
2.1 初步数据探索和准备步骤 - 工具的使用~
seaborn
1 初步了解赛题及数据
1.1 任务:
赛题地址
场景:蚂蚁金服每天需要处理大量的资金流入和流出
条件:为了资金流动的风险达到最低,同时保证每天的正常业务运转
目标:精准预测未来每日的资金流入流出情况
完整赛题:蚂蚁金服拥有上亿会员并且业务场景中每天都涉及大量的资金流入和流出,面对如此庞大的用户群,资金管理压力会非常大。在既保证资金流动性风险最小,又满足日常业务运转的情况下,精准地预测资金的流入流出情况变得尤为重要。此届大赛以《资金流入流出预测》为题,期望参赛者能够通过对例如余额宝用户的申购、赎回数据的把握。对货币基金而言,资金流入意味着申购行为,资金流出为赎回行为 。
数据:竞赛中使用的数据主要包含四个部分,分别为:
- 用户基本信息数据、
- 用户申购赎回数据、
- 收益率表、
- 银行间拆借利率表
任务定位:
- 时间序列分析
- 需要统计每天的申购总额和赎回总额
1.2 用户基本信息数据
用户信息表:user_profile_table
。总共随机抽取了约 3 万用户,其中部分用户在 2014 年 9 月份第一次出现,这部分用户只在测试数据中 。因此用户信息表是约 2.8 万个用户(28041)的基本数据,在原始数据的基础上处理后,主要包含了用户的性别、城市和星座。具体的字段如下表 1 :
字段:user_id, sex(0/1), city_id(7所城市), constellation(星座)
1.3 用户申购赎回数据
用户申购赎回数据表:user_balance_table
。里面有 20130701
至 20140831
申购和赎回信息、以及所有的子类目信息,总共2840421条记录。数据经过脱敏处理,脱敏之后的数据,基本保持了原数据趋势。数据主要包括用户操作时间和操作记录,其中操作记录包括申购和赎回两个部分。金额的单位是分,即 0.01
元人民币。 如果用户今日消费总量为0
,即consume_amt=0
,则四个字类目为空。
- 注 1 :上述的数据都是经过脱敏处理的,收益为重新计算得到的,计算方法按照简化后的计算方式处理,具体计算方式在下节余额宝收益计算方式中描述。
- 注 2 :脱敏后的数据保证了
今日余额 = 昨日余额 + 今日申购 - 今日赎回
,不会出现负值。
1.4 收益率表
收益表为余额宝在 14
个月内的收益率表: mfd_day_share_interest
。
1.5 银行间拆借利率表(Shibor)
银行间拆借利率表是 14
个月期间银行之间的拆借利率(皆为年化利率): mfd_bank_shibor
。
1.6 选手需要提交的结果表:
提交结果表: tc_comp_predict_table
。每一行数据是一天对申购、赎回总额的预测值, 2014 年 9 月每天一行数据,共 30 行数据。 Purchase
和 redeem
都是金额数据,精确到分。
评分数据格式要求与“选手结果数据样例文件”一致, 字段之间以逗号为分隔符,结果表命名为:tc_comp_predict_table
,
余额宝收益:
1.7 评估指标
赛题任务:利用2013年7月~2014年8月
的数据,预测2014年9月
每一天申购和赎回的总量
传统评估指标:
- 申购总量和赎回总量均为连续型变量
- 常采用
MSE
(均方误差)、MAE
(平均绝对误差)、MAPE
(平均绝对相对误差)等为评价指标
调用sklearn
实现:
from sklearn.metrics import mean_squared_error