天天看點

python使用Auto ARIMA建構高性能時間序列模型

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建構高性能時間序列模型