编辑导语:很多人都用过支付宝中的余额宝功能,可以将资金转入余额宝后产生收益,如果我们对余额宝的申赎进行预测,可以是业务的理解更加的精准;本文是作者分享了关于如何基于时序分析,预测余额宝的申赎金额,我们一起来了解一下吧。
“统计模型用好了,预测准确性也很高。”
今天和大家分享一个14年下半年作者独立负责的、基于时间序列模型的预测项目:余额宝的申赎预测。
一、项目背景
大家都用过余额宝。
用户将资金转入余额宝,在行业上叫“申购”;将资金转出余额宝,或者用余额宝进行转账、购买等,在行业上叫做“赎回”。
总的赎回量大于申购量,对于余额宝来讲,就是净流入;反之是净流出。
好几亿余额宝用户,每天都会发生巨量的申购赎回行为;15年的时候,每天流入流出的规模都在百亿级别;且随着余额宝用户的活跃度不断提升,申赎的规模也不断扩大。
这给余额宝的资金管理带来了巨大的难题。
第一个问题就是,今天(或者近期)余额宝是净流入还是净流出?如果是净流入,基金经理需要将净流入的资金尽可能投资出去,避免滞留手中导致基金收益率下降;如果是净流出,基金经理则需要提前预留到账资金,应对资金赎回压力。
其次的问题是,到底净流入或者净流出的规模有多大?这就是一个典型的预测问题;如果预测的精准,基金经理可以预留比较少的资金安全垫,提升收益率。
因此,我基于余额宝的历史数据,建立了时序模型,预测未来一段时间(7天、14天、30天)以及当天的申赎金额。
随着对业务理解的不断加深,预测模型的精准度也不断提升;最终实现当天预测当天的精准度在99%左右,预测未来7天时间的精准度平均95%以上,预测未来30天的精准度在90%以上。
有意思的是,在15年的5月份,阿里的天池大赛也搞了一个赛题,就是预测余额宝的申赎金额,如下图:
二、余额宝申赎的一些规律
首先讲讲业务在数据上的一些规律,这对建模过程至关重要;每个因素、每个业务规律,都是影响预测准确性的因子,也是模型的业务解释方向。
1. 关于申购
先看申购,先看一个总体转入金额的走势:
申购层面,影响的因素主要有星期周期因素、工资发放因素、阿里活动因素、节假日因素、收益率因素、支付宝的自动转入等。
星期周期:这个是比较明显的因素,由于受到基金特点的影响,在每天15点以后申购的行为将记为次交易日申购;因此周五15点以后的申购将与周一的申购一样,白白浪费周末两天的收益损失,因此周六周日申购很少。
月度工资发放:这个主要和工资的发放有直接关联,很多用户会在发工资后直接转入余额宝,因此工资发放日会带来更多申购;日期往往是1号、10号、15号、月末。
阿里系活动:这个和阿里经常做的活动密切相关。
节假日:和星期因素类似,大型节假日期间申购会丧失收益,因此转入很少,用户会在节假日之前转入。
余额自动转入:很多支付宝用户开通了余额自动转入余额宝,每天凌晨到9点会系统自动转入。
收益率:余额宝收益率的高低会影响大家转入的多少。
为了便于分享,关于影响因素的拆解,主要罗列以上这些。
2. 关于赎回
再看赎回,以下是赎回的金额走势:
在赎回层面,影响的因素主要有星期因素、还信用卡、节假日、消费活跃情况、阿里活动、收益率(及资本市场情况)、转出到卡转账等。
- 星期因素:和申购类似,周末的赎回是延期到账的。因此整体周末的赎回是要远少于申购的;
- 还信用卡:还信用卡日期经常固定在每个月几个比较大的日期,尤其是下旬的还卡金额较多;
- 节假日:在很多节假日前用户会有较多资金需求,倾向转出;
- 消费活跃:很多用户是用余额宝进行支付的。总体消费的活跃上升,会带来余额宝的赎回也上升;
- 阿里活动:主要就是双十一等大促,对余额宝的赎回影响巨大;
- 资本市场:在股市疯涨、IPO重启的时候,打新资金、流入股市的资金对余额宝赎回产生不小影响。
关于余额宝的申赎影响因素,以上是比较主要的一些,暂时分享到这里。
三、模型的建立
模型的核心逻辑,采用的是时间序列的分解法,将每日的申赎结果,认为是四个因素影响的:长期趋势因素、季节因素、星期因素、其他因素。
最后用乘法模型,将每个因素参数相乘:
具体建模过程如下:
1. 数据的预处理
首先进行申购和赎回数据的预处理,进行异常值的剔除,主要包括大额机构的申赎、双十一大促等。
白名单机构的大额申赎,往往单笔金额就好几亿,对模型是有影响的,因此首先要剔除;另外双十一的活动,由于过于低频,且每年情况不一样,也进行数据的剔除。
另外,由于13年余额宝处于飞速发展期,在数据使用上,我直接用14年的数据开始建模,排除业务爆发期的影响,因此大约有8个月的数据作为建模数据。
2. 长期趋势因素的确定
这里的长期因素,其实主要就是上文分析中提到的收益率因素、用户余额宝使用活跃情况等。
从上面的截图中也可以看出,余额宝的申赎金额总体都在上涨趋势中;这里要预测的,就是该趋势。
具体实现上,在做完数据预处理的基础上,进行线性回归模型的建立。
上图其实是个示意图了,数据已经到了17年了。在当时的建模情况下,我使用的数据就是近半年的数据作为长期趋势的预测。
过长的数据做预测,将失去意义,并不能很好反映当前的状况,因为历史数据会有较大干扰。
3. 周期因素的确定
长期趋势因素确定后,用每天数据与长期因素做除法,排除掉长期因素的影响,只剩下周期因素等因素。
这里的周期因素,其实包括了星期和月度因素。
星期因素影响因子的确定,有很多办法,我是将历史同周期进行了求动态均值,即最近3个月平均值。
获得星期的参数后,再次用排除长期趋势的参数除以星期参数,排除星期的影响因素,此时主要是月份的影响因素了。
针对月份的因素做同样的处理,则得到月度的因子参数,如下是申购的:
从这个图中明显看出,1号、10号、15号确实是申购的小高峰。
申购、赎回,基本都是基于相似的逻辑,进行处理。
4. 其他因素的确定
到这里,我们获得了长期趋势因素、月度因素、星期因素的因子。但根据第二章节中提到的,影响申赎的因素,还有节假日、活动等;这对节假日,需要再进行专门性的参数获取。
根本方法和之前也是一致的,用排除长期趋势、周期因素的数据后,专门讲节假日(国庆、春节等)前后的数据拿出来,做参数;但是由于当初是14年,可用的数据不多,因此对于长假的预测效果不是很好,但是3天小长假的数据表现还可以。
5. 预测过程
到这里,基本各类参数的计算,就算完成了。在做预测的时候,按照上述的过程,用各个因素进行乘法计算,即可获得未来一段时间的预测结果。
另外,在实践中,其实还有一个场景更高频一些,就是当天预测当天。比如目前是上午11点,预测今天截止下午3点的申赎;针对这个场景,在原来的模型基础上,做了一些调整,主要是加上了当日的数据走势。
由于能看到实时数据,而且只是预测当天数据,输入模型的数据采用了昨日数据以及当天的情况,因此这个预测精度极高,往往达到99.5%以上。
关于余额宝的申赎预测,就先分享到这里,很多细节内容一方面我已经没有原始数据了,另一方面确实写不完;所以就先把预测的思路框架写这些,欢迎各位小伙伴继续关注~