python arima model預測問題

今天使用python做了arima model,其他都是沒有問題的,但是在預測時遇到一個很大的問題,查了半天,中文英文都查了,文檔也查了,似乎沒有辦法解決,可能是在python的statsmodels.tsa.arima_model設計過程中就是沒有考慮這種情況吧。本文先講一下使用python做arima model的一些基本情況和注意事項,然後講一下存在的問題。

1. statsmodels.tsa.arima_model注意事項

關於這個arima package網上已經有很多很多的介紹了,這裏給出幾個傳送門:python arima model1python arima model2官方文檔英文的一份比較好的教程看這些就可以基本瞭解怎麼使用了。我主要就講一下我再操作的過程中遇到的一些需要注意的地方。

  1. 數據使用series就可以,首先對數據進行差分使得其平穩,得到階數,也就是d,然後做出自相關圖和偏自相關圖,依次確定p和q,確定模型的基本形式arima(p,d,q)。
  2. 模型訓練時就使用fit函數就行,注意fit函數存在一個參數是method ,裏面包含3種訓練模型的方法,分別是{‘css-mle’,’mle’,’css’},默認是mle,如果訓練報錯,可以試試css,一般css不容易訓練失敗。一般提示無法收斂,無法求逆等問題時就是訓練方法不合適造成的,換一個試試。
  3. 預測有兩種方式predict和forecast,一般predict就可以完成了吧,forecast就沒去了解,不是很清楚,ARIMA.predict(params, start=None, end=None, exog=None, typ=‘linear’, dynamic=False),可以設置一個start和end,然後就會返回一個array,是從start到end的預測結果,這個預測可以是樣本內的,也可以是樣本外的。start和end可以是索引也可以是日期字符串。
  4. predict中有一個參數是typ,默認是’linear’,所以默認會輸出差分後的數值,而不是原始level的數值,可以將這個參數設置爲’levels’,就可以輸出原始level的數值了。

2.存在的問題

爲了更好的理解這個問題,先說一個現實中存在的需求。訓練好一個arima模型,然後用它預測股票價格,但是不希望每天都去重新訓練這個模型,上週的模型這周還是希望直接拿來用,但是我獲得了這周的新數據,因此把這些新獲取到的數據也作爲輸入去預測明天的數據。 而predict函數是無法實現這個功能的,因爲predict進行多步預測時實際上是首先進行單步預測,然後將這個預測值作爲輸入來再做一次單步預測,得到二步預測值,而我上述所說的例子中需要實現的功能是:使用t0-t5的序列訓練model,然後預測t6,然後給予真實的t6,預測t7,而不是用預測出來的t6去預測t7。那麼沒有這種功能就造成很多麻煩,比如我希望用arima model和一個機器學習模型去比較性能,如svm,我們將數據集劃分爲訓練集和測試集,然後用訓練集訓練模型,此時模型就確定下來了,然後在測試集上測試,也就是輸入測試集,得到預測值,可以計算出比如MSE,但是statsmodels.tsa.arima_model就無法做到這一點了,因爲無法輸入測試集去做預測。這個問題我進行很長時間的查詢都沒有解決,要是有大佬知道該怎麼辦還請留言,十分感謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章