Numpy Python ARIMA外生变量的样本外预测

Numpy Python ARIMA外生变量的样本外预测

在时间序列分析中,ARIMA模型是一种常用的模型。它能够对一个序列进行自回归和滑动平均过程的建模,使得对序列的预测更加准确。而外生变量则是指外部的影响因素,它们并不属于我们要建模的序列,但它们可以对序列的预测产生影响。在本文中,我们将介绍如何使用Numpy和Python对ARIMA模型进行外生变量的样本外预测。

阅读更多:Numpy 教程

ARIMA模型基础

在了解如何使用外生变量对ARIMA模型进行预测之前,我们需要先掌握ARIMA模型的基础知识。

自回归过程

自回归是指一个时间序列的值与它自身在前一时刻的值之间的关系。它可以用AR(p)模型进行建模,其中p表示自回归项的数量。AR(p)模型的数学形式为:

Y_t=c+\phi_1Y_{t-1}+\phi_2Y_{t-2}+…+\phi_pY_{t-p}+\epsilon_t

其中,Yt 是时间序列在时刻 t 的值,c 是常数,ϕ1, …, ϕp 是自回归系数,而εt是白噪声。

滑动平均过程

滑动平均是指一个时间序列的值是与其自身的随机误差有关的线性组合。它可以用MA(q)模型进行建模,其中q表示滑动平均项的数量。MA(q)模型的数学形式为:

Y_t=c+\theta_1\epsilon_{t-1}+\theta_2\epsilon_{t-2}+…+\theta_q\epsilon_{t-q}+\epsilon_t

其中,Yt 是时间序列在时刻 t 的值,c 是常数,θ1, …, θq 是滑动平均系数,而εt是白噪声。

ARMA模型

ARMA模型是AR和MA模型的组合,用来描述时间序列的自回归和滑动平均项。ARMA(p, q)模型的数学形式为:

Y_t=c+\phi_1Y_{t-1}+\phi_2Y_{t-2}+…+\phi_pY_{t-p}+\theta_1\epsilon_{t-1}+\theta_2\epsilon_{t-2}+…+\theta_q\epsilon_{t-q}+\epsilon_t

其中Yt 是时间序列在时刻 t 的值,c 是常数,ϕ1, …, ϕp 是自回归系数,θ1, …, θq是滑动平均系数,而εt是白噪声。

差分

差分是对时间序列进行平稳化处理的一种方法,使得序列的均值和方差保持不变。如果有必要,我们可以对时间序列进行一阶差分,即将每个时间点的值减去上一个时间点的值

如果序列仍不平稳,我们可以进行二阶或更高阶差分。

ARIMA模型

ARIMA模型是ARMA模型的扩展,当原始序列不平稳时,我们可以对序列进行差分,然后再应用ARMA模型。ARIMA模型的数学形式为:

其中,Yt’是差分后的时间序列,在时刻t’的差分值,c是常数,ϕ1, …, ϕp是自回归系数,θ1, …, θq是滑动平均系数,而εt是白噪声。

外生变量

在ARIMA模型中,我们通常假设我们要预测的时间序列只受内部因素的影响。然而,在现实世界中,往往还有一些外部因素会对我们要预测的时间序列产生影响。这些外部因素,我们就称之为外生变量。

外生变量可能来自多个方面,比如经济指标、天气因素、政治事件等。以股票价格为例,考虑影响因素不仅包括过去的价格,还包括外部经济指标比如GDP、通胀率等。

如果我们的模型只考虑了序列内部的因素,那么在预测时就会忽略这些重要的外部因素。因此,如果我们希望更准确地预测时间序列,就应该将外生变量考虑进去。

外生变量的样本外预测

为了更好地描述外生变量对序列的影响,我们需要将这些外生变量包含进模型中。在ARIMA模型中,我们可以将外生变量作为一个 regressor 来处理。在训练时,我们使用历史数据来估计 ARIMA 模型,包括自回归系数(AR),滑动平均系数(MA)和差分相关的参数等。与此同时,我们计算每个时间点的外生变量(或外生变量的差分值),然后使用这些变量作为模型的regressor。

在样本外预测时,我们需要在模型中使用外生变量的样本外预测值。这可以通过从历史数据中获取有关外生变量的样本外预测值进行计算。这些预测值应该对应于我们想要在序列外预测的时间点。

假设现在我们要预测股票价格,并且我们考虑到了外生变量,比如某个公司的利润。在训练模型时,我们使用历史股票价格和历史利润来拟合ARIMA模型,并得到了自回归系数、滑动平均系数等。在样本外预测时,我们需要获得未来的利润预测。如果我们认为未来的利润预测将保持在一个常数水平,那么我们可以使用这个预测来计算样本外预测值。

示例

让我们使用Python和Numpy实现外生变量的样本外预测。

首先,我们需要从历史数据中加载我们想要建模的序列及其外生变量。我们可以使用pandas库来加载数据。为了简单起见,我们在这里假设我们要预测股票价格,并且外生变量是某个公司的利润。

import pandas as pd

# 加载数据
data = pd.read_csv('data.csv', index_col='Date')
price = data['Price']
profit = data['Profit']

接下来,我们需要对数据进行预处理。首先,在建模之前,我们需要将序列进行一阶差分。其次,在样本外预测时,我们还需要进行预测的差分操作。

import numpy as np

# 一阶差分
diff_price = np.diff(price)
diff_profit = np.diff(profit)

# 训练集和测试集
train_price = diff_price[:-12]
train_profit = diff_profit[:-12]
test_price = diff_price[-12:]
test_profit = diff_profit[-12:]

接下来,我们可以使用ARIMA模型来对序列进行建模。

from statsmodels.tsa.arima.model import ARIMA

# 建模
model = ARIMA(train_price, exog=train_profit, order=(1,1,1))
model_fit = model.fit()

最后,我们可以使用训练好的模型进行样本外预测。

# 样本外预测
pred_diff_price = model_fit.predict(start=len(train_price), end=len(train_price)+len(test_price)-1, exog=test_profit)

# 对预测结果进行差分
pred_price = np.concatenate([[price[-13] + pred_diff_price[0]], price[-12:]]) + np.cumsum(pred_diff_price)

总结

本文介绍了ARIMA模型的基本知识,以及如何将外生变量考虑进模型中进行样本外预测。我们还给出了Python和Numpy的示例代码。希望这些内容对你有所帮助!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程