2024年9月25日 星期三

觀察資料的趨勢



EDA 中觀察資料的趨勢

針對Time Series Data 通常會觀察原始資料的趨勢(Trend), 季節性/週期性(Seasonality)的狀態或資料中的雜訊.

但這些數據是怎麼取得的呢? 
  1. 趨勢線: 用原始資料的移動平均值(MA)作為長期走勢的觀察. (移動窗口可以自己設定) 
  2. 季節性(Seaonality): 原始資料減去趨勢線
  3. 雜訊(Residual) :   原始資料減去趨勢線再減去週期性線, 剩下的值認定是噪訊(隨機波動)或短期的變化。

可以自己用Python 完成或者利用 statsmodels 工具來完成。 statsmodels 本身提供許多不同統計模型和統計資料探索的函數。


另外, 也可以計算ACF ( Autocorrelation)  , 自相關係數為原始資料 Xt 和 X的lagged  Xt+k計算相關係數,ACF 大小可以幫助我們了解數據中週期性的狀態。當lagged 越大 (即K愈大),ACF 通常會逐漸減少,特別是對於沒有長期相關性的數據而言。


$$\rho_k = \frac{\sum_{t=k+1}^{n} (X_t - \bar{X})(X_{t-k} - \bar{X})}{\sum_{t=1}^{n} (X_t - \bar{X})^2}$$

Note:$ \rho_0=1 $ 

繪製出ACF圖, 若每隔 $i$ 之後都能看到這個峰值, 則可能存週期 $i$。序列資料可能有存在一個以上的週期,如每週會有一個週期, 而每季也有一個週期。 






ACF圖( X軸為不同的lag k, Y軸為ACF值)

底下ACF圖說明序列資料沒有存在週期性.


--------------

具有週期性的資料
 seasonal_pattern = 10 * np.sin(2 * np.pi * time / 12
 trend = 0.1 * time 
 noise = np.random.normal(0, 1, size=100
 data = seasonal_pattern + trend + noise






ACF圖( X軸為不同的lag k, Y軸為ACF值)

底下ACF圖說明序列資料存在一個週期性, 在Lag n*K 處都有差不多的峰值, 表示其週期性為 k


沒有留言 :

張貼留言