簡體   English   中英

Python statsmodels ARIMA預測

[英]Python statsmodels ARIMA Forecast

我正在嘗試使用python statsmodels進行樣本預測。 我不想僅僅預測訓練集末尾的下一個x值,但我想一次預測一個值,並在預測時考慮實際值。 換句話說,我想做滾動1期預測,但我不想每次都重新校准模型。 我能找到的最近的帖子是:

使用statsmodels進行ARMA樣本外預測

但是,這使用ARMA而不是ARIMA。 如何使用ARIMA實現這一目標還是有更好的方法? 我知道我實際上可以拉動系數並自己應用函數但是在我的代碼中我使用的ARIMA模型隨着時間的推移是動態的,因此系數和滯后值的使用數量不是恆定的。 任何幫助將不勝感激。

如果我是對的,我有類似的問題:基本上我想將我的時間序列分成訓練和測試集,訓練模型,然后根據過去的歷史任意預測測試集的任何元素。 我沒有設法使用ARIMA statsmodels類實現它。

這就是我使用statsmodel做的方式:我已經將一階差異應用於系列以實現平穩性,並計算了一個arma模型:

model = sm.tsa.ARMA(fitting_data, order=(p, q), dates=fitting_dates).fit()

我已經將arma模型轉換為純粹的ar模型:

ar_params = model.arparams
ma_params = model.maparams

ar_coefficients = arma2ar(ar_params, ma_params, nobs=final_ar_coeff)

nobs參數會影響您將獲得的自回歸系數的數量。 我嘗試了幾個值,增加它直到觀察到預測沒有顯着變化。 一旦你得到了不同系列的預測,你想把它們帶回原來的系列。 我實現了一種方法,在預測之前給出一個或一組預測和最后一個已知元素,計算原始系列中的預測:

def differenced_series_to_original(values, starting_value):

    original_series = [starting_value]
    [original_series.append(original_series[-1]+i) for i in values]

    return original_series[1:]

顯然, 是您的預測列表, starting_value是最后一個已知元素。 希望它有助於解決您的問題。

從我可以理解的是,你不想每次運行模型,這個問題可以有兩個解決方案

  1. 以pickle格式提取模型,然后每次使用相同的模型來創建預測。
  2. 從模型中提取系數並將其用於計算。

兩個選項的代碼如下。

  1. 泡菜創造並進一步使用它。

     import pmdarima as pm model = pm.auto_arima(train, exogenous=exogenous_train, start_p=1, start_q=1, test='adf', # use adftest to find optimal 'd' max_p=5, max_q=5, # maximum p and q m=12, # frequency of series d=None, # let model determine 'd' seasonal=True, # No Seasonality start_P=0, D=1, trace=True, error_action='ignore', suppress_warnings=True, stepwise=True) filename = 'ARIMA_Model.sav' pickle.dump(model, open(filename, 'wb')) ## This will create a pickle file ## Load Model model = pickle.load(open(filename, 'rb')) ## Forecast fc, confint = model.predict(n_periods=1, exogenous=exogenous_test_df, return_conf_int=True) 
  2. 提取模型系數,我已經使用了pmdarima用於ARIMA,所以這就是你如何提取系數。 我猜它在其他ARIMA庫中應該是相同的。

     Model_dict = model.to_dict() Model_Order = Model_dict['order'] Model_seasonal_order = Model_dict['seasonal_order'][1] 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM