摘要:
合集:AI案例-ML-泛金融业
赛题:资金流入流出预测
主办方:蚂蚁金服
主页:--
AI问题:回归预测问题
数据集:蚂蚁金服用户资金流入流出数据集(2013-2014)
数据集价值:预测未来每日的资金流入流出情况。
一、赛题简介
蚂蚁金服拥有上亿会员并且业务场景中每天都涉及大量的资金流入和流出,面对如此庞大的用户群,资金管理压力会非常大。在既保证资金流动性风险最小,又满足日常业务运转的情况下,精准地预测资金的流入流出情况变得尤为重要。此届大赛以《资金流入流出预测》为题,期望参赛者能够通过对例如余额宝用户的申购赎回数据的把握,精准预测未来每日的资金流入流出情况。对货币基金而言,资金流入意味着申购行为,资金流出为赎回行为。
二、数据集内容
数据结构
竞赛中使用的数据主要包含四个部分,分别为用户基本信息数据、用户申购赎回数据、收益率表和银行间拆借利率表。下面分别介绍四组数据。
1.用户信息
用户信息表: user_profile_table 。 我们总共随机抽取了约 3 万用户,其中部分用户在 2014 年 9 月份第一次出现,这部分用户只在测试数据中 。因此用户信息表是约 2.8 万 个用户的基本数据,在原始数据的基础上处理后,主要包含了用户的性别、城市和星座。具体的字段如下表 1 :
表1用户信息表
列名 | 类型 | 含义 | 示例 |
---|---|---|---|
user_id | bigint | 用户 ID | 1234 |
Sex | bigint | 用户性别( 1 :男, 0 :女 ) | 0 |
City | bigint | 所在城市 | 6081949 |
constellation | string | 星座 | 射手座 |
样例:
user_id | sex | city | constellation |
---|---|---|---|
2 | 1 | 6411949 | 狮子座 |
12 | 1 | 6412149 | 摩羯座 |
2. 用户申购赎回数据
用户申购赎回数据表: user_balance_table 。里面有 2013-07-01 至 2014-08-31 申购和赎回信息、以及所有的子类目信息, 数据经过脱敏处理。脱敏之后的数据,基本保持了原数据趋势。数据主要包括用户操作时间和操作记录,其中操作记录包括申购和赎回两个部分。金额的单位是分,即 0.01 元人民币。 如果用户今日消费总量为0,即consume_amt=0,则四个字类目为空。
表格 2 :用户申购赎回数据
列名 | 类型 | 含义 | 示例 |
---|---|---|---|
user_id | bigint | 用户 id | 1234 |
report_date | string | 日期 | 20140407 |
tBalance | bigint | 今日余额 | 109004 |
yBalance | bigint | 昨日余额 | 97389 |
total_purchase_amt | bigint | 今日总购买量 = 直接购买 + 收益 | 21876 |
direct_purchase_amt | bigint | 今日直接购买量 | 21863 |
purchase_bal_amt | bigint | 今日支付宝余额购买量 | 0 |
purchase_bank_amt | bigint | 今日银行卡购买量 | 21863 |
total_redeem_amt | bigint | 今日总赎回量 = 消费 + 转出 | 10261 |
consume_amt | bigint | 今日消费总量 | 0 |
transfer_amt | bigint | 今日转出总量 | 10261 |
tftobal_amt | bigint | 今日转出到支付宝余额总量 | 0 |
tftocard_amt | bigint | 今日转出到银行卡总量 | 10261 |
share_amt | bigint | 今日收益 | 13 |
category1 | bigint | 今日类目 1 消费总额 | 0 |
category2 | bigint | 今日类目 2 消费总额 | 0 |
category3 | bigint | 今日类目 3 消费总额 | 0 |
category4 | bigint | 今日类目 4 消费总额 | 0 |
注 1 :上述的数据都是经过脱敏处理的,收益为重新计算得到的,计算方法按照简化后的计算方式处理,具体计算方式在下节余额宝收益计算方式中描述。
注 2 :脱敏后的数据保证了今日余额 = 昨日余额 + 今日申购 – 今日赎回,不会出现负值。
样例:
user_id | report_date | tBalance | yBalance | total_purchase_amt | direct_purchase_amt | purchase_bal_amt | purchase_bank_amt | total_redeem_amt | consume_amt | transfer_amt | tftobal_amt | tftocard_amt | share_amt | category1 | category2 | category3 | category4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 20140805 | 20385 | 20383 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | ||||
1 | 20140808 | 20391 | 20389 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
3.收益率表
收益表为余额宝在 14 个月内的收益率表: mfd_day_share_interest 。具体字段如表格 3 中所示
表格 3 收益率表
列名 | 类型 | 含义 | 示例 |
---|---|---|---|
mfd_date | string | 日期 | 20140102 |
mfd_daily_yield | double | 万份收益,即 1 万块钱的收益。 | 1.5787 |
mfd_7daily_yield | double | 七日年化收益率( % ) | 6.307 |
样例:
mfd_date | mfd_daily_yield | mfd_7daily_yield |
---|---|---|
20130701 | 1.5787 | 6.307 |
20130702 | 1.5461 | 6.174 |
4.上海银行间同业拆放利率(Shibor)
银行间拆借利率表是 14 个月期间银行之间的拆借利率(皆为年化利率): mfd_bank_shibor 。具体字段如下表格 4 所示: 表格 4 银行间拆借利率表
列名 | 类型 | 含义 | 示例 |
---|---|---|---|
mfd_date | String | 日期 | 20140102 |
Interest_O_N | Double | 隔夜利率(%) | 2.8 |
Interest_1_W | Double | 1周利率(%) | 4.25 |
Interest_2_W | Double | 2周利率(%) | 4.9 |
Interest_1_M | Double | 1个月利率(%) | 5.04 |
Interest_3_M | Double | 3个月利率(%) | 4.91 |
Interest_6_M | Double | 6个月利率(%) | 4.79 |
Interest_9_M | Double | 9个月利率(%) | 4.76 |
Interest_1_Y | Double | 1年利率(%) | 4.78 |
样例:
mfd_date | Interest_O_N | Interest_1_W | Interest_2_W | Interest_1_M | Interest_3_M | Interest_6_M | Interest_9_M | Interest_1_Y |
---|---|---|---|---|---|---|---|---|
20130701 | 4.456 | 5.423 | 6.04 | 6.88 | 5.295 | 4.239 | 4.282 | 4.4125 |
20130702 | 3.786 | 4.75 | 5.074 | 5.8 | 5.211 | 4.2344 | 4.2808 | 4.407 |
5.收益计算方式
本赛题的余额宝收益方式,主要基于实际余额宝收益计算方法,但是进行了一定的简化,此处计算简化的地方如下:
首先,收益计算的时间不再是会计日,而是自然日,以 0 点为分隔,如果是 0 点之前转入或者转出的金额算作昨天的,如果是 0 点以后转入或者转出的金额则算作今天的。
然后,收益的显示时间,即实际将第一份收益打入用户账户的时间为如下表格,以周一转入周三显示为例,如果用户在周一存入 10000 元,即 1000000 分,那么这笔金额是周一确认,周二是开始产生收益,用户的余额还是 10000 元,在周三将周二产生的收益打入到用户的账户中,此时用户的账户中显示的是 10001.1 元,即 1000110 分。其他时间的计算按照表格中的时间来计算得到。 表格 5 : 简化后余额宝收益计算表
转入时间 | 首次显示收益时间 |
---|---|
周一 | 周三 |
周二 | 周四 |
周三 | 周五 |
周四 | 周六 |
周五 | 下周二 |
周六 | 下周三 |
周天 | 下周三 |
6.选手需要提交的结果表:
表 格 6 选手提交结果表: tc_comp_predict_table
字段 | 类型 | 含义 | 示例 |
---|---|---|---|
report_date | bigint | 日期 | 20140901 |
purchase | bigint | 申购总额 | 40000000 |
redeem | bigint | 赎回总额 | 30000000 |
每一行数据是一天对申购、赎回总额的预测值, 2014 年 9 月每天一行数据,共 30 行数据。 Purchase 和 redeem 都是金额数据,精确到分,而不是精确到元。 评分数据格式要求与“选手结果数据样例文件”一致,结果表命名为:tc_comp_predict_table, 字段之间以逗号为分隔符,格式如下图:

