常用連結

2024年9月25日 星期三

觀察資料的趨勢



EDA 中觀察資料的趨勢

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

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

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


另外, 也可以計算ACF ( Autocorrelation)  , 自相關係數為原始資料 Xt 和 X的lagged data Xt-k計算類似相關係數的概念, ,ACF 值 介於-1~1,其大小可以幫助我們了解數據中的趨勢和季節性模式。當lagged 越大,ACF 通常會逐漸減少,特別是對於沒有長期相關性的數據而言。

$ \rho(x_{t},x_{t-1}),  \rho(x_{t},x_{t-2}),..., \rho(x_{t},x_{t-k})$

$$\rho(x_{t},x_{t-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}$$

ACF值愈大的, 如 $ \rho(x_{t},x_{t-i}) $ 很大, 表示$x$和 lagged $i$ 後, 有存在週期性 






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








沒有留言:

張貼留言