Time-Series

非常高頻的時間序列分析(秒)和預測(Python/R)

  • October 5, 2014

我有高頻數據(以秒分隔的觀察結果),我想使用 ARIMA 模型分析並最終預測短期週期(提前 1/5/10/15/60 分鐘)。我的整個數據集非常大(1500 萬台)。我的目標是得出結論,與我已經做過的其他簡單方法、NAIVE 和 SES 相比,ARIMA 模型可以預測數據有多好。由於數據如此之大,我開始查看不同日期的圖以及數據的 ACF 和 PACF(以搜索模式)。

一種。數據是固定的 - ADF 測試也強烈認可這一點(因此無需差分)

灣。ACF 圖顯示了強烈的每小時季節性,但在前 500 個滯後(分鐘季節性?)中也有。我還假設每天有季節性(滯後於 86,400)

問題問題#1:

如果我想開始,取一天的樣本(從 00:00-23:59)並預測第二天的時間(00:00 - 00:59,第 2 天),這是樣本外的預測,

1.1 我應該適合 ARIMA 模型的數據量應該是多少?關於選擇“訓練集”(尤其是短期預測)有什麼規則嗎?

就我而言,它變得非常複雜,因為在整個 24 小時樣本 (12,0,3) 中發現非季節性 ARIMA 的順序非常高。第二個也是更關鍵的問題是,如果我考慮到季節性高階,(3,0,0)s=3600,那麼計算機內存不足。我在 Python 和 R 上都試過了。

1.2 知道如何處理這種情況嗎?

問題#2:

到目前為止,我嘗試的是平均每 60 秒的數據,所以我得到了每天 1440 次觀察的重新採樣數據(代表分鐘)。這樣做之後,我可以更輕鬆地處理現在 s = 60 的季節性週期,並且幸運地使用 R 和 Python(但是,這樣做我可能會丟失有價值的信息..)。因為對於每個數據長度,我都會得到不同的 ARIMA 順序。例如 7 小時:ARIMA(2,0,0)(1,0,0)[60] 和 …。如果我想使用更短的擬合週期,我必須區分數據,因為模式變得非靜止的。例如 2 小時:ARIMA(3,1,1)(0,0,1)[60]。所以我嘗試測試幾種方法,看看“樣本外”(1小時)的預測有多好。似乎在這些方法中,較短的時間擬合(2 小時)產生的結果比較長的方法稍好。但又一次,

***2.1:所以第一個問題仍然存在,我應該在訓練集上擬合 ARIMA 的數據長度是多少?***2.2:在短期預測期間使用短期訓練集是否有意義?

問題#3

假設另一個“更長的擬合”(比如 24 小時)導致如此短時間預測的“過度擬合”,我會使用 2 小時 ARIMA 擬合。提醒我,我對預測特定時間間隔並不特別感興趣,但我有興趣使用許多測試的結果來嘗試對我的數據預測 ARIMA 模型做出結論。當它做得好或不好時(與其他方法相比,使用 MAPE)。問題是我必須每 2 小時一次又一次地擬合一個 ARIMA 模型,然後累積結果。

3.1 但是考慮到我有 6 個月的數據,這不是很實用,不是嗎?那麼有人對如何解決這個問題有任何建議嗎?我應該每天取樣嗎?

問題#4:

在我所做的幾十個擬合 ARIMA 測試中,沒有一個在殘差的 ACF 上產生“白噪聲”!(還測試了其他訂單,其他季節性時段)。相反,有 2 個滯後明顯超出區間(滯後 11 和 19)。 4.1 是否有可能遇到這樣的情況,即您找不到在殘差的 ACF 上產生“白噪聲”的正確模型?還是暗示我的分析應該有問題?

**問題問題#5:

(特別是與 Python 和一般的趨勢 = ‘c’ 有關)** 在我迄今為止在文獻中看到的示例中,對固定數據的關注很少(大多數是非固定的,可能是因為大多數是金融數據..)。

5.1 因此,當我將趨勢參數設置為常量(‘trend’=‘c’)時,我不明白為什麼無法預測靜態數據,但設置為非(‘trend’=‘n ‘)?

我在python(statsmodels)上使用了它,所以我不知道這是否是函數的問題,或者添加一個常量是不明智的。對於那些使用 statsmodels 的人:

import statsmodels.api as sm 

arima_fit =  sm.tsa.SARIMAX(data_set, order = (2,0,0), seasonal_order = (1,0,0,60), trend = 'c').fit() 
data_forecast = arima_fit.predict('period start', 'period end', dynamic = True)

我收到以下錯誤:“ ValueError:預測具有時變 state_intercept 矩陣的模型需要更新的時變矩陣來預測期間。

我對時間序列比較陌生,所以請原諒我的問題很簡單。關於文獻和例子,到目前為止,我找不到任何例子來處理我在 ARIMA 模型中的數據(非常高的頻率)中的特徵。因此,如果有人可以推荐一些東西,那就太棒了。

問題一:

問題在於,在 MLE 案例中,Python(statsmodels)和 R 程序都使用狀態空間模型來估計可能性。在 SARIMAX 類中,狀態空間隨季節數線性增長(或更差)(因為狀態空間形式也包含所有中間滯後 - 所以如果你有 3600 的滯後,狀態空間形式也有所有3599 個中間滯後)。

所以你現在有幾個問題 - 首先,你將 3600 多個矩陣相乘,這很慢。更糟糕的是,狀態空間模型需要初始化,並且通常默認使用需要求解 3600 線性系統的固定初始化來初始化它們。當我測試一個 3600 季節性訂單時,它甚至沒有超過這部分。

R arima 函數接受 method=‘CSS’ ,它使用最小二乘法(條件 MLE 而不是完整 MLE)來解決問題。根據 arima 函數的工作方式,在您的情況下它可能會好得多。

在 Python 中,沒有很多好的選擇。SARIMAX 類接受一個conserve_memory選項,但如果你這樣做,你就無法預測。求解初始化問題,可以調用initialize_approximate_diffuse方法避免3600線性系統求解。但是,即使在這些情況下,您也會將 3600 x 3600 矩陣相乘,這會非常慢。我想更新 SARIMAX 類以使用稀疏矩陣(這將解決這個問題),但這可能是未來的一種方式。我不知道任何使用稀疏矩陣實現狀態空間模型的非商業程序。

問題 #5:

這是 statsmodels 代碼中的一個錯誤。它已在存儲庫中修復(請參閱https://github.com/ChadFulton/statsmodels/issues/2

引用自:https://stats.stackexchange.com/questions/117953

comments powered by Disqus