关于人工智能:4大类11种常见的时间序列预测方法总结和代码示例

3次阅读

共计 6370 个字符,预计需要花费 16 分钟才能阅读完成。

本篇文章将总结工夫序列预测办法,并将所有办法分类介绍并提供相应的 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
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
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 阶的自回归模型。


#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(p) 和 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 是差分整合挪动均匀自回归模型 Autoregressive Integrated Moving Average model 的首字母缩写。它联合了自回归 (AR) 和挪动均匀模型 (MA) 以及为了使序列安稳而对序列的差分预处理过程,这个过程称为积分 (I)。ARIMA 模型的简略数学示意如下:

其中 y′t 是差分级数。右侧的“预测变量”包含滞后值和滞后误差。咱们称之为 ARIMA(p,d,q) 模型。

这里,p 是自回归局部的阶数,d 是所波及的一阶差分水平,q 是挪动均匀局部的阶数。

ACF 和 PACF 图在求 p 和 q 阶中的意义:

  • 为了找到 AR(p) 模型的阶 p:咱们预计 ACF 图会逐步减小,同时 PACF 在 p 显著滞后后会急剧下降或切断。
  • 为了找到 MA(q) 模型的阶 p:咱们预计 PACF 图将逐步减小,同时 ACF 应该在某些 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 in differences”)。

咱们将其称为 VAR(p) 模型,即 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(p) 和 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)

Vector Autoregression Moving-Average with Exogenous Regressors (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)

总结

在这篇文章中,基本上笼罩了所有次要工夫序列预测的问题。咱们能够把下面提到的办法整顿成以下几个重要的方向:

  • AR:自回归
  • MA:均匀挪动
  • I:差分整合
  • S:季节性
  • V:向量(多维输出)
  • X:外生变量

本文中提到的每种算法基本上都是这几种办法的组合,本文中已将每种的算法都进行了重点的形容和代码的演示,如果你想深刻理解其中的常识请查看相干的论文。

https://www.overfit.cn/post/48b9c34c2b8c4a938e838d3c3616e789

正文完
 0