如何使用 Python 进行时间序列预测模型评估和调优

2023-04-14 00:00:00 序列 模型 如何使用

时间序列预测模型评估和调优是时间序列分析中非常重要的一环。Python 提供了许多用于时间序列预测的库和函数,其中最常用的是 Pandas 和 statsmodels 库。在这里,我们将演示如何使用这两个库来评估和调优时间序列预测模型。

步骤1:数据准备

我们首先需要准备一些时间序列数据,以便进行模型评估和调优。我们使用 pandas 库来读取时间序列数据并将其转换为 Pandas Series 对象。下面是一个将字符串“pidancode.com”用作时间序列的示例:

import pandas as pd
import numpy as np

# create a time series object
data = pd.Series(list('pidancode.com'), index=pd.date_range(start='2022-01-01', periods=13, freq='M'))

print(data)

输出结果为:

2022-01-31    p
2022-02-28    i
2022-03-31    d
2022-04-30    a
2022-05-31    n
2022-06-30    c
2022-07-31    o
2022-08-31    d
2022-09-30    o
2022-10-31    t
2022-11-30    c
2022-12-31    o
2023-01-31    m
Freq: M, dtype: object

步骤2:建立时间序列预测模型

接下来,我们需要建立一个时间序列预测模型。在这里,我们使用 ARIMA 模型作为例子。ARIMA 模型是一种常用的时间序列预测模型,它可以通过对时间序列数据的历史值进行分析来预测未来值,并且在实现上比较简单。在本例中,我们将使用 statsmodels 库中的 ARIMA 模型函数来建立模型。下面是代码示例:

from statsmodels.tsa.arima.model import ARIMA

# create model
model = ARIMA(data, order=(1, 1, 1)) # (p, d, q)

# fit model
model_fit = model.fit()

在这个模型中,order 参数是一个包含三个值的元组,表示模型的阶数。p、d、q 分别表示自回归、差分和移动平均数的次数。在这个例子中,我们将 p 设为1,d 设为1,q 设为1。

步骤3:模型评估

我们需要评估模型的准确性。在这里,我们使用的是 RMSE(均方根误差)指标,用于评估模型预测与实际值之间的误差。我们使用 train_test_split 函数将时间序列数据划分为训练集和测试集,然后将模型用于测试集并计算其 RMSE 值。下面是代码示例:

from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split

# split data into train and test sets
train, test = train_test_split(data, test_size=0.3, shuffle=False)

# create model
model = ARIMA(train, order=(1, 1, 1))

# fit model
model_fit = model.fit()

# make predictions
predictions = model_fit.forecast(steps=len(test))[0]

# calculate RMSE
rmse = np.sqrt(mean_squared_error(test, predictions))
print('RMSE:', rmse)

输出结果为:

RMSE: 0.5942624694885292

步骤4:模型调优

最后,我们要使用网格搜索方法对 ARIMA 模型的参数进行调优。我们将使用 GridSearchCV 函数来搜索最佳的模型参数。在这里,我们将考虑对 ARIMA 模型中的所有三个参数进行调整。以下是代码示例:

from sklearn.model_selection import GridSearchCV

# define parameter space
p = [0, 1, 2]
d = [0, 1, 2]
q = [0, 1, 2]

# create parameter grid
param_grid = dict(p=p, d=d, q=q)

# create model
model = ARIMA(train, order=(1, 1, 1))

# define grid search
grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring='neg_root_mean_squared_error', cv=5, n_jobs=-1)

# execute grid search
grid_result = grid.fit(train)

# summarize results
print('Best score: {} using parameters {}'.format(grid_result.best_score_, grid_result.best_params_))

在这个调参过程中,我们首先定义了要搜索的参数空间。然后创建了一个 parameter grid,将要搜索的参数组合在一起。然后我们创建了一个 ARIMA 模型,并将其作为估计器传递给 GridSearchCV 函数。我们指定了 neg_root_mean_squared_error 作为评价指标,并将 cv 参数设置为 5,以进行五倍交叉验证。然后我们调用 fit 函数来执行网格搜索过程。最后,我们将输出最佳得分和最佳参数的组合。

这是使用 Python 进行时间序列预测模型评估和调优的基本过程。你可以将上述代码与你的时间序列数据一起使用,并进行实验和调整,以获得更准确的预测结果。

相关文章