网上新2体育足球 网上新2体育足球 网上新2体育足球

11 种常见的时间序列预测方法

参考内容:

代码地址:

11 种常见的时间序列预测方法

本文将总结时间序列预测方法,并将所有方法分类介绍,并提供相应的python代码示例。以下是本文将要介绍的方法列表:

1. 使用平滑技术进行时间序列预测

2. 单变量时间序列预测

3. 外生变量的时间序列预测

4. 多元时间序列预测

下面我们一一介绍上述方法,并给出python代码示例

在这里插入图片描述

1. 指数平滑

指数平滑是过去观测值的加权平均值,随着观测值变老,权重呈指数衰减。换言之,观察时间越近,相关权重越高。它可以快速产生可靠的预测,适用于广泛的时间序列。

简单指数平滑:此方法适用于预测没有明确趋势或季节性模式的单变量时间序列数据。简单指数平滑将下一个时间步建模为先前时间步的观测值的指数加权线性函数。

它采用一个称为 alpha (a) 的参数,也称为平滑因子或平滑系数,它控制来自先前时间步长的观测值的影响呈指数衰减的速率,即权重减小的速率。a 通常设置为 0 到 1 之间的值。较大的值意味着模型主要关注最近过去的观察,而较小的值意味着在进行预测时会考虑更多的历史。一个简单的指数平滑时间序列的简单数学解释如下所示:

在这里插入图片描述

# SES
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-Winters 方法就会扩展传统的 Holt 方法来捕捉季节性。Holt-Winters 的季节性方法由一个预测方程和三个平滑方程组成——一个用于水平时间序列预测方法,一个用于趋势,一个用于季节性分量,并带有相应的平滑参数 α、β 和 γ。

此方法有两种变体,它们在季节性成分的性质上有所不同。当季节变化在整个系列中大致恒定时,首选加法方法,当季节变化与系列水平成比例变化时时间序列预测方法,首选乘法方法。

# HWES
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 阶的自回归模型。

#AR
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模型的简单数学表示如下:

在这里插入图片描述

这里,εt 是白噪声。我们称其为 MA(q) 模型,即 q 阶移动平均模型。

# MA
from statsmodels.tsa.arima.model import ARIMA
from random import random
# contrived dataset
data = [x + random() for x in range(1, 100)]
# fit model
model = ARIMA(data, order=(0, 0, 1))

正弦函数序列预测问题_时间序列预测方法_序列 方法

model_fit = model.fit() # make prediction yhat = model_fit.predict(len(data), len(data)) print(yhat)

需要注意的是,这里提到的移动平均法不要和时间序列的移动平均计算混淆,因为两者是不同的概念。

5. 自回归移动平均模型 (ARMA)

在 AR 模型中,我们使用变量的过去值和过去的预测误差或残差的线性组合来预测感兴趣的变量。它结合了自回归 (AR) 和移动平均 (MA) 模型。

AR部分涉及回归变量本身的滞后(即过去)值。MA部分涉及将误差项建模为过去不同时间同时发生的误差项的线性组合。模型的符号包括将 AR§ 和 MA(q) 模型的顺序指定为 ARMA 函数的参数,例如 ARMA(p,q)。ARMA 模型的简单数学表示如下所示:

在这里插入图片描述

# ARMA 
from statsmodels.tsa.arima.model import ARIMA
from random import random
# contrived dataset
data = [random() for x in range(1, 100)]
# fit model
model = ARIMA(data, order=(2, 0, 1))
model_fit = model.fit()
# make prediction
yhat = model_fit.predict(len(data), len(data))
print(yhat)

6. 微分积分移动平均自回归模型(ARIMA)

如果我们将差分与自回归和移动平均模型结合起来,我们会得到一个 ARIMA 模型。ARIMA 是自回归综合移动平均模型的首字母缩写。它将自回归 (AR) 和移动平均模型 (MA) 与序列的差分预处理过程相结合,使序列平稳,这一过程称为积分 (I)。ARIMA 模型的简单数学表示如下:

在这里插入图片描述

其中 y't 是差异系列。右边的“预测变量”包括滞后值和滞后误差。我们称之为 ARIMA(p,d,q) 模型。

这里,p 是自回归部分的阶数,d 是所涉及的一阶差分程度,q 是移动平均部分的阶数。

ACF 和 PACF 图在寻找 p 和 q 阶时的意义:

# ARIMA 
from statsmodels.tsa.arima.model import ARIMA
from random import random
# contrived dataset
data = [x + random() for x in range(1, 100)]
# fit model
model = ARIMA(data, order=(1, 1, 1))

序列 方法_正弦函数序列预测问题_时间序列预测方法

model_fit = model.fit() # make prediction yhat = model_fit.predict(len(data), len(data), typ='levels') print(yhat)

7. 季节性 ARIMA (SARIMA)

ARIMA 模型还能够对广泛的季节性数据进行建模。季节性 ARIMA 模型是通过在 ARIMA 模型中包含额外的季节性项而形成的。

