0
雷鋒網(wǎng) AI 科技評論按:這篇文章來自 Automattic 的數(shù)據(jù)科學家 Carly Stambaugh,她研究了一個看似簡單的問題:分析序列數(shù)據(jù)中的季節(jié)性。「季節(jié)性」說起來很簡單,但是真的分析的時候,你要如何知道你分析出的季節(jié)性是切實存在的呢?雷鋒網(wǎng) AI 科技評論全文編譯如下。
最近有人找我?guī)兔Γ唧w是要某個時間序列中的「季節(jié)性」程度如何。聽起來仿佛很輕松的樣子,對吧?要知道在 Python 的模塊包 statsmodels 中就有一個看起來很好用的 seasal_decompose 函數(shù),并且你能在谷歌上很輕易的找到它!但實際上,這事兒卻比我預期的要復雜點兒。在這篇文章中,我將分享我在處理這個項目時遇到的一些問題以及我是如何應對的。
在試圖找到那些能夠量化時間序列受季節(jié)性因素影響程度的帖子或論文時,我將遇到的所有例子分為兩大類:
此外,每個例子都以「這是一個季節(jié)性趨勢的時間序列」開頭。所以,當你想去確定一個特定時間序列,它的季節(jié)性因素有多大時,這就提供不了什么幫助。
我發(fā)現(xiàn)沒有任何人寫過如何量化時間序列受季節(jié)性因素影響的程度。甚至,我還發(fā)現(xiàn)了一些與季節(jié)指數(shù)相矛盾的信息,于是決定繼續(xù)探索下去。當然了,如果說我繼續(xù)去尋找這樣的信息,我想我最終也能找到些什么。但我偏不繼續(xù)找,而是決定自己動手進行實驗!
首先,我將時間序列分解為趨勢,季節(jié)性和噪聲成分。這些成分看起來像這個樣子。
從季節(jié)分解分量的周期性來看,乍一看,數(shù)據(jù)明顯是季節(jié)性的。但是,在谷歌搜索季節(jié)性分解的幾個例子中,我遇到的每個季節(jié)性成分都顯示出周期性。
所以,我制作了一個 0 到 1000 之間隨機數(shù)據(jù)點組成的時間序列,并對其進行了分解。分解以后看起來像這樣。
它竟然也顯示出了周期性!不過,如果仔細查看每個成分中的 y 軸,就能注意到噪聲成分在隨機時間序列中具有最大范圍。
不過,在所討論的時間序列中,季節(jié)性成分的范圍比趨勢或噪聲顯然要小得多。
? 趨勢范圍:2000(3000至5000)
? 季節(jié)范圍:500(-250至250)
? 噪聲范圍:2000(-1000至1000)
(我注意到這里的趨勢和噪聲范圍有相同的幅度,但卻不知道這意味著什么。如果你知道的話,請毫不吝嗇的在評論中分享給我們吧!)
接下來,出于好玩的目的,這里還做了一個完全季節(jié)性時間序列的分解。其每年 1 月的值為 100,每月增加 100,直到 12 月達到 1200,并在 1 月再次回落到 100。
正如你在純粹由季節(jié)性趨勢驅動的數(shù)據(jù)中所預期的那樣,趨勢和噪聲分量是一個常量值0。
考慮到我們的系列看起來更接近隨機數(shù)據(jù),而不是純粹的季節(jié)性數(shù)據(jù),季節(jié)性分解如果說會有結果的話,那它似乎將指向一個弱季節(jié)性。在此,我對這個結論持懷疑態(tài)度,于是決定尋找更多的證據(jù)。那么接下來我們就開始使用另一種方法吧!
這是一個消除趨勢依賴的過程,這種依賴可能在時間序列中出現(xiàn)。我使用差分方法來檢查數(shù)據(jù)的趨勢依賴性。
假設你有一個數(shù)據(jù)集,它具有很強的年度季節(jié)性趨勢。比如:如果你想預測 6 月的價值是多少,看看去年 6 月的價值,你就會得到關于你能預期的信息。
再假設你有一個趨勢,它不以周期性的方式波動,而只是增加或減少。這種情況下,如果你想預測自己 6 月份的銷售額,就可以通過查看 6 月份之前的月份來獲得比只查看去年同期更多的信息。
這兩種趨勢都可以從時間序列中剔除。在差分中,你基本上是減去最相關的先前值來考慮趨勢。
例如,從時間序列中刪除一個「向右上方」的趨勢,本質上就是將圖形在平面上旋轉,留下「向右走」,但消掉「向上走」?!溉コ竟?jié)性趨勢基本上可以消除圖表中的起伏?!箷r間序列的去趨勢通常用于生成一個固定序列,從中可以建立一個預測模型。下面就是從數(shù)據(jù)集中移除向上向右的趨勢的例子。
因此,我推斷,通過移除特定類型的趨勢,并將結果序列與原始序列進行比較,我們可以判斷特定序列對原始時間序列的「影響」程度。
下面是每個不同的過程如何影響序列。這其中包含了原始序列的一個圖作為參考。
從這些數(shù)據(jù)來看,除去每日趨勢(或者如上文所說僅僅是趨勢組成部分)對原始系列的影響比除去季節(jié)性趨勢更大。不過,去除季節(jié)性趨勢也有一些影響。這鞏固了我之前的結論;如果數(shù)據(jù)中有季節(jié)性因素,那么與整體趨勢相比就顯得很弱。
對我而言,這似乎還不足以佐證,所以我又檢查了一件事。
在那個周末,我正喝著每月一售的數(shù)學啤酒(是的!就是有這么個東西!),我在研究生院的一個朋友建議我研究自相關函數(shù)(ACF)。
自相關函數(shù)顯示了數(shù)據(jù)集與自身隨著時間的推移而變化的版本的關聯(lián)程度。它計算了許多可能的時間變化的相關性(稱為滯后),和表面重復的相關性模式。
回到我們制作的數(shù)據(jù)集,我們純季節(jié)性時間序列的 ACF 看起來像這樣。
注意每隔 12 秒出現(xiàn)的尖峰。這意味著,當該變化是 12 個時間段(在我們的例子中是幾個月)的倍數(shù)時,原始序列和其移位版本之間的相關性最高,表明了每年的季節(jié)性趨勢。
這些圖中的藍色區(qū)域表示這些相關度量的置信區(qū)間。因此落在這個錐體之外的尖刺不太可能是偶然的。
牢記這一點之后,再讓我們看看隨機級數(shù)的ACF。
在這里,有一些尖峰,但它們都非常牢固地在錐體內,所以這個ACF不支持季節(jié)性趨勢的存在。
這是我們時間序列的 ACF。
這里,我們看到一些類似尖峰的區(qū)域,但是其余大多數(shù)都在圓錐體內。圓錐體外的尖峰指的是比12小得多的間隔,也就是說,當你把數(shù)據(jù)從它自身移得更遠時,相關性就會降低。在我看來,時間序列的總體趨勢比季節(jié)趨勢對時間序列的影響要大得多。
所以,長話短說,(不好意思,其實說來話長?。┪也]有找到壓倒性的證據(jù)來表明,季節(jié)性在我們的序列中扮演了很重要的角色。但盡管我什么也沒發(fā)現(xiàn)(生活可不就是這樣么?讓我們勇敢對面這個屢戰(zhàn)屢敗的事實唄~),我還是認為這是一個非常有意思的分析。你也會常干這種類似的事情嗎?
via investigating-seasonality-in-a-time-series-a-mystery-in-three-parts,雷鋒網(wǎng) AI 科技評論編譯
雷峰網(wǎng)版權文章,未經(jīng)授權禁止轉載。詳情見轉載須知。