本篇文章将总结时间序列预测方法,并将所有方法分类介绍并提供相应的python代码示例,以下是本文将要介绍的方法列表:
1、使用平滑技术进行时间序列预测
- 指数平滑
- Holt-Winters 法
2、单变量时间序列预测
- 自回归 (AR)
- 移动平均模型 (MA)
- 自回归滑动平均模型 (ARMA)
- 差分整合移动平均自回归模型 (ARIMA)
- 季节性 ARIMA (SARIMA)
3、外生变量的时间序列预测
- 包含外生变量的SARIMAX (SARIMAX)
- 具有外生回归量的向量自回归移动平均 (VARMAX)
4、多元时间序列预测
- 向量自回归 (VAR)
- 向量自回归移动平均 (VARMA)
下面我们对上面的方法一一进行介绍,并给出python的代码示例
1、指数平滑Exponential Smoothing指数平滑法是过去观测值的加权平均值,随着观测值变老,权重呈指数会衰减。换句话说,观察时间越近相关权重就越高。它可以快速生成可靠的预测,并且适用于广泛的时间序列。
简单指数平滑:此方法适用于预测没有明确趋势或季节性模式的单变量时间序列数据。简单指数平滑法将下一个时间步建模为先前时间步的观测值的指数加权线性函数。
它需要一个称为 alpha (a) 的参数,也称为平滑因子或平滑系数,它控制先前时间步长的观测值的影响呈指数衰减的速率,即控制权重减小的速率。 a 通常设置为 0 和 1 之间的值。较大的值意味着模型主要关注最近的过去观察,而较小的值意味着在进行预测时会考虑更多的历史。简单指数平滑时间序列的简单数学解释如下所示:
# SES example
from statsmodels.tsa.holtwinters import SimpleExpSmoothing
from random import random
# contrived dataset
data = [x random() for x in range(1, 100)]
# fit model
model = SimpleExpSmoothing(data)
model_fit = model.fit()
# make prediction
yhat = model_fit.predict(len(data), len(data))
print(yhat)
2、Holt-Winters 法
在 1957 年初,Holt扩展了简单的指数平滑法,使它可以预测具有趋势的数据。这种被称为 Holt 线性趋势的方法包括一个预测方程和两个平滑方程(一个用于水平,一个用于趋势)以及相应的平滑参数 α 和 β。后来为了避免趋势模式无限重复,引入了阻尼趋势法,当需要预测许多序列时,它被证明是非常成功和最受欢迎的单个方法。除了两个平滑参数之外,它还包括一个称为阻尼参数 φ 的附加参数。
一旦能够捕捉到趋势,Holt-Winters 法扩展了传统的Holt法来捕捉季节性。 Holt-Winters 的季节性方法包括预测方程和三个平滑方程——一个用于水平,一个用于趋势,一个用于季节性分量,并具有相应的平滑参数 α、β 和 γ。
此方法有两种变体,它们在季节性成分的性质上有所不同。当季节变化在整个系列中大致恒定时,首选加法方法,而当季节变化与系列水平成比例变化时,首选乘法方法。
# HWES example
from statsmodels.tsa.holtwinters import ExponentialSmoothing
from random import random
# contrived dataset
data = [x random() for x in range(1, 100)]
# fit model
model = ExponentialSmoothing(data)
model_fit = model.fit()
# make prediction
yhat = model_fit.predict(len(data), len(data))
print(yhat)
3、自回归 (AR)
在 AR 模型中,我们使用变量过去值的线性组合来预测感兴趣的变量。 术语自回归表明它是变量对自身的回归。 AR模型的简单数学表示如下:
这里,εt 是白噪声。 这类似于多元回归,但是使用 yt 的滞后值作为预测变量。 我们将其称为 AR(p) 模型,即 p 阶的自回归模型。
from statsmodels.tsa.ar_model import AutoReg
from random import random
# contrived dataset
data = [x random() for x in range(1, 100)]
# fit model
model = AutoReg(data, lags=1)
model_fit = model.fit()
# make prediction
yhat = model_fit.predict(len(data), len(data))
print(yhat)
4、移动平均模型(MA)
与在回归中使用预测变量的过去值的 AR 模型不同,MA 模型在类似回归的模型中关注过去的预测误差或残差。 MA模型的简单数学表示如下: