我有一些時間序列數據,其中包含一些季節性趨勢,我想用ARIMA模型來預測這個系列將來的行爲。ARIMA預測(python statsmodels)
爲了預測我感興趣的變量(log_var
)將如何表現,我已經採取了每週,每月和每年的差異,然後將它們用作ARIMA模型的輸入。
下面是一個例子。
exog = np.column_stack([df_arima['log_var_diff_wk'],
df_arima['log_var_diff_mth'],
df_arima['log_var_diff_yr']])
model = ARIMA(df_arima['log_var'], exog = exog, order=(1,0,1))
results_ARIMA = model.fit()
我這樣做了幾個不同的數據源,並在所有這些我看到了巨大的成績,在這個意義上,如果我繪製log_var
反對results_ARIMA.fittedvalues
的訓練數據,那麼它匹配得很好(我調p和q分別爲每個數據源,但是因爲我已經自己消除了差異,所以d始終爲0)。
但是,我想檢查一下預測是什麼樣子的,爲了做到這一點,我將exog
重新定義爲「測試」數據集。例如,如果我在2014-01-01到2016-01-01之間訓練原始ARIMA模型,那麼「測試」集合將在2016-01-01之後。
我的方法對於某些數據源(從我們將預測與已知數值和趨勢看起來合理的情況進行預測)進行得很好,但對於其他數據來說卻很糟糕,儘管它們都是相同的'樣'數據,而且它們剛剛從不同的地理位置獲得。在一些地區,它完全無法捕捉每年在相同日期的訓練數據中一次又一次出現的明顯的季節性趨勢。 ARIMA模型總是適合訓練數據,似乎在某些情況下,預測是完全無用的。
我現在想知道我是否真的按照正確的程序來預測ARIMA模型的值。我的方法基本上是:
exog = np.column_stack([df_arima_predict['log_val_diff_wk'],
df_arima_predict['log_val_diff_mth'],
df_arima_predict['log_val_diff_yr']])
arima_predict = results_ARIMA.predict(start=training_cut_date, end = '2017-01-01', dynamic = False, exog = exog)
這是使用ARIMA進行預測的正確方法嗎?
如果是這樣,有沒有一種方法可以嘗試理解爲什麼預測在某些數據集中看起來非常好而在其他情況下很糟糕,當ARIMA模型在兩種情況下似乎都適合訓練數據?
什麼ARIMA做工作,沒有太多的瞭解,我會更新,它可能是你只是過度適合你的模型。過度擬合是機器學習中的一個非常普遍的問題,當訓練模型完全匹配您的訓練數據時會發生這種情況,但在預測測試集時似乎沒有用處(似乎是發生了什麼)。如果是這個問題(很難說),你可以嘗試使用這些參數來訓練,直到訓練集合適合但不完美,ARIMA可能會對測試數據集進行更好的概括。 –