7.评估指标
评估指标的设计主要期望选手对未来 30 天内每一天申购和赎回的总量数据预测的越准越好,同时考虑到可能存在的多种情况。譬如有些选手在 30 天中 29 天预测都是非常精准的但是某一天预测的结果可能误差很大,而有些选手在 30 天中每天的预测都不是很精准误差较大,如果采用绝对误差则可能导致前者的成绩比后者差,而在实际业务中可能更倾向于前者。所以最终选用积分式的计算方法:每天的误差选用相对误差来计算,然后根据用户预测申购和赎回的相对误差,通过得分函数映射得到一个每天预测结果的得分,将 30 天内的得分汇总,然后结合实际业务的倾向,对申购赎回总量预测的得分情况进行加权求和,得到最终评分。具体的操作如下:
- 计算所有用户在测试集上每天的申购及赎回总额与实际情况总额的误差。

- 申购预测得分与 Purchase相关,赎回预测得分与 Redeem-i 相关 , 误差与得分之间的计算公式不公布,但保证该计算公式为单调递减的,即误差越小,得分越高,误差与大,得分越低。当第 i 天的申购误差 Purchase-i =0 ,这一天的得分为 10 分;当 Purchase-i > 0.3 ,其得分为 0 。
- 最后公布总积分 = 申购预测得分 *45%+ 赎回预测得分 *55% 。
样例:
user_id | report_date | tBalance | yBalance | total_purchase_amt | direct_purchase_amt | purchase_bal_amt | purchase_bank_amt | total_redeem_amt | consume_amt | transfer_amt | tftobal_amt | tftocard_amt | share_amt | category1 | category2 | category3 | category4 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 20140805 | 20385 | 20383 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | ||||
1 | 20140808 | 20391 | 20389 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 |
数据集版权许可协议
Deed – Attribution-ShareAlike 4.0 International – Creative Commons