【数据分析】利用机器学习算法进行预测分析(四):自回归差分移动平均模型(AutoARIMA)(2021-01-18)

时间序列预测中的机器学习方法(四):自回归差分移动平均模型(Auto ARIMA)

本文是“时间序列预测中的机器学习方法”系列文章的第四篇,如果您有兴趣,可以先阅读前面的文章:
【数据分析】利用机器学习算法进行预测分析(一):移动平均(Moving Average)
【数据分析】利用机器学习算法进行预测分析(二):线性回归(Linear Regression)
【数据分析】利用机器学习算法进行预测分析(三):最近邻(K-Nearest Neighbours)

自回归差分移动平均模型(ARIMA,Auto Regressive Integrated Moving Average Model)是一种非常流行的时间序列预测统计方法。ARIMA模型将过去的值考虑在内,以预测将来的值。ARIMA中有三个重要参数:

  • p(用于预测下一个值的过去值)
  • q(用于预测未来值的过去预测误差)
  • d(差分顺序)

ARIMA的参数调整会花费大量时间。因此,我们使用Auto ARIMA自动选择误差最小的(p,q,d)最佳组合。

数据集和前面写的三篇文章相同,目的是为了比较不同算法对同一数据集的预测效果。数据集和代码放在了我的GitHub上,需要的朋友可以自行下载。

导入包,并读入数据。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
df = pd.read_csv('NSE-TATAGLOBAL11.csv')

将日期作为索引。

# setting the index as date
df['Date'] = pd.to_datetime(df.Date,format='%Y-%m-%d')
df.index = df['Date']

将原始数据划分为训练集和预测集。

data = df.sort_index(ascending=True, axis=0)

train = data[:987]
valid = data[987:]

training = train['Close']
validation = valid['Close']

导入模型,自动寻找最佳参数p,q,d。

from pmdarima import auto_arima

model = auto_arima(training, start_p=1, start_q=1, max_p=3, max_q=3, m=12, start_P=0, seasonal=True, d=1, D=1, trace=True, error_action='ignore', suppress_warnings=True)
model.fit(training)

forecast = model.predict(n_periods=248)
forecast = pd.DataFrame(forecast, index = valid.index, columns=['Prediction'])

在这里插入图片描述
RMSE的大小一定程度上反映了误差大小。

rmse = np.sqrt(np.mean(np.power((np.array(valid['Close'])-np.array(forecast['Prediction'])),2)))
rmse

通过绘图直观地观察预测情况。

#plot
plt.figure(figsize=(16,8))
plt.plot(train['Close'])
plt.plot(valid['Close'])
plt.plot(forecast['Prediction'])
plt.show()

在这里插入图片描述
可以看到AutoARIMA算法在这个数据集上的预测效果也不是很好。但是,该模型已捕捉到该时间序列的趋势,因为并未关注季节性变化影响,所以预测得不够准确。

猜你喜欢

转载自blog.csdn.net/be_racle/article/details/112780195