时间序列预测方法最全总结!
时间序列预测就是利用过去一段时间的数据来预测未来一段时间内的信息,包括连续型预测(数值预测,范围估计)与离散型预测(事件预测)等,具有非常高的商业价值。
01
基本规则法
图 | 抽取时序的周期进行拟合
02
传统参数法
首先需要对观测值序列进行平稳性检测,如果不平稳,则对其进行差分运算直到差分后的数据平稳;
在数据平稳后则对其进行白噪声检验,白噪声是指零均值常方差的随机平稳序列;
如果是平稳非白噪声序列就计算ACF(自相关系数)、PACF(偏自相关系数),进行ARMA等模型识别,
对已识别好的模型,确定模型参数,最后应用预测并进行误差分析。
03
时间序列分解
长期趋势(Secular trend, T):长期趋势指现象在较长时期内持续发展变化的一种趋向或状态。
季节变动(Seasonal Variation, S):季节波动是由于季节的变化引起的现象发展水平的规则变动
循环波动(Cyclical Variation, C):循环波动指以若干年为期限,不具严格规则的周期性连续变动
不规则波动(Irregular Variation, I): 不规则波动指由于众多偶然因素对时间序列造成的影响
图 | 原始时间序列
时间序列分解模型
// 加法模型
// 乘法模型
// 加乘混合模型
以上两种方式的混合
时间序列的长期趋势分析
图 | 拟合的时序趋势
// 移动平均法
// 时间回归法
使用回归分析中的最小二乘法,以时间t或t的函数为自变量拟合趋势方程。常用的趋势方程如下:
一阶线性方程
二次(多次)方程曲线
指数曲线
时间序列季节变动分析
时间序列短期会受季节等短期因素影响,从而存在一些周期性
图 | 拟合的季节变动
// 乘法模型-季节指数
乘法模型中的季节成分通过季节指数来反映。常用的方法称为移动平均趋势剔除法。步骤如下:
计算一动平均值
从序列中剔除移动平均值
时间序列循环变动分析
如果有季节成分,计算季节指数,得到季节调整后的数据TCI
根据趋势方程从季节调整后的数据中消除长期趋势,得到序列CI
对消去季节成分和趋势值的序列CI进行移动平均以消除不规则波动,得到循环变动成分C
图 | 拟合的长期循环变动
时间序列不规则变动分析
图 | 拟合的不规则变动
Prophet
04
机器学习
// 单步预测
// 多步预测
// 多变量预测
05
深度学习
// 循环神经网络
// 卷积神经网络
数值缩放:将笛卡尔坐标系下的时间序列缩放到[0,1]或[-1,1]区间
极坐标转换:使用坐标变换公式,将笛卡尔坐标系序列转化为极坐标系时间序列
角度和/差的三角函数变换:若使用两角和的cos函数则得到GASF,若使用两角差的cos函数则得到GADF
在语音信号处理场景使用很广泛,其目标主要将时间序列转为时频图像,进而采用卷积网络进行特征分析。
// 时间卷积网络
// 基于注意力机制的模型
在RNN中分析时间序列需要我们一步步的顺序处理从 t-n 到 t 的所有信息,而当它们相距较远(n非常大)时RNN的效果常常较差,且由于其顺序性处理效率也较低。基于注意力机制(Attention)的模型,采用跳步的方式计算每个数值之间的两两关联,然后组合这些关联分数得到一个加权的表示。该表示通过前馈神经网络的学习,可以更好的考虑到时序的上下文的信息。
CNN捕捉短期局部依赖关系 RNN捕捉长期宏观依赖关系 Attention为重要时间段或变量加权
06
一些需要注意的难点
理解时间序列预测问题是要用历史数据预测未来数据
时间序列问题的训练集、测试集划分
特征工程方法及过程
如何转化为监督学习数据集
LSTM计算过程理解,包括输入输出维度、参数数量等
seq2seq过程的理解,decoder实现
attention注意力机制的原理及实现,包括encoder-decoder attention, self attention, multi-head attention等
时间卷积网络的含义,dilated-convolution 和 causal-convolution
prophet预测原理,各参数对模型拟合效果、泛化效果的影响
时间序列基本规则法中周期因子得计算过程
传统方法如周期因子、线性回归、ARMA等的预测结果表现为,预测趋势大致正确,但对波动预测不理想,体现在波动的幅度差异、相位偏移。
时间序列分解方法。理解加法模型和乘法模型,判断分解模型的选取及分解技巧。
// 工具
tslearn:开源的时间序列机器学习python工具包
tsfresh:开源的时间序列特征提取python工具包
pyts:开源的时间序列分类Python工具包。提供预处理工具及若干种时间序列分类算法