Python Sarimax 外生变量

总览

在本文中,我将向你介绍如何使用 python 中的 sarimax 模型与外生变量进行时间序列预测。我们将按照以下步骤进行操作:

  1. 导入所需的库和数据
  2. 数据预处理
  3. 拟合 SARIMA 模型
  4. 添加外生变量
  5. 进行预测

导入所需的库和数据

首先,我们需要导入必要的库和数据。以下是我们将使用的库:

import pandas as pd
import numpy as np
from statsmodels.tsa.statespace.sarimax import SARIMAX

我们还需要加载包含时间序列和外生变量的数据集。你可以使用以下代码导入数据:

data = pd.read_csv('data.csv')

其中,data.csv 是包含时间序列和外生变量的 CSV 文件的路径。确保数据已正确加载,并且你对数据有一定的了解。

数据预处理

在将数据传递给模型之前,我们需要进行一些数据预处理。在这一步骤中,我们将选择与时间序列和外生变量相关的列,并将其转换为适当的格式。

首先,选择时间序列和外生变量的列。假设时间序列位于 'ts' 列,外生变量位于 'exogenous' 列。

time_series = data['ts']
exogenous = data['exogenous']

接下来,我们需要将时间序列和外生变量转换为适当的格式。sarimax 模型要求时间序列是一维的,并且外生变量是二维的。我们可以使用以下代码完成转换:

time_series = np.array(time_series)
exogenous = np.array(exogenous).reshape(-1, 1)

现在,我们已经准备好拟合 SARIMA 模型并添加外生变量了。

拟合 SARIMA 模型

在这一步骤中,我们将使用 sarimax 对时间序列进行拟合。我们还将指定模型的阶数和季节性周期。

order = (1, 0, 0)   # SARIMA 模型的阶数
seasonal_order = (1, 0, 0, 12)   # 季节性周期
model = SARIMAX(time_series, order=order, seasonal_order=seasonal_order)
results = model.fit()

上述代码定义了一个 SARIMA 模型对象,并使用时间序列和指定的阶数和季节性周期进行拟合。results 对象包含了拟合模型的结果。

添加外生变量

在拟合了 SARIMA 模型之后,我们可以通过添加外生变量进一步提高预测的准确性。我们可以使用 sarimax 模型的 exog 参数来指定外生变量。

model = SARIMAX(time_series, exog=exogenous, order=order, seasonal_order=seasonal_order)
results = model.fit()

上述代码中,我们传递了外生变量 exogenousexog 参数,从而将其添加到模型中。

进行预测

最后,我们可以使用拟合好的 SARIMA 模型进行预测。我们可以使用 get_prediction 方法获取预测结果。

forecast_start = len(time_series)
forecast_end = len(time_series) + 12   # 预测未来12个时间步长
forecast = results.get_prediction(start=forecast_start, end=forecast_end, exog=exogenous[forecast_start:forecast_end])

上述代码中,我们定义了预测的起始和结束时间步长,并使用 exog 参数传递了相应的外生变量。

总结

在本文中,我们介绍了如何使用 python 中的 sarimax 模型与外生变量进行时间序列预测。我们按照以下步骤操作:

  1. 导入所需的库和数据
  2. 数据预处理
  3. 拟合 SARIMA 模型
  4. 添加外生变量
  5. 进行预测

如果你按照以上步骤进行操作,你就可以轻松地实现使用外生变量的 SARIMA 模