大資料分析筆記 (7) - 時間序列分析(Time Series Analysis)
大資料分析筆記 - 時間序列分析
總覽
時間序列分析試圖模型化一段時間內觀測到的資料的底層結構。一個時間序列 (表示為 Y = a + bX) 是一個在時間上具有相同間隔值的有序序列。如圖,圖中提供了在12年內每個月的航空乘客的數量。
該方法可以應用在金融,經濟,生物,工程,零售,製造等領域。
目標在於:
- 對時間序列的結構進行識別和建模 (identify and model)。
- 預測時間序列中未來的值。
一個時間序列由在時間上具有相同間隔值的有序序列組成。一個時間序列可以由以下部分組成: 趨勢(Trend),季節效應(Seasonality),週期(Cyclic)和隨機性(Random)。
趨勢: 指在時間序列中的長期移動 (long-term movement)。其表示觀測值是否隨著時間變化增加或者降低。
季節效應: 描述了觀測資料在時間上的固定的週期性波動 (fixed, periodic fluctuation)。
週期: 可以視為週期性,但是不是固定的波動(periodic but not fixed)。比如,零售時間序列可能常常遵循經濟繁榮與蕭條 (boom-bust cycles of the economy) 的週期。
隨機性: 除了上述三部分剩下的部分。噪聲 + 底層結構 可以被建模,以預測時間序列的未來值。
Box-Jenkins方法
- 治理資料 (condition data) 與選擇模型 (select a model)
- 識別和考慮時間序列中的任何趨勢 (trend) 與季節效應 (seasonality)。
- 評估其餘時間序列並確定一個合適的模型。
- 估計模型引數。
- 評估模型,如果有必要,返回到第一步。
ARIMA (自迴歸求和移動平均模型)
ARIMA: AutoRegressive Integrated Moving Average.
要應用ARIMA,我們需要把趨勢和季節效應從時間序列中移除。這種時間序列叫做平穩時間序列 (stationary time series)。
若一個時間序列yt = {t = 1, 2, 3, …}是一個平穩時間序列,則:
- yt 的 期望值 (均值 mean) 對於所有的 t 都是常數 (constant)。
- yt 的 方差 (variance) 是有限的。
- 對於所有的t,yt 和 y t+h 的協方差值 (covariance) 只依賴於 h = 0,1,2,…。如 cov(3) = cov(y1, y4) = cov(y2, y5)
協方差可以用於衡量兩個變數是如何一起變化的。如果兩個變數相互獨立,則它們的協方差是0。如果兩個變數向著同一個方向變化,那麼它們的協方差是正的。反之,如果兩個變數向著相反方向變化,那麼它們的協方差就是負的。
值得注意的是,對於 h=0,所有 t 的 cov(0) = cov(yt, yt) = var(yt)。
平穩時間序列例子(下圖):外觀平整 flat looking(無趨勢),恆定方差 constant variance (類似散點 scattering)。但是,繪圖無法洞察時間序列中變數的協方差及其底層結構。
自相關函式 (ACF)
ACF: Autocorrelation function
對於平穩時間序列,ACF的定義如下:
由於cov(yt, yt)是方差,ACF與兩個變數的相關函式corr(yt, y t+h)類似,其值介於 -1 ~ 1 之間。因此,ACF(h) 的絕對值越接近1,那麼 yt 就越能作為 y+h 的有效預測 (predictor)。
ACF中的h量被稱為Lag,表示時間點 t 和 t + h 的差異。
當lag是0的時候,ACF提供每個點於其本身的相關性。所以ACF(0)總是等於1。
根據上面的ACF圖,
當 lag=1 時,yt 和 y t -1的相關性大約是0.9,非常接近於1。因此y t-1 對 yt 似乎是一個不錯的預測。
ACF(2) ≈ 0.8,所以 y t-2 對 yt 似乎也是個不錯的模型。
自此,我們可以考慮這樣一個模型,該模型將 yt 表述為 前8個項的線性和(因為 ACF(0 ≤ n ≤ 8) >0.6)。這類模型被稱為 8階自迴歸模型 (autoregressive model of order 8)。
自迴歸模型
對於一個平穩時間序列yt,t = 1, 2, 3,…,表示為AR( p )的p階自迴歸模型如下:
δ 是一個以非零為中心的時間序列的常量。
Ф 是 j = 1, 2, 3, …, p 時的一個常量。
y t-j 是在時間t-j時的時間序列的值。
Фp ≠ 0
對於所有 t 值, ε 服從正態分佈。
因此,時間序列中的一個特定的點可以被表述為時間序列中前p個值 y t-j (其中 j = 1, 2, …, p)的線性組合(linear combination),外加一個隨機的誤差項 ε。在這個定義中,時間序列中的 ε 通常稱為白噪聲過程(white noise process),用來表示時間序列中的隨機,獨立波動的部分。
如何在AR( p )中決定p的值?
對於AR(1)的模型,以 δ=0 為中心,我們有
基於上述公式,可知
替換 y t-1 之後可得
這個過程可以被不斷重複,y t-h, h = 1, 2, 3…。
因此,即使在簡單的 AR(1) 模型中,與較大的lag也存在著顯著的自相關(significant autocorrelation)。
我們需要測量 yt 和 y t+h (h = 1, 2, 3, …) 之間的自相關係數,並在測量中除去 y t-1 到 y t-h-1 的影響。
部分自相關函式 (Partial autocorrelation function - PACF)
當AR( p )過程的PACF變為0時,這可以指示AR模型的階數(order of the AR model)。因此,讓我們檢查資料的PACF,並找到PACF變為0之後的lag值。
也就是說,在使用線性迴歸移除 yt 與 y t+h 之間的變數對 yt 和 y t+1 的影響後,PACF就是剩餘的相關係數。
觀測:當 p ≥ 2 時,PACF變為 0 (急劇下降),因此表明AR模型的階為2 (非8)。這說明在移除了y t+1 和 y t+h+1 值的影響之後,y t+1 和 y t+h+1 的部分相關性也就相對小了。
因為 ACF 和 PACF 是基於相關性的,因此正值負值都有可能。對於各種lag值,應該考慮函式大小的絕對值。
移動平均模型 (Moving Average Models - MA)
對於以 0 居中的時間序列 t,表示為 MA(q) 的 q階移動平均模型公式如下:
在一個MA(q)模型中,時間序列的值是當前白噪聲項 (white noise) 和先前 q 個白噪聲項的線性組合。所以先前的隨機衝擊 (random shock) 直接影響到時間序列的當前值。
和AR( p ) 模型的兩個不同:
- ε t-1 被直接傳播到 yt。
- ε t 之影響當前和未來的 p 值。
有限的MA模型始終是平穩時間序列。如下圖的 MA(3) 時間序列
該模型的ACF
在一個自迴歸模型中,ACF緩慢衰減 (slowly decays)。但是對於MA(3)模型,ACF在 lag = 3 以後突然截斷。因此,ACF可以幫助識別 MA(q) 中的階q。
原因在於:
由圖可知,yt 表示式 和 y t-1 到 y t-3 表示式共享了特定的白噪聲變數,因此這三個變數都與 yt 相關聯。然而,yt 表示式 和 y t-4 沒有共享 (have no overlapping) 白噪聲變數。所以 yt 和 y t-4 之間的相關係數理論 (theoretical correlation) 上是0。
自迴歸移動平均模型 (ARMA - Autoregression Moving Average Model)
AR( p ) 和 MA(q) 經常被結合成自迴歸移動平均模型 ARMA(p, q)。
為了合理地應用ARMA模型,時間序列必須是一個平穩時間序列。然而,許多時間序列隨時間呈現一定的趨勢。對於非平穩時間序列,我們需要調整資料來移除這種趨勢。
- 一種可能的轉換是對時間序列執行迴歸分析(linear or higher-order regression model),然後從每個觀察到的y值中減去擬合迴歸線的值(remove trends)。
- 第二種選項是計算連續y值之間的差異 (difference between successive y-values),這就是所謂的差分法 (differencing)。
- 如果仍然不平穩,則對時間序列再次進行差分。
ARIMA Model
自迴歸求和移動平均模型。這是將差分操作包含(整合)在了ARMA模型中。
ARIMA(p,d,q): 在應用了 d 次差分之後,ARMA(p, q) 模型才能應用到時間序列 yt 上。
通常還需要考慮時間序列中的季節效應模式 (seasonal pattern)。可選方案是季節自迴歸求和移動平均模型(Seasonal ARIMA model):
ARIMA(p, d, q) x (P, D, Q)s
其中,s表示季節時段,P是AR模型中項在s時段上的數量。D是在s時段上的差異;Q是MA模型中項在s時段上的數量。(s的典型取值:52是週資料,12是月資料,7是日資料)
相關文章
- Python資料分析 Series 筆記Python筆記
- eviews時間序列分析課堂筆記View筆記
- 時間序列分析
- 人工智慧 (07) 時間序列資料分析人工智慧
- 【時間序列分析】01. 時間序列·平穩序列
- Python 時間序列分析Python
- 時間序列分析(二)--指數平滑
- 時間序列分析基本思想及時間序列建模步驟
- 【筆記】【THM】Malware Analysis(惡意軟體分析)筆記
- 時間序列分析(一)--移動平均
- 功能點分析(Function Point Analysis)學習筆記(一)Function筆記
- 功能點分析(Function Point Analysis)學習筆記(二)Function筆記
- 功能點分析(Function Point Analysis)學習筆記(三)Function筆記
- 功能點分析(Function Point Analysis)學習筆記(四)Function筆記
- 時間序列知識圖譜-《利用Python進行資料分析》Python
- 時間序列分析專題——指數平滑模型模型
- 梳理資料需求,資料分析7大能力
- 論文---時間序列----TimeLLM
- 大資料分析筆記 (4.1) - 線性迴歸分析(Linear Regression)大資料筆記
- 時序資料庫分析-TimescaleDB時序資料庫介紹資料庫
- 基於python的大資料分析實戰學習筆記-pandas(資料分析包)Python大資料筆記
- [譯] Python 的時間序列分析:簡介Python
- 時間序列分析 | 相似性度量基本方法
- 最佳的7個大資料分析工具大資料
- Python資料分析 DataFrame 筆記Python筆記
- Python資料分析 numpy 筆記Python筆記
- 將VAE用於時間序列:生成時間序列的合成資料
- 大資料3.2 -- 實時筆記大資料筆記
- 時間序列預測:探索性資料分析和特徵工程的實用指南特徵工程
- python-資料分析-Pandas-1、Series物件Python物件
- 時間序列結構變化分析:Python實現時間序列變化點檢測Python
- 時間序列資料庫武鬥大會之 KairosDB 篇資料庫AIROS
- 生存分析(survival analysis)
- 時間序列資料的處理
- 用R語言進行時間序列ARMA模型分析R語言模型
- 資料分析 | Numpy實戰(一) - 分析某單車騎行時間
- 資料分析的三大時間軸:過去、現在和未來
- 大資料6.1 - 實時分析(storm和kafka)大資料ORMKafka