一、背景描述

蚂蚁金服拥有上亿会员并且业务场景中每天都涉及大量的资金流入和流出,面对如此庞大的用户群,资金管理压力会非常大。在既保证资金流动性风险最小,又满足日常业务运转的情况下,精准地预测资金的流入流出情况变得尤为重要。借助阿里天池《资金流入流出预测》的比赛题目,利用ARIMA模型预测未来一个月的资金流入流出情况。

二、案例数据

本次建模使用的数据是20130701 至 20140831的用户申购赎回数据,来自阿里天池赛题数据,来源网址如下:

https://tianchi.aliyun.com/competition/entrance/231573/information

三、问题分析

根据竞赛题目要求,对20140901-20140930每日的申购赎回总量进行预测。这是一个比较典型的经济时间序列预测问题,一般时间序列包含四种变动要素,长期趋势要素T,循环要素C,季节要素S以及不规则要素I,本次预测对时间序列进行分解,直接针对“total_purchase_amt”和“total_redeem_amt”的数据进行操作,对要求结果进行预测。

四、预测分析过程

读取原始数据表,对数据进行初步了解。

导入模块




arima模型的预测r语言 arima模型预测实例_拟合


读取数据


arima模型的预测r语言 arima模型预测实例_arima模型_02


绘制时间序列图


arima模型的预测r语言 arima模型预测实例_数据_03


从时序图可以发现14年2月之前,“total_purchase_amt”呈现增长的趋势,14年3月之后数据比较平稳,而在14年1月到3月之间数据波动浮动较大,可能是受到年末,元旦以及春节假期的影响,所以只截取14年4月1号到8月31号的数据。

截取数据


arima模型的预测r语言 arima模型预测实例_arima模型_04


对时间序列进行分解


arima模型的预测r语言 arima模型预测实例_数据_05


arima模型的预测r语言 arima模型预测实例_arima模型的预测r语言_06


从图中可以看到,原序列有明显的周期性,而且是以七天为一个周期。因此我只对趋势序列和残差序列去拟合,同时认为这样的周期性会延伸至2014-09-01~2014-09-30的预测集上。

分别对趋势序列和残差序列进行差分和ADF检验


arima模型的预测r语言 arima模型预测实例_数据_07


从 ADF 的检验结果来看,趋势序列和残差序列都已经比较平稳了,因此不需要进行差分。

趋势序列和残差序列的ACF、PACF:


arima模型的预测r语言 arima模型预测实例_arima模型的预测r语言_08


arima模型的预测r语言 arima模型预测实例_拟合_09


从上图可以看到:

(1)趋势序列 ACF 有4阶截尾,PACF 有 2 阶拖尾。因此可以选 p=2, q=4。

(2)残差序列 ACF 有3阶拖尾,PACF 有 3 阶截尾。因此可以选 p=3, q=3。

通过拖尾和截尾对模型定阶,具有很强的主观性。因此我这里有使用AIC、BIC准则进行了一次分析:


arima模型的预测r语言 arima模型预测实例_arima模型_10


得到结果为:

trend AIC (1, 0)

trend BIC (1, 0)

residual AIC (2, 4)

residual BIC (2, 4)

模型训练


arima模型的预测r语言 arima模型预测实例_时间序列_11


拟合训练集


arima模型的预测r语言 arima模型预测实例_时间序列_12


从结果来看,模型拟合训练集的效果还是不错的。

进行预测


arima模型的预测r语言 arima模型预测实例_arima模型的预测r语言_13


导出结果


arima模型的预测r语言 arima模型预测实例_arima模型的预测r语言_14


五、总结

(1)经过多次测试,最终提交成绩在110分左右。

(2)通过总量的ARIMA模型进行预测,仅仅只能体现了序列内部数据本身存在的规律,对于一个现实的时间序列问题,忽略了比较多的实际因素的影响作用,例如节假日、用户类型、收益率等因素。