python使用Auto ARIMA构建高性能时间序列模型

时间:2024-03-17 10:38:37

ARIMA介绍

ARIMA是一种非常流行的时间序列预测统计方法。ARIMA全称是自回归积分滑动平均模型。ARIMA模型基于以下假设:
1、数据序列是平稳的,这意味着均值和方差不应该随时间变化。利用对数变换或对级数求导,可以使级数保持平稳。

2、作为输入提供的数据必须是单变量序列,因为ARIMA使用过去的值来预测未来的值。

ARIMA有三个组成部分——AR(自回归项)、I(差分项)和MA(移动平均项)。其中:
AR项:用来预测下一个值的过去值。AR项由arima中的参数“p”定义。p的值是通过PACF图确定的。
MA项:用于预测未来值的过去预测错误的数量。arima中的参数q表示MA项。ACF图用于识别正确的“q”值。
差分次数:对级数执行差分运算使其平稳的次数。ADF和KPSS等测试可以用来确定序列是否平稳,有助于识别d值。

Auto ARIMA介绍

虽然ARIMA是预测时间序列数据的一个非常强大的模型,但是数据准备和参数调整过程最终非常耗时。在实现ARIMA之前,您需要使级数保持平稳,并使用上面讨论的ACF和PACF图确定p和q的值。Auto ARIMA则对我们来说非常简单,因为它可以帮我们自动调参获得较好模型性能。以下是实现auto ARIMA的步骤:
加载数据:这一步是相同的。把数据载入你的机器
预处理数据:输入应该是单变量的,因此删除其他列
创建Auto ARIMA:适合单变量系列的ARIMA模型
预测:对验证集进行预测
计算RMSE:用预测值与实际值对比检验模型的性能
如您所见,我们完全绕过了传统ARIMA算法的p和q特性的选择。我松了一口气!下面我们将使用toy数据集实现Auto ARIMA。

Auto ARIMA模型实战(python)

我们将使用国际航空旅客数据集。该数据集包含每月乘客总数(以千计)。它有两栏数据—月和旅客人数。在进行操作前,你需要安装pyramid.arima库。

1、下载数据并预处理

#load the data
data = pd.read_csv('international-airline-passengers.csv')

#divide into train and validation set
train = data[:int(0.7*(len(data)))]
valid = data[int(0.7*(len(data))):]

#preprocessing (since arima takes univariate series as input)
train.drop('Month',axis=1,inplace=True)
valid.drop('Month',axis=1,inplace=True)

#plotting the data
train['International airline passengers'].plot()
valid['International airline passengers'].plot()

python使用Auto ARIMA构建高性能时间序列模型

2、创建模型并训练

#building the model
from pyramid.arima import auto_arima
model = auto_arima(train, trace=True, error_action='ignore', suppress_warnings=True)
model.fit(train)

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

#plot the predictions for validation set
plt.plot(train, label='Train')
plt.plot(valid, label='Valid')
plt.plot(forecast, label='Prediction')
plt.show()

 

python使用Auto ARIMA构建高性能时间序列模型

3、模型评价

#calculate rmse
from math import sqrt
from sklearn.metrics import mean_squared_error

rms = sqrt(mean_squared_error(valid,forecast))
print(rms)

 

output -
76.51355764316357

到此,我们在国际航空旅客数据集上简单实现了Auto ARIMA模型,在上面的代码中,我们简单地使用.fit()命令来拟合模型,而不需要选择p、q、d的组合。但是模型是如何计算出这些参数的最佳组合的呢?Auto ARIMA会考虑生成的AIC和BIC值(正如您在代码中看到的那样),以确定参数的最佳组合。AIC和BIC值是比较模型的估计量。这些值越低,模型越好。总的来说,Auto ARIMA比较简单,对于初学时间序列建模的同学来说比较容易入手。

结语:

更多机器学习算法的学习欢迎关注我们。对机器学习感兴趣的同学欢迎大家转发&转载本公众号文章,让更多学习机器学习的伙伴加入公众号《python练手项目实战》,在实战中成长。

python使用Auto ARIMA构建高性能时间序列模型