这里,εt 是白噪声。 我们将其称为 MA(q) 模型,即 q 阶移动平均模型。
# MA example
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 example
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 example
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 example
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 example
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 example
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 example
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 example
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:外生变量
本文中提到的每种算法基本上都是这几种方法的组合,本文中已将每种的算法都进行了重点的描述和代码的演示,如果你想深入了解其中的知识请查看相关的论文。
,