arima 数据预处理_时间序列分析|ARIMA模型分步骤解析及R中实践
你是否想要做時間序列分析,但卻不知道代碼怎么寫?
你是否不清楚時間序列分析各種模型該在什么情況下使用?
本文將針對以上兩個問題,帶你入門時間序列分析~
等等!
不止’入門‘
讀完這篇,你立即就能在R中寫出不同模型的相應代碼~
先介紹以下我自己吧~
我目前是Warner Bros.做Data Scientist,記得剛入職時,老板就跟我說未來我的主要任務是用各種類型的時間序列模型做預測:預測好萊塢游覽車未來三年每天的乘客數量、預測, ,等華納出品的電影每分鐘的觀看量,預估艾倫秀不同播出計劃的未來收視率和收入等等等等~~~
剛入職的第一個月每天愁眉不展,時間序列的方法很多,很多時候,即使理論基礎學懂了,但是到實踐上,R里的code要怎么寫又是個大問題,網上的很多教程,教授了公式,卻不教授具體的代碼怎么寫。
幸運的是,老板是個比較技術咖的人,他教會了我很多實際操作上的東西,結合我過去七個月做過的各種時間序列模型,決定好好總結一下時間序列常見模型各自的適用場合、特征等理論知識,更重要的是,每個模型在R里的具體代碼實現以及操作步驟,希望能幫助到需要使用R來做時間序列的朋友們~
時間序列數據是在一段時間內作為時間間隔序列收集的數據點。時間序列數據分析意味著對可用數據進行分析,以找出數據的模式或趨勢,從而預測一些將來的價值,這些價值將有助于提高效率并優化業務決策。
常見的用于時間序列分析的技術:ARIMA模型
指數平滑模型
本篇將介紹 - ARIMA模型在R中如何使用
ARIMA建模
ARIMA是AutoRegressive集成移動平均線的縮寫。自回歸(AR)項是指差分序列的滯后,移動平均(MA)項是指誤差的滯后,而I是用于使時間序列平穩的差分數。
ARIMA模型假設數據平穩 – 這意味著數據的變化不依賴于時間變化。白噪聲序列和具有循環特性的序列也可以視為平穩序列。
數據應為單變量– ARIMA處理單個變量。自動回歸就是關于過去值的回歸。
(PS: 對于有外部變量的數據,可以使用ARIMAX模型,這個將在下一篇中介紹)
以下步驟1~5,很重要!很重要!!
ARIMA建模要遵循的步驟將數據集轉化為時間序列格式
作圖分析數據
確定p,d,q
擬合模型
做出預測
下面將根據建模步驟來介紹R中code
首先,導入需要用到的包:
library(ggplot2) #作圖
library(forecast) #建模
library(dplyr) # 數據處理
library(lubridate) # 時間處理
將數據集轉化為時間序列格式
使用R進行時間序列數據建模的第一步是將數據轉換為時間序列數據格式。為此,我們需要在R中運行以下命令:
wbstl_weekly_data_ts = ts(wbstl_weekly_data$weekly_totalgross,frequency = 365.25/12,
start= decimal_date(ymd('2011-01-01')))wbstl_weekly_data$weekly_totalgross是我們要轉換為時間序列的單變量數據
start給出數據的開始時間,在本例中為2011年1月。
frequency是數據的頻率。由于它是月度數據,所以'frequency = 12'。(每周的數據,則frequency=52; daily data,則frequency=365.25)
2. 作圖分析數據
ggplot(wbstl_weekly_data, aes(x =month, y = weekly_totalgross)) + geom_line()
這是數據的樣子:
我們可以從圖本身推斷出,數據點遵循總體上升趨勢,但在突然降低的值方面有一些異常值。現在,我們需要進行一些分析,以找出數據中確切的非平穩性和季節性。
3. 確定p,d,q
數據準備就緒并滿足所有建模假設后,要確定要擬合數據的模型的順序,我們需要三個變量:p,d和q,它們是指代負順序的非負整數。模型的自回歸,積分和移動平均值部分。
要找到合適的p和q值,我們需要使用acf()并pacf()。
pacf()滯后k是自相關函數,它描述了相距k步的所有數據點之間的相關性-在考慮了它們與這k步之間的數據的相關性之后。它有助于識別ARIMA模型中的自回歸(AR)系數(p值)的數量。
acf(tsstationary,lag.max = 34)
pacf(tsstationary,lag.max = 34)
結果如下:
ACF用以確認q, 圖中可以看出q = 1
PACF用以確認p = 2
處理好了數據,下面 進入最重要的部分:模型擬合 + 預測
4. 模型擬合
fitARIMA
order 指定ARIMA模型的非季節部分:(p,d,q)指AR階,差異度和MA階。
seasonal指定ARIMA模型的季節性部分,加上周期(此處是月度數據,所以為12)。該函數需要一個包含組件順序和周期的列表,但是給定長度為3的數字矢量,它將把它們變成一個合適的列表,其規格為“ order”。
method表示擬合方法,可以是“最大似然(ML)”或“最小平方和(CSS)”。
這是一個遞歸過程,我們需要arima()使用不同的(p,d,q)值運行此函數,以找到最優化和高效的模型。
上述介紹的是怎么手動根據數據確定ARIMA模型中各參數,這邊還有個懶人方法 (實踐中更多也是使用該懶人方法 - auto.arima() )
auto.arima()功能:
預測程序包提供兩個功能:ets()和auto.arima()用于自動選擇指數模型和ARIMA模型。
auto.arima()R中的函數結合了單位根測試,最小化AIC和MLE來獲得ARIMA模型。
KPSS檢驗用于確定差異數量(d)在Hyndman-Khandakar算法中,用于自動ARIMA建模。
然后通過最小化AICc來選擇p,d和q。該算法使用逐步搜索遍歷模型空間,以選擇具有最小AICc的最佳模型。
如果d = 0,則常數c被包括在內;如果d≥1,則常數c設置為零。通過將當前模型的p和/或q改變±1并包括/排除當前模型中的c來考慮當前模型的變化。
到目前為止考慮的最佳模型(當前模型或這些變體之一)成為新的當前模型。
現在,重復此過程,直到找不到更低的AIC。
auto.arima(tsData,seasonal.test="ch",
parallel=TRUE,num.cores=8,stepwise=FALSE,approximation=FALSE)
該行code,運行時間較長,上周我用了1140個數據點,運行了1.5hr
5. 使用ARIMA模型進行預測
一旦為時間序列數據選擇了最合適的模型,該ARIMA模型的參數就可以用作預測模型來預測時間序列的未來值。
使用predict()的函數 - 用于根據各種模型擬合函數的結果進行預測。它需要一個參數n.ahead()來指定要預測多少時間。
predict (fitARIMA,h = 5)
意思就是對未來5個月進行預測
forecast.Arima()forecastR包中的函數還可用于預測時間序列的未來值。在這里,我們還可以使用level參數指定預測間隔的置信度。
futurVal
plot.forecast(futurVal)
我們需要確保預測誤差不相關,正態分布為均值零和恒定方差。我們可以使用診斷方法找出具有最佳可能預測值的適當模型。
預測顯示為藍線,而99.5%置信度水平的預測間隔為淺陰影區域。
這是整個過程,我們可以使用ARIMA分析時間序列數據和現有序列的預測值。
總結一下:
ARIMA建模要遵循的步驟將數據集轉化為時間序列格式
作圖分析數據
確定p,d,q / 或只用auto.arima()
擬合模型
做出預測
大家看完別忘了贊一個讓更多人看到
另外,歡迎關注我的專欄: 煮一鍋數據湯
專欄定期分享數據分析方面干貨,如時間序列模型實踐、機器學習模型講解、R編程語言操作、SQL小白入門等煮一鍋數據湯?zhuanlan.zhihu.com
總結
以上是生活随笔為你收集整理的arima 数据预处理_时间序列分析|ARIMA模型分步骤解析及R中实践的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对hash签名失败_详解Vue开发微信H
- 下一篇: 0x84bb0001 sqlserver