在这里插入图片描述

这里,m = 每个时间季节的步数。我们对模型的季节性部分使用大写符号,对模型的非季节性部分使用小写符号。

它将 ARIMA 模型与在季节性数据级别执行相同的自回归、差分和移动平均建模的能力相结合。

# SARIMA 
from statsmodels.tsa.statespace.sarimax import SARIMAX
from random import random
# contrived dataset
data = [x + random() for x in range(1, 100)]
# fit model
model = SARIMAX(data, order=(1, 1, 1), seasonal_order=(0, 0, 0, 0))
model_fit = model.fit(disp=False)
# make prediction
yhat = model_fit.predict(len(data), len(data))
print(yhat)

8. 带有外生变量的 SARIMA (SARIMAX)

SARIMAX模型是传统SARIMA模型的扩展,包括外生变量的建模,是Seasonal Autoregressive Integrated Moving-Average with Exogenous Regressors的缩写

外生变量是其值在模型之外确定并强加于模型的变量。它们也称为协变量。外生变量的观察在每个时间步都直接包含在模型中,并且与用于主要内生序列的模型不同。

SARIMAX 方法也可用于通过包含外生变量(例如 ARX、MAX、ARMAX 和 ARIMAX)对其他变化进行建模。

# SARIMAX 
from statsmodels.tsa.statespace.sarimax import SARIMAX
from random import random
# contrived dataset
data1 = [x + random() for x in range(1, 100)]
data2 = [x + random() for x in range(101, 200)]
# fit model
model = SARIMAX(data1, exog=data2, order=(1, 1, 1), seasonal_order=(0, 0, 0, 0))
model_fit = model.fit(disp=False)

序列 方法_正弦函数序列预测问题_时间序列预测方法

# make prediction exog2 = [200 + random()] yhat = model_fit.predict(len(data1), len(data1), exog=[exog2]) print(yhat)

9. 向量自回归 (VAR)

VAR 模型是单变量自回归模型的推广,用于预测时间序列向量或多个并行时间序列,例如多变量时间序列。它是系统中每个变量的方程。

如果序列是平稳的,则可以通过将 VAR 直接拟合到数据来预测它们(称为“VAR in levels”)。如果序列是非平稳的,我们取数据中的差异使其平稳,然后拟合 VAR 模型(称为“差异中的 VAR”)。

我们称其为 VAR§ 模型,即 p 阶向量自回归模型。

# VAR 
from statsmodels.tsa.vector_ar.var_model import VAR
from random import random
# contrived dataset with dependency
data = list()
for i in range(100):
  v1 = i + random()
  v2 = v1 + random()
  row = [v1, v2]
  data.append(row)
# fit model
model = VAR(data)
model_fit = model.fit()
# make prediction
yhat = model_fit.forecast(model_fit.y, steps=1)
print(yhat)

10. 矢量自回归移动平均模型(VARMA)

VARMA 方法是 ARMA 对多个并行时间序列的扩展,例如多元时间序列。具有有限阶 MA 误差项的有限阶 VAR 过程称为 VARMA。

该模型的公式将 AR§ 和 MA(q) 模型的阶指定为 VARMA 函数的参数,例如 VARMA(p,q)。VARMA 模型也可以与 VAR 或 VMA 模型一起使用。

# VARMA 
from statsmodels.tsa.statespace.varmax import VARMAX
from random import random
# contrived dataset with dependency
data = list()
for i in range(100):

时间序列预测方法_正弦函数序列预测问题_序列 方法

v1 = random() v2 = v1 + random() row = [v1, v2] data.append(row) # fit model model = VARMAX(data, order=(1, 1)) model_fit = model.fit(disp=False) # make prediction yhat = model_fit.forecast() print(yhat)

11. 带有外生变量的向量自回归移动平均模型(VARMAX)

具有外生回归量的向量自回归移动平均 (VARMAX) 是 VARMA 模型的扩展,该模型还包括使用外生变量进行建模。它是 ARMAX 方法对多个并行时间序列的推广,是 ARMAX 方法的多变量版本。

VARMAX 方法还可用于对包含外生变量(例如 VARX 和 VMAX)的包含模型进行建模。

# VARMAX 
from statsmodels.tsa.statespace.varmax import VARMAX
from random import random
# contrived dataset with dependency
data = list()
for i in range(100):
  v1 = random()
  v2 = v1 + random()
  row = [v1, v2]
  data.append(row)
data_exog = [x + random() for x in range(100)]
# fit model
model = VARMAX(data, exog=data_exog, order=(1, 1))
model_fit = model.fit(disp=False)
# make prediction
data_exog2 = [[100]]
yhat = model_fit.forecast(exog=data_exog2)
print(yhat)

总结

在本文中,基本上涵盖了所有主要的时间序列预测问题。我们可以将上述方法组织成以下几个重要方向:

本文中提到的每个算法,基本上都是这些方法的组合。在本文中,每个算法都在代码中进行了描述和演示。如果您想了解更多信息,请查看相关论文。