时间序列方法
1、时间序列基本规则法-周期因子法
- 提取时间序列的周期性特征进行预测,参考:时间序列规则法快速入门
- 计算周期因子factors
- 计算base
- 预测=base*factors
- 观察序列,当序列存在周期性时,可以用周期因子法做为baseline
- 在天池竞赛-资金流入流出预测-挑战Baseline-天池大赛-阿里云天池,周期因子可以取得110分+的成绩,排名进500妥妥的。
2、线性回归-利用时间特征做线性回归
- 提取时间的周期性特点做为特征,此时训练集每条样本为"时间特征->目标值",时间序列的依赖关系被剔除,不需要严格依赖滑窗截取训练样本。常见是将时间用0-1哑变量表达,有以下若干种特征:
- 将星期转化为了0-1变量,从周一至周天,独热编码共7个变量
- 将节假日转化为0-1变量,视具体节假日数目,可简单分为两类,"有假日"-"无假日",独热编码共2个变量;或赋予不同编码值,如区分国庆、春节、劳动节等使用1、2、3表示
- 将月初转化为0-1变量,简单分两类表示为"是月初"-"非月初",共2个特征
- 类似的月中、月初可以转化为0-1变量
- 控制时间粒度,区分是weekday or weekend
- 观察序列,当序列存在周期性时,线性回归也可做为baseline
- 在天池竞赛-资金流入流出预测-挑战Baseline-天池大赛-阿里云天池,线性回归可以取得100分+的成绩,应该还没到500,多调节下特征就能进去了。
3、传统时序建模方法,ARMA/ARIMA等线性模型。参考:
- 写给你的金融时间序列分析:基础篇
- 自回归/滑动平均阶数判断 Identifying the orders of AR and MA terms in an ARIMA model 列举了11条一般原则,其中提到:
- 差分方法可消除正相关但同时引入负相关
- AR项可消除正相关,MA项消除负相关
- AR项和MA项作用会相互抵消,通常包含两种要素时可尝试减少某项,避免过拟合
4、时间序列分解,使用加法模型或乘法模型将原始序列拆分为4部分。
- 拆分为4部分:长期趋势变动T、季节变动S(显式周期,固定幅度、长度的周期波动)、循环变动C(隐式周期,周期长不具严格规则的波动)和不规则变动I。参考:
- 乘法模型中SCI均为比例,加法模型中SCI与T有相同量纲。
- 循环变动C较为复杂,短期不体现或归入趋势变化中。
- 两类平滑方法:
- 以滑动平均作为平滑方法提取趋势的seasonal_decompose朴素分解。statsmodels.tsa.seasonal.seasonal_decompose
- 以鲁棒局部加权回归作为平滑方法的STL分解。statsmodels.tsa.seasonal.STL
- 季节性分析。数据中有季节性因素,与整体趋势相比显得比较弱。原文: Investigating Seasonality in a Time Series: A Mystery in Three Parts ;中文:干货 | 季节性的分析才不简单,小心不要在随机数据中也分析出季节性
- 在天池竞赛-资金流入流出预测-挑战Baseline-天池大赛-阿里云天池,时间序列分解方法也能取得很好的成绩。(后面有机会试试这种方法)
5、特征工程着手,时间滑窗改变数据的组织方式,使用xgboost/LSTM模型/时间卷积网络等。参考:
- kaggle商品销量预测1st的思路:特征工程+LGBM/LSTM, 1st place solution | Kaggle
- kaggle商品销量预测5th的思路:特征工程+LGBM/CNN-DNN/seq2seq,5th Place Solution | Kaggle
6、转化为监督学习数据集,使用xgboot/LSTM模型/时间卷积网络/seq2seq(attention_based_model)。参考:
- 如何用Python将时间序列转换为监督学习问题 - 云+社区 - 腾讯云
- Keras中带LSTM的多变量时间序列预测 - 云+社区 - 腾讯云
- 时间卷积网络(TCN) 总结:时序模型不再是递归网络(RNN) 的天下,但作为信息粗暴提取的一种方法,请不要神话CNN !
- 算法上可以引入注意力机制的seq2seq模型,见过纯粹的seq2seq解法,结合注意力机制的还没见过开源代码(可能是搜索不够仔细)。
- seq2seq代码:Kaggle-Competition-Favorita/seq2seq
- 注意力机制资料:
- 台大-李宏毅《Attention_based_model》
- 他们只说注意力机制(Attention Mechanism)不练,还是我来给大家撸代码讲解
- 盛源车:真正的完全图解Seq2Seq Attention模型
- 《Attention is All You Need》浅读(简介+代码)
- 川陀学者:Attention机制详解(二)——Self-Attention与Transformer
- The Illustrated Transformer
- Visualizing A Neural Machine Translation Model (Mechanics of Seq2seq Models With Attention)
7、Facebook-prophet,类似于STL分解思路,因为觉得在控制程度和可解释性上比传统时序模型更有优势,所以单独列车。参考:
- 官网说明(英文)
- 官网notbook(英文)
- 中文推荐 的文章,从原理到使用都有介绍,很良心。张戎:Facebook 时间序列预测算法 Prophet 的研究
- 个人理解,想进一步用好,可以好好看看论文和官网,有空撸遍python的源码
- 理解prior_scale在代码中如何实现控制趋势项、季节项和节假日项
- 对于趋势项参数changepoint_range、changepoint_prior_scale如何影响模型拟合和泛化程度
- 趋势项中的Uncertainty-Intervals(interval_width参数)如何在预测结果使用
- 论文中的"Simulated Historical Forecasts"对应prophet的Diagnostics工具,可以利用该工具做时间序列的交叉验证评价模型准确程度,如何利用该工具调整模型
8、深度学习网络,结合CNN+RNN+Attention,作用各不相同互相配合。目前也只是看了论文,有代码的顺便给出代码链接,代码还没细看。
主要设计思想:
- CNN捕捉短期局部依赖关系
- RNN捕捉长期宏观依赖关系
- Attention为重要时间段或变量加权
- AR捕捉数据尺度变化(没太搞懂啥意思~)
方法:
- LSTNet: 适用于自相关图表现出有明显周期的时间序列,否则与传统方法相当。LSTNet-Pytorch、LSTNet-Keras、LSTNet-Gluon(Mxnet)。
- TPA-LSTM: 改进了attention机制,侧重选择关键变量,而非选择时间步;实验效果说是对周期不明显的时间序列也能有不错效果。TPA-LSTM-Tensorflow
代码
- LSTNet代码解读, BINGO Hong:LSTNet详解
- TPA-LSTM注意力机制, BINGO Hong:TPA注意力机制(TPA-LSTM)
作者:BINGO Hong
链接:https://zhuanlan.zhihu.com/p/67832773