机器学习笔记:时间序列分解(滑动平均)
0 前言
????????時間序列數據可以表現出多種模式,將時間序列拆分為多個組件通常很有幫助,每個組件代表一個基礎模式類別。
????????在機器學習筆記(時間序列):不同類型的圖示_UQI-LIUWJ的博客-CSDN博客中,我們討論了三種類型的時間序列模式:趨勢、季節性和周期。
???????? 當我們進行時間序列分解時,我們通常將趨勢和周期組合成單個趨勢周期組件(為簡單起見,有時就稱為趨勢)。 因此,我們認為時間序列包含三個部分:趨勢周期部分、季節性部分和剩余部分(包含時間序列中的任何其他內容)。
????????
????????其中 yt 是數據,St 是季節性成分,Tt 是趨勢周期成分,Rt 是剩余成分。
????????或者,我們也可以對時間序列進行乘法分解。可以寫成
?
?????????如果季節性波動的幅度或圍繞趨勢-周期的變化不隨時間序列 時刻t的變化 而變化,則加法分解是最合適的。
????????當季節性波動的變化或趨勢-周期的變化與時間序列的 時刻t 成正比時,乘法分解更合適。
???????? 乘法分解在經濟相關的時間序列中很常見。
????????使用乘法分解的另一種方法是首先轉換數據,直到序列中的變化隨著時間的推移看起來是穩定的,然后使用加法分解。
????????使用對數變換后的加法分解,相當于使用乘法分解,因為 ?
?1 舉個例子先:
????????我們將對電氣設備的新訂單指數進行分解,如圖 6.1 所示。 數據顯示了歐元區(16 個國家)電氣設備(計算機、電子和光學產品)的新訂單數量。
????????圖 6.1 顯示了趨勢周期分量 Tt ,以紅色顯示;原始數據 yt, 以灰色顯示。 趨勢周期顯示了該系列的整體運動,忽略了季節性和任何小的隨機波動。
?????????圖 6.2 顯示了這些數據的加法分解。 本例中用于估計分量的方法是 STL,后面再討論
?????????這三個組件分別顯示在圖 6.2 的底部三個面板中。 可以將這些組件添加在一起以重建頂部面板中顯示的時間序列數據。
???????? 請注意,季節性成分隨時間緩慢變化,因此任何連續兩年都有相似的模式,但相隔很遠的年份可能有不同的季節性模式。
???????? 底部面板中顯示的剩余部分是從數據中減去季節性和趨勢周期部分后剩下的部分。
????????
????????每個面板右側的灰色條顯示組件的相對比例。 每個灰色條代表相同的長度,但由于圖的比例不同,條的大小會有所不同。 底部面板中的大灰色條顯示剩余分量的變化與數據的變化相比較小,數據的變化大約是四分之一大小。 如果我們縮小底部的三個面板,直到它們的條形與數據面板中的條形大小相同,那么所有面板的比例都相同。
1.1?經季節性調整的數據
????????如果從原始數據中去除季節性成分,則結果值為“季節性調整”數據。 對于加法分解,經季節調整的數據由 yt?St 給出,對于乘法數據,經季節調整的值由 yt/St 獲得。
????????圖 6.3 顯示了經季節性調整的電氣設備訂單。
????????如果季節性引起的變化不是主要關注點,則季節性調整的系列可能很有用。
????????例如,每月失業數據通常會進行季節性調整,以突出由于潛在經濟狀況而不是季節性變化引起的變化。畢業季找工作的人增加導致的失業增加是季節性變化,而經濟衰退導致的失業增加是非季節性的。大多數研究失業數據的經濟分析師對非季節性變化更感興趣。因此,就業數據(和許多其他經濟數據)通常會進行季節性調整。
? ? ? ? 注意季節性調整數據并不是趨勢數據(因為其中還有剩余部分)
2 移動平均
????????時間序列分解的經典方法起源于 1920 年代,直到 1950 年代才被廣泛使用。 它仍然是許多時間序列分解方法的基礎,因此了解它的工作原理很重要。
????????經典分解的第一步是使用移動平均法來估計趨勢周期,因此我們從討論移動平均開始。
2.1 移動平均平滑
????????m階移動平均可以寫成
? ? ? ? 其中m=2k+1
?????????也就是說,時間 t 的趨勢周期的估計是通過對 t 的 k 個周期內的時間序列的值求平均值來獲得的。
? ? ? ? 時間上接近位置的觀測值也可能接近。 因此,平均值消除了數據中的一些隨機性,留下了平滑的趨勢周期成分。
????????我們稱之為 m -MA,表示 m 階的移動平均線。
2.1.1 R語言實現
library(forecast) library(ggplot2)y<-ts(c(5,3,3.1,3.2,3.3,3.4,3.5,3.3,3.2,4,4.1,4.2,6,4,4.1,4.2,4.3,4.4,4.5,4.6,4.7,4.8,4.9,5,10,9,8,8.5,8.4,8.5,8.6,8.7,8.8,8.9,9,9.5),start = 2020,frequency = 12)ma(y,5)Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2020 NA NA 3.52 3.20 3.30 3.34 3.34 3.48 3.62 3.76 4.30 4.46 2021 4.48 4.50 4.52 4.20 4.30 4.40 4.50 4.60 4.70 4.80 5.88 6.74 2022 7.38 8.10 8.78 8.48 8.40 8.54 8.60 8.70 8.80 8.98 NA NA autoplot(y,series='origin data')+autolayer(ma(y,5),series='5-ma')+xlab('year')+ggtitle('origin data vs moving average')? ? ? ? ?注意在滑動平均中,最前的兩個月,最后的兩個月都沒有值,因為我們在兩邊都沒有兩個觀察值。
????????滑動平均的曲線比原始數據更平滑,并且捕獲了時間序列的主要方向,沒有小波動。滑動平均線的階數決定了趨勢周期估計的平滑度。 一般來說,階數越大意味著曲線越平滑。
autoplot(y,series='origin data')+autolayer(ma(y,5),series='5-ma')+autolayer(ma(y,3),series='3-ma')+autolayer(ma(y,7),series='7-ma')?????????諸如此類的簡單移動平均線通常是奇數階數(例如,3、5、7 等)。 因此它們是對稱的:在 m=2k+1 階的移動平均中,中間觀察值和兩側的 k 個觀察值被平均。 但如果 m 是偶數,它將不再是對稱的。
2.2 移動平均的移動平均
????????可以將移動平均應用于移動平均的結果上。 這樣做的一個原因是使偶數階移動平均對稱。
比如我們進行如下的實驗:
????????
? ? ? ? 如果是ma(y,2,centre=FALSE),那么就是包括自己的相鄰4個求平均(后面比前面多一個)
? ? ? ? 比如此時的y1=0.5(y1+y2),y2=0.5(y2+y3)
? ? ? ? 但如果沒有centre=FALSE(也就是默認的情況),那么就相當于在ma(y,2,centre=FALSE)的基礎上再求一個相鄰平均(前面比后面多一個)
???????y1=0.5(y1+y2),y2=0.5(y2+y3)的基礎上,
y2’=0.5[0.5(y1+y2)+0.5(y2+y3)]=0.25y1+0.5y2+0.25y3
——>于是又對稱了
2.3??用季節性數據估計趨勢周期
????????居中移動平均最常見的用途是根據季節性數據估計趨勢周期。 考慮 2×4 -MA(對稱的4階滑動平均):
?????????當應用于季度數據時,一年中的每個季度都被賦予相同的權重,因為第一項和最后一項適用于連續年份的同一季度。 因此,季節性變化將被平均化,的結果值將幾乎沒有或一點沒有季節性變化。 使用 2×8-MA 或 2×12-MA 對季度數據可以獲得類似的效果。
????????通常,2×m -MA 相當于 m+1 階的加權移動平均值,其中所有觀測值的權重為 1/m,除了第一項和最后一項的權重為 1/(2m)。
????????因此,如果季節性周期是偶數m,我們使用 2×m -MA 來估計趨勢-周期(對稱的m階滑動平均)。
????????如果季節性周期是奇數 m ,我們使用 m -MA 來估計趨勢周期。
????????例如,2×12 -MA 可用于估計每月數據的趨勢周期,而 7-MA 可用于估計具有每周季節性的每日數據的趨勢周期。
????????MA 階數的其他選擇通常會導致趨勢周期估計受到數據季節性的影響。
2.4 加權滑動平均
????????滑動平均的組合產生加權滑動平均。 例如,上面討論的 2×4-MA 等價于加權 5-MA,其權重為
? ? ? ? 一般來說,加權m-MA可以寫成(其中m=2k+1)?
?????????重要的是權重總和為 1,并且它們是對稱的( )。
????????上面說的簡單?m -MA?是一種特殊情況,所有的權重都等于 1/m
????????加權滑動平均的一個主要優點是它們可以更平滑地估計趨勢周期。 與以相同權重進入和離開計算的簡單?m -MA不同,它們的權重緩慢增加然后緩慢減少,從而形成更平滑的曲線。
? ?2.5 亨德森滑動平均
? ?在趨勢的估計中,也使用了亨德森移動平均線。 選擇這些濾波器是因為它們的平滑特性。 可以使用公式計算 2p+1 階 Henderson 移動平均的系數
其中n=p+2?
3 經典的分解方法
????????經典分解有兩種形式:加法分解和乘法分解。 下面描述了具有季節性周期 m 的時間序列(例如,m=4 用于季度數據,m=12 用于月度數據,m=7 用于具有每周模式的每日數據)。'?????
???????????在經典分解中,我們假設季節性成分每年都是恒定的。 對于乘法季節性,m 值有時稱為“季節性指數 seasonal indices”。
3.1 加法分解
- 如果 m 是偶數,則使用 2×m-MA (對稱的m階滑動平均)計算趨勢周期分量 。 如果 m 是奇數,則使用 m -MA 計算趨勢-周期分量 。
- 計算去趨勢序列
- 要估計每個季節的季節性成分,只需平均該季節的去趨勢值。
- 例如,對于月度數據,3 月的季節性成分是數據中所有去趨勢的 3 月值的平均值。
- 然后調整這些季節性指數以確保它們之和為?0 (這里需要限制和,是為了更好地說明季節性和平均值之間的關系【比如在平均值之上0.05的數值,在平均值之下0.01的數值這樣】)
- 通過將這些月度值串在一起,然后為每一年的數據復制序列來獲得季節性分量。
- 這便給出了
- 剩余部分是通過減去估計的季節性和趨勢周期部分來計算的
3.2 乘法分解
????????經典的乘法分解是類似的,只是減法被除法代替。
- 如果 m 是偶數,則使用 2×m-MA (對稱的m階滑動平均)計算趨勢周期分量 。 如果 m 是奇數,則使用 m -MA 計算趨勢-周期分量 。
- 計算去趨勢序列
- ?要估計每個季節的季節性成分,只需平均該季節的去趨勢值。
- 例如,對于月度數據,3 月的季節性成分是數據中所有去趨勢的 3 月值的平均值。
- 然后調整這些季節性指數以確保它們之和為m(這里需要限制和,是為了更好地說明季節性和平均值之間的關系【比如在平均值之上0.05的比例,在平均值之下0.01的比例這樣】)
- 通過將這些月度值串在一起,然后為每一年的數據復制序列來獲得季節性分量。
- 這便給出了
- 剩余部分是通過減去估計的季節性和趨勢周期部分來計算的
3.3 經典時間序列分解結果
????????圖 6.8 顯示了電氣設備指數的經典時間序列分解結果。 將此分解與圖 6.1 中所示的分解進行比較。
????????2009 年剩余值低于 1 的運行表明趨勢周期成分存在一些“泄漏”到剩余成分中。 趨勢周期估計過度平滑了數據的下降,相應的剩余值受到了較差的趨勢周期估計的影響。
?
?3.4 R語言實現
還是2.11節的y
3.4.1 加法分解
y %>% decompose(type='additive') %>% autoplot()trend 左右各少半年
seasonality 一個周期內的值求和為0
?3.4.2 乘法分解
y %>% decompose(type='multiplicative') %>% autoplot()trend 左右各少半年
seasonality 一個周期內的值求和為12
?3.5 經典時間序列分解的局限性
雖然經典分解仍然被廣泛使用,但不推薦使用,因為現在有幾種更好的方法。
下面總結了經典分解的一些問題。
- 對于前幾次和最后幾次觀察,趨勢周期的估計是不可用的。例如,如果 m=12 ,前六個或后六個觀察值沒有趨勢周期估計。因此,也沒有對相同時間段的剩余部分的估計。
- 趨勢-周期估計傾向于過度平滑數據中的快速上升和下降(如上例所示)。
- 經典分解方法假設季節性成分每年重復。對于許多系列,這是一個合理的假設,但對于一些較長的系列則不是。
- 例如,隨著空調的普及,電力需求模式隨著時間的推移而發生了變化。具體而言,在許多地方,幾十年前的季節性使用模式在冬季(由于供暖)具有最大需求,而當前的季節性模式在夏季(由于空調)具有最大需求。
- 經典的分解方法無法捕捉這些隨時間的季節性變化。
- 有時,少數時期的時間序列值可能特別不尋常。例如,每月的航空客運量可能會受到勞資糾紛的影響,使糾紛期間的交通量與往常不同。經典方法對這些異常值并不穩健。
4 X11分解
????????一種流行的分解季度和月度數據的方法是 X11 方法,它起源于美國人口普查局和加拿大統計局。
????????該方法基于經典分解,但包含許多額外的步驟和功能,以克服上一節中討論的經典分解的缺點:
- 趨勢周期估計值可用于包括終點在內的所有觀測值
- 允許季節性分量隨時間緩慢變化。
- X11 還具有一些復雜的方法來處理交易日變化、假日效應和已知預測變量的影響。
- 它同時包含了加法和乘法分解。
- 該過程是完全自動的,并且往往對時間序列中的異常值具有高度魯棒性。
?????????將此分解與圖 6.1 所示的 STL 分解和圖 6.8 所示的經典分解進行比較。 X11 趨勢周期比其他兩種方法更好地捕捉到了 2009 年初數據的突然下降,現在在剩余部分中更清楚地看到了 2009 年底的異常觀察。
總結
以上是生活随笔為你收集整理的机器学习笔记:时间序列分解(滑动平均)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NTU 课程笔记 CV6422 假设检验
- 下一篇: statemodels 笔记: lowe