机器学习笔记(时间序列):不同类型的图示
1 時間圖 time-plot
????????就是最普通的繪制一張隨時間變化的連點圖。不過在這一張圖中,可能會有時間序列的不同屬性:趨勢、季節(jié)性、周期性
1.0 R語言補充:設置時間序列
y <- ts(c(123,39,78,52,110), start=2012)?
?如果我們不是一年一個數(shù)據(jù),那么我們可以設置freq,表示一年的頻率
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)識別出來的是2020到2023,也就是3年
library(forecast) library(ggplot2)forecast::autoplot(y)+ggtitle('3-year data')+xlab('year')+ylab('hundred')?1.0.1 截取時間序列
1.0.1.1 使用window 函數(shù)
yJan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec 2020 5.0 3.0 3.1 3.2 3.3 3.4 3.5 3.3 3.2 4.0 4.1 4.2 2021 6.0 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8 4.9 5.0 2022 10.0 9.0 8.0 8.5 8.4 8.5 8.6 8.7 8.8 8.9 9.0 9.5window(y,start=2021)Jan Feb Mar Apr May Jun Jul Aug 2021 6.0 4.0 4.1 4.2 4.3 4.4 4.5 4.6 2022 10.0 9.0 8.0 8.5 8.4 8.5 8.6 8.7Sep Oct Nov Dec 2021 4.7 4.8 4.9 5.0 2022 8.8 8.9 9.0 9.5想要截斷到某個月份的話,也可以:
y_pre=window(y,start=2020,end=c(2021,12)) > y_preJan Feb Mar Apr May Jun Jul Aug Sep Oct 2020 5.0 3.0 3.1 3.2 3.3 3.4 3.5 3.3 3.2 4.0 2021 6.0 4.0 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8Nov Dec 2020 4.1 4.2 2021 4.9 5.01.0.1.2 使用subset函數(shù)
可以按照下標截取(R語言是從1開始計數(shù)的)?
subset(y,start=2)Jan Feb Mar Apr May Jun Jul Aug 2020 3.0 3.1 3.2 3.3 3.4 3.5 3.3 2021 6.0 4.0 4.1 4.2 4.3 4.4 4.5 4.6 2022 10.0 9.0 8.0 8.5 8.4 8.5 8.6 8.7Sep Oct Nov Dec 2020 3.2 4.0 4.1 4.2 2021 4.7 4.8 4.9 5.0 2022 8.8 8.9 9.0 9.5?我們這里是按照月份劃分年的數(shù)據(jù),所以我們可以按照月份截取(如果按照季度,可以是quarter)
subset(y,month=1) Time Series: Start = 2020 End = 2022 Frequency = 1 [1] 5 6 10?1.0.1.3 head & tail
截取最前和最后的幾個
head(y,2)Jan Feb 2020 5 3head(y)Jan Feb Mar Apr May Jun 2020 5.0 3.0 3.1 3.2 3.3 3.4tail(y,2)Nov Dec 2022 9.0 9.5tail(y)Jul Aug Sep Oct Nov Dec 2022 8.6 8.7 8.8 8.9 9.0 9.51.1 趨勢 trend
當數(shù)據(jù)長期增加或減少時,就會出現(xiàn)趨勢。 它不必是線性的。
有時我們將趨勢稱為“改變方向”,即它可能從上升趨勢變?yōu)橄陆第厔荨?/p>
1.2 季節(jié)性 seasonality
????????當時間序列受到季節(jié)因素(例如一年中的某個時間或一周中的某一天)的影響時,就會出現(xiàn)季節(jié)性模式。
????????季節(jié)性總是具有固定且已知的頻率。
1.3 周期性(循環(huán)) Cyclic
????????當數(shù)據(jù)表現(xiàn)出非固定頻率的上升和下降時,就會出現(xiàn)一個循環(huán)。
許多人將周期性行為與季節(jié)性行為混為一談(我之前有些博客可能也有這個問題,我會陸續(xù)更改),但它們確實完全不同: 如果波動不是固定頻率的,那么它們是循環(huán)的; 如果頻率不變并且與日歷的某些方面相關聯(lián),則該模式是季節(jié)性的。
???????? 一般來說,周期的平均長度比季節(jié)性模式的長度要長,而且周期的幅度往往比季節(jié)性模式的幅度更易變化。
1.4 舉例說明
- ?每月房屋銷售(左上圖)顯示出每年內的強烈季節(jié)性,以及一些大約 6-10 年的強烈周期性行為。 這一數(shù)據(jù)沒有明顯的趨勢。
- 美國國庫券合約(右上)顯示了 1981 年芝加哥市場連續(xù) 100 個交易日的結果。這里沒有季節(jié)性,但有明顯的下降趨勢。 可能,如果我們有一個更長的序列,我們會看到這種下降趨勢實際上是一個長周期的一部分,但僅從 100 天來看,它似乎只是一種趨勢。
- 澳大利亞季度發(fā)電量(左下)呈現(xiàn)強勁增長趨勢,具有很強的季節(jié)性。 這里沒有任何循環(huán)行為的證據(jù)。
- 谷歌收盤價(右下)的每日變化沒有趨勢、季節(jié)性或周期性行為。 隨機波動似乎不太可預測,也沒有強大的模式可以幫助開發(fā)預測模型。
2 周期性圖 seasonal plot
????????季節(jié)性圖類似于時間圖time plot,只是數(shù)據(jù)是針對觀察數(shù)據(jù)的各個“季節(jié)”繪制的。
?現(xiàn)在每個季節(jié)的數(shù)據(jù)都重疊了。 季節(jié)性圖可以更清楚地看到潛在的季節(jié)性模式,并且在識別模式發(fā)生變化的年份時特別有用。
????????通過上述周期性圖,很明顯,每年 1 月份的銷售額都會出現(xiàn)大幅增長。 實際上,這些可能是 12 月下旬的銷售,因為客戶年底前購物,但銷售直到一兩周后才向政府登記。
????????該圖還顯示,2008 年 3 月的銷售額異常少(大多數(shù)其他年份顯示在 2 月和 3 月之間有所增加)。 2008 年 6 月的少量銷售額可能是由于在收集數(shù)據(jù)時對銷售額的統(tǒng)計不完整(比如統(tǒng)計的時候還在六月份)。
????????季節(jié)性圖的一個有用變化是使用極坐標。 設置 polar=TRUE 使時間序列軸呈圓形而不是水平,如下所示。 ?
2.1 R語言補充
用和1.0一樣的數(shù)據(jù)的library
forecast::ggseasonplot(y,year.labels = TRUE,year.labels.left = TRUE)+ylab('hundred')+ggtitle('seasonal plot')?極坐標:
forecast::ggseasonplot(y,polar=TRUE)+ylab('hundred')+ggtitle('seasonal plot')?3 周期性子圖
另一種強調季節(jié)性模式的圖是在單獨的時間子圖中將每個季節(jié)的數(shù)據(jù)收集在一起。
?????????藍色水平線表示每個月的平均值。 這種形式的繪圖可以清楚地看到潛在的季節(jié)性模式,還可以顯示季節(jié)性隨時間的變化。 它對于識別特定季節(jié)內的變化特別有用。
???????? 在這個例子中,情節(jié)并不是特別有啟發(fā)性。 但在某些情況下,這是查看隨時間變化的季節(jié)性變化的最有用的方法。
3.1R語言補充
個人嘗試中,加了forcast::反而報錯
ggsubseriesplot(y)+ylab('hundred')+ggtitle('seasonal subseries plot')?4 散點圖 scatter plot
到目前為止討論的圖表對于可視化單個時間序列很有用。 探索時間序列之間的關系也很有用。
圖 2.7 顯示了 2014 年澳大利亞維多利亞州的兩個時間序列:半小時電力需求(千兆瓦)和溫度(攝氏度)。 溫度是針對維多利亞州最大城市墨爾本的,而需求值是針對整個州的。
我們可以通過繪制一個系列與另一個系列來研究需求和溫度之間的關系。
?4.1 R語言補充
假設我們有另一個時間序列x
x<-ts(c(5,6,7.1,2.2,5.3,1.4,2.5,6.3,3.2,4,5.1,4.2,6,4,4.1,3.2,2.3,8.4,0.5,4.6,4.7,3.8,4.9,5,12,7,8,6.5,8.4,5.5,9.6,7.7,9.8,10.9,9,6.5),start = 2020,frequency = 12)qplot(x,y)?5 相關性
????????計算相關系數(shù)來衡量兩個變量之間關系的強度是很常見的。
???????? 變量 x 和 y 之間的相關性由下式給出
?????????r 的值始終介于 - 1 和 1 之間,負值表示負關系,正值表示正關系。
????????圖 2.9 中的圖表顯示了具有不同相關程度的數(shù)據(jù)集示例。
????????
?????????相關系數(shù)僅衡量線性關系的強度,有時可能會產生誤導。 例如,圖 2.8 所示的電力需求與溫度數(shù)據(jù)的相關性為 0.28,但非線性關系比這要強。
????????圖 2.10 中的圖都具有 0.82 的相關系數(shù),但它們的關系非常不同。 這表明查看數(shù)據(jù)圖而不是簡單地依賴相關值是多么重要。
????????
5.1 相關性矩陣 scatter plot
比如我們現(xiàn)在有5個獨立的時間序列?
?要查看這五個時間序列之間的關系,我們可以將每個時間序列與其他時間序列進行對比。 這些圖可以排列在散點圖矩陣中
?????????對于每個面板,縱軸上的變量由該行中的變量名給出,橫軸上的變量由該列中的變量名給出。
???????? 有許多選項可用于在每個面板中生成不同的圖。 在默認版本中,相關性顯示在圖的右上半部分,而散點圖顯示在下半部分。 在對角線上顯示密度圖。
????????散點圖矩陣的價值在于它可以快速查看所有變量對之間的關系。 在此示例中,第二列圖顯示新南威爾士州北海岸的游客與新南威爾士州南海岸的游客之間存在很強的正相關關系,但新南威爾士州北海岸的游客與新南威爾士州南部內陸的游客之間沒有可檢測到的關系。
????????也可以看到異常值。 新南威爾士州大都會地區(qū)有一個異常高的季度,對應于 2000 年悉尼奧運會。 這在圖 2.12 左列的前兩個圖中最容易看出,其中 NSW Metro 的最大值與主要的觀測云是分開的。
5.2.1 R語言補充
GGally::ggpairs(data.frame(as.numeric(x), as.numeric(y)))?6 lag plot? 滯后圖
????????圖 2.13 顯示了澳大利亞啤酒季度產量的散點圖,其中橫軸顯示了時間序列的滯后值。 每個圖表顯示了針對不同 k 值繪制的 yt 與 yt?k 的關系圖。
????????
????????這里的顏色表示變量代表不同的季度。 點按時間順序連接成線。
???????? 這種關系在滯后 4 和 8 處是非常正向的,反映了數(shù)據(jù)的強烈季節(jié)性。(t和t-4;t和t-8之間的強正向關系) 出現(xiàn)滯后 2 和 6 的負相關是因為峰值(第四季度)與波谷(第二季度)相對應
?6.1 補充 R語言實現(xiàn)
gglagplot((x))?7 自相關 autocorrelation
????????正如相關性衡量兩個變量之間線性關系的程度一樣,自相關衡量時間序列滯后值之間的線性關系。
????????有幾個自相關系數(shù),對應于滯后圖中的每個面板。 例如,r1 測量 yt 和 yt-1 之間的關系,r2 測量 yt 和 yt-2 之間的關系,依此類推。
? ? ? ? rk可以寫成
? ? ? ? 其中T 是時間序列的長度
?????????下表給出了啤酒生產數(shù)據(jù)的前九個自相關系數(shù)。
這些對應于圖 2.13 中的九個散點圖。
????????繪制自相關系數(shù)以顯示自相關函數(shù)或 ACF。 該圖也稱為相關圖
????????
?在此圖中:
- r4 高于其他滯后。 這是由于數(shù)據(jù)中的季節(jié)性模式:峰值往往相隔四個季度,而谷底往往也相隔四個季度。
- r2 比其他滯后更負,因為波谷往往比波峰落后四分之二。
- 藍色虛線表示相關性是否顯著不同于零。
7.1 R語言實現(xiàn)
ggAcf(x)?7.2 ACF圖中 的趨勢和季節(jié)性
????????當數(shù)據(jù)有趨勢時,小滯后的自相關往往較大且為正,因為時間附近的觀測值也在附近。 因此,有趨勢的時間序列的 ACF 往往具有正值,隨著滯后的增加而緩慢下降。
????????當數(shù)據(jù)是季節(jié)性的時,季節(jié)性滯后(季節(jié)性頻率的倍數(shù))的自相關將大于其他滯后的自相關。
????????當數(shù)據(jù)同時具有趨勢和季節(jié)性時,會看到這些影響的組合。
???????? 圖 2.15 中繪制的每月澳大利亞電力需求序列顯示了趨勢和季節(jié)性。 其 ACF 如圖 2.16 所示。
????????
?
?????????隨著滯后增加,ACF 緩慢下降是由于趨勢,而“扇形”形狀是由于季節(jié)性。
8 白噪聲
?不顯示自相關的時間序列稱為白噪聲。 圖 2.17 給出了一個白噪聲系列的例子。
set.seed(30)y <- ts(rnorm(50))autoplot(y) + ggtitle("White noise")?他的ACF是
?
?????????對于白噪聲序列,我們期望每個自相關接近于零。
???????? 當然,它們不會完全等于零,因為存在一些隨機變化。
????????對于白噪聲序列,我們預計 ACF 中 95% 的尖峰位于 ±2/√T 范圍內,其中 T 是時間序列的長度。 通常將這些界限繪制在 ACF 圖上(上面的藍色虛線)。
???????? 如果一個或多個大尖峰超出這些界限,或者如果超過 5% 的尖峰超出這些界限,則該系列可能不是白噪聲。
????????在上例中,T=50,因此邊界為 ±2/√50=±0.28。 所有的自相關系數(shù)都在這些范圍內,因此數(shù)據(jù)是白噪聲。
9 相鄰點之間的殘差圖
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)library(forecast) res<-residuals(naive(y))library(ggplot2) autoplot(res)+ggtitle('residuals of neighbors')9.1 checkresiduals
checkresiduals((y))?
?
10 直方圖
gghistogram(y)?
參考資料:2.9 White noise | Forecasting: Principles?and?Practice (2nd ed) (otexts.com)?
總結
以上是生活随笔為你收集整理的机器学习笔记(时间序列):不同类型的图示的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NTU 课程笔记:CV6422 置信区间
- 下一篇: 机器学习笔记 时间序列预测(最基本的方法