A. 應用時間序列分析有哪幾種方法
時間序列分析常用的方法:趨勢擬合法和平滑法。
1、趨勢擬合法就是把時間作為自變數,相應的序列觀察值作為因變數,建立序列值隨時間變化的回歸模型的方法。包括線性擬合和非線性擬合。
線性擬合的使用場合為長期趨勢呈現出線形特徵的場合。參數估計方法為最小二乘估計。
非線性擬合的使用場合為長期趨勢呈現出非線形特徵的場合。其參數估計的思想是把能轉換成線性模型的都轉換成線性模型,用線性最小二乘法進行參數估計。實在不能轉換成線性的,就用迭代法進行參數估計。
2、平滑法是進行趨勢分析和預測時常用的一種方法。它是利用修勻技術,削弱短期隨機波動對序列的影響,使序列平滑化,從而顯示出長期趨勢變化的規律 。
(1)時間序列分析數據方法應用擴展閱讀
時間序列分析的主要用途:
1、系統描述
根據對系統進行觀測得到的時間序列數據,用曲線擬合方法對系統進行客觀的描述。
2、系統分析
當觀測值取自兩個以上變數時,可用一個時間序列中的變化去說明另一個時間序列中的變化,從而深入了解給定時間序列產生的機理。
3、預測未來
一般用ARMA模型擬合時間序列,預測該時間序列未來值。
4、決策和控制
根據時間序列模型可調整輸入變數使系統發展過程保持在目標值上,即預測到過程要偏離目標時便可進行必要的控制。
B. 16種常用的數據分析方法-時間序列分析
時間序列(time series)是系統中某一變數的觀測值按時間順序(時間間隔相同)排列成一個數值序列,展示研究對象在一定時期內的變動過程,從中尋找和分析事物的變化特徵、發展趨勢和規律。它是系統中某一變數受其它各種因素影響的總結果。
研究時間序列主要目的可以進行預測,根據已有的時間序列數據預測未來的變化。時間序列預測關鍵:確定已有的時間序列的變化模式,並假定這種模式會延續到未來。
時間序列的基本特點
假設事物發展趨勢會延伸到未來
預測所依據的數據具有不規則性
不考慮事物發展之間的因果關系
時間序列數據用於描述現象隨時間發展變化的特徵。
時間序列考慮因素
時間序列分析就其發展歷史階段和所使用的統計分析方法看分為傳統的時間序列分析和現代時間序列分析,根據觀察時間的不同,時間序列中的時間可以是可以是年份、季度、月份或其他任何時間形式。
時間序列分析時的主要考慮的因素是:
l長期趨勢(Long-term trend)
時間序列可能相當穩定或隨時間呈現某種趨勢。
時間序列趨勢一般為線性的(linear),二次方程式的 (quadratic)或指數函數(exponential function)。
l季節性變動(Seasonal variation)
按時間變動,呈現重復性行為的序列。
季節性變動通常和日期或氣候有關。
季節性變動通常和年周期有關。
l周期性變動(Cyclical variation)
相對於季節性變動,時間序列可能經歷「周期性變動」。
周期性變動通常是因為經濟變動。
l隨機影響(Random effects)
除此之外,還有偶然性因素對時間序列產生影響,致使時間序列呈現出某種隨機波動。時間序列除去趨勢、周期性和季節性後的偶然性波動,稱為隨機性(random),也稱不規則波動(irregular variations)。
時間序列的主要成分
時間序列的成分可分為4種:
l趨勢(T)、
l季節性或季節變動(S)、
l周期性或循環波動(C)、
l隨機性或不規則波動(I)。
傳統時間序列分析的一項主要內容就是把這些成分從時間序列中分離出來,並將它們之間的關系用一定的數學關系式予以表達,而後分別進行分析。
時間序列建模基本步驟
1)用觀測、調查、統計、抽樣等方法取得被觀測系統時間序列動態數據。
2)根據動態數據作相關圖,進行相關分析,求自相關函數。
相關圖能顯示出變化的趨勢和周期,並能發現跳點和拐點。
跳點是指與其他數據不一致的觀測值。如果跳點是正確的觀測值,在建模時應考慮進去,如果是反常現象,則應把跳點調整到期望值。
拐點則是指時間序列從上升趨勢突然變為下降趨勢的點。如果存在拐點,則在建模時必須用不同的模型去分段擬合該時間序列,例如採用門限回歸模型。
3)辨識合適的隨機模型,進行曲線擬合,即用通用隨機模型去擬合時間序列的觀測數據。
對於短的或簡單的時間序列,可用趨勢模型和季節模型加上誤差來進行擬合。
對於平穩時間序列,可用通用ARMA模型(自回歸滑動平均模型)及其特殊情況的自回歸模型、滑動平均模型或組合-ARMA模型等來進行擬合。
當觀測值多於50個時一般都採用ARMA模型。對於非平穩時間序列則要先將觀測到的時間序列進行差分運算,化為平穩時間序列,再用適當模型去擬合這個差分序列。
spss時間序列分析過程
第一步:定義日期標示量:
打開數據文件,單擊"數據",選擇"定義日期和時間",彈出"定義日期"對話框,
數據中的起始時間就是數據文件裡面的單元格第一個時間,我的第一個是1997年8月,每行表示的是月度銷售量,因此,需要從"定義日期"對話框的左側"個案是"框中選擇"年,月",在左側輸入『1997』,月框中輸入『8』,表示第一個個案的起始月是1997年8月,
最後點擊確認,這樣spss數據文件裡面就會生成3個新的變數
如下圖:
第二步:了解時間序列的變化趨勢
了解時間序列的變化趨勢做一個序列表就可以了,單擊"分析",裡面選擇"時間序列預測,選擇"序列圖"對話框,然後把'平均值'移到"變數"框裡面,『DATE_』移到"時間軸標簽"框中,單擊"確定"。結果如圖
根據序列圖的分析知道,序列的波動隨著季節的波動越來越大,所以我們選擇乘法模型;
第三步:分析
單擊「分析」,選擇時間序列預測,然後選擇「季節性分解」,彈出「季節性分解」對話框,確認無誤之後點擊確定,如圖:
多了四個變數:
lERR表示誤差分析;
lSAS表示季節因素校正後序列;
lSAF表示季節因子;
lSTC表示長期趨勢和循環變動序列。
我們可以把新出現的四個變數、平均值和DATE_做序列圖。先把ERR、SAS、STC和平均值和DATE_做個序列圖,效果如下:
再單獨做個SAT和DATE_的時間序列圖
第四步:預測
1、 單擊「分析」,選擇「時間序列預測」,然後選擇「創建傳統模型」,之後就會彈出「時間序列建模」對話框。
2、 將「平均值」移至「因變數」框中,然後確定中間的「方法」,在下拉列表中選擇「專家建模器」項,單擊右側的「條件」按鈕,彈出「時間序列建模器:專家建模器條件」對話框。
3、 在「時間序列建模器:專家建模器條件」對話框的「模型」選項卡中,在「模型類型」框中選擇「所有模型」項,並勾選「專家建模器考慮季節性模型」復選框,設置完,點「繼續」按鈕
4、 在「時間序列建模器」對話框中,切換至「保存」選項卡中,勾選「預測值」復選框,單擊「導出模型條件」框中「XML文件」後面的「瀏覽」按鈕,然後設置導出的模型文件和保存路徑,然後單擊「確定」按鈕就可以了。
做完上面的步驟之後,在原始數據上面就又會多一列預測值出現。如圖:
之前保存了預測的模型,我們現在就利用那個模型進行預測數據。
1、 單擊「分析」,選擇「時間序列預測」,然後選擇「應用傳統模型」,彈出「應用模型序列」對話框。具體的操作如下圖:
最後一步切換至「保存」界面,勾選「預測值」之後單擊確定就可以了。
從預測值直接看看不出來,可以把預測的數據和原始數據放到一起看下,也是直接做序列圖就可以。
這樣就完成了一次時間序列的模型,具體的預測數據可以看原始數據上面的出現的新的一列數據。
- End -
C. 時間序列數據分析方法
時間序列數據聚類方法主要包括兩種思路:
一種是通過時間序列進行壓縮降維,轉換成靜態數據,如通過特徵提取、模型參數等方式,再使用靜態數據方法進行聚類;另一種是通過改進傳統的面向靜態數據的點聚類方法,使之適用於序列數據類型。
(1)基於初始數據的聚類
一般指不對初始數據進行壓縮,直接進行聚類。可以有效捕捉時間序列的細節,不丟失局部特徵,但是數據量大的情況下計算效率降低。
(2)基於特徵數據的聚類
通過時域分析、頻域分析等方法,提取時間序列的多尺度特徵,從而把高維的原始數據序列轉換到用特徵向量表示的低維特徵空間。
(3)基於模型的聚類
基本思路是在基於一定的假設條件,用模型擬合原始序列,再用模型是否能生成另外一個序列作為兩個時間序列是否屬於同一類的評價指標,或者用模型的參數作為該序列的特徵再進行聚類。特點是聚類結果不穩定,對模型依賴性很強,難以可視化。
D. 時間序列分析方法
時間序列是指一組在連續時間上測得的數據,其在數學上的定義是一組向量x(t), t=0,1,2,3,...,其中t表示數據所在的時間點,x(t)是一組按時間順序(測得)排列的隨機變數。包含單個變數的時間序列稱為單變數時間序列,而包含多個變數的時間序列則稱為多變數。
時間序列在很多方面多有涉及到,如天氣預報,每天每個小時的氣溫,股票走勢等等,在商業方面有諸多應用,如:
下面我們將通過一個航班數據來說明如何使用已有的工具來進行時間序列數據預測。常用來處理時間序列的包有三個:
對於基於AR、MA的方法一般需要數據預處理,因此本文分為三部分:
通過簡單的初步處理以及可視化可以幫助我們有效快速的了解數據的分布(以及時間序列的趨勢)。
觀察數據的頻率直方圖以及密度分布圖以洞察數據結構,從下圖可以看出:
使用 statsmodels 對該時間序列進行分解,以了解該時間序列數據的各個部分,每個部分都代表著一種模式類別。借用 statsmodels 序列分解我們可以看到數據的主要趨勢成分、季節成分和殘差成分,這與我們上面的推測相符合。
如果一個時間序列的均值和方差隨著時間變化保持穩定,則可以說這個時間序列是穩定的。
大多數時間序列模型都是在平穩序列的前提下進行建模的。造成這種情況的主要原因是序列可以有許多種(復雜的)非平穩的方式,而平穩性只有一種,更加的易於分析,易於建模。
在直覺上,如果一段時間序列在某一段時間序列內具有特定的行為,那麼將來很可能具有相同的行為。譬如已連續觀察一個星期都是六點出太陽,那麼可以推測明天也是六點出太陽,誤差非常小。
而且,與非平穩序列相比,平穩序列相關的理論更加成熟且易於實現。
一般可以通過以下幾種方式來檢驗序列的平穩性:
如果時間序列是平穩性的,那麼在ACF/PACF中觀測點數據與之前數據點的相關性會急劇下降。
下圖中的圓錐形陰影是置信區間,區間外的數據點說明其與觀測數據本身具有強烈的相關性,這種相關性並非來自於統計波動。
PACF在計算X(t)和X(t-h)的相關性的時候,挖空在(t-h,t)上所有數據點對X(t)的影響,反應的是X(t)和X(t-h)之間真實的相關性(直接相關性)。
從下圖可以看出,數據點的相關性並沒有急劇下降,因此該序列是非平穩的。
如果序列是平穩的,那麼其滑動均值/方差會隨著時間的變化保持穩定。
但是從下圖我們可以看到,隨著時間的推移,均值呈現明顯的上升趨勢,而方差也呈現出波動式上升的趨勢,因此該序列是非平穩的。
一般來講p值小於0.05我們便認為其是顯著性的,可以拒絕零假設。但是這里的p值為0.99明顯是非顯著性的,因此接受零假設,該序列是非平穩的。
從上面的平穩性檢驗我們可以知道該時間序列為非平穩序列。此外,通過上面1.3部分的序列分解我們也可以看到,該序列可分解為3部分:
我們可以使用數據轉換來對那些較大的數據施加更大的懲罰,如取對數、開平方根、立方根、差分等,以達到序列平穩的目的。
滑動平均後數據失去了其原來的特點(波動式上升),這樣損失的信息過多,肯定是無法作為後續模型的輸入的。
差分是常用的將非平穩序列轉換平穩序列的方法。ARIMA中的 'I' 便是指的差分,因此ARIMA是可以對非平穩序列進行處理的,其相當於先將非平穩序列通過差分轉換為平穩序列再來使用ARMA進行建模。
一般差分是用某時刻數值減去上一時刻數值來得到新序列。但這里有一點區別,我們是使用當前時刻數值來減去其對應時刻的滑動均值。
我們來看看剛剛差分的結果怎麼樣。
讓我們稍微總結下我們剛剛的步驟:
通過上面的3步我們成功的將一個非平穩序列轉換成了一個平穩序列。上面使用的是最簡單的滑動均值,下面我們試試指數滑動平均怎麼樣。
上面是最常用的指數滑動平均的定義,但是pandas實現的指數滑動平均好像與這個有一點區別,詳細區別還得去查pandas文檔。
指數滑動均值的效果看起來也很差。我們使用差分+指數滑動平均再來試試吧。
在上面我們通過 取log+(指數)滑動平均+差分 已經成功將非平穩序列轉換為了平穩序列。
下面我們看看,轉換後的平穩序列的各個成分是什麼樣的。不過這里我們使用的是最簡單的差分,當前時刻的值等於原始序列當前時刻的值減去原始序列中上一時刻的值,即: x'(t) = x(t) - x(t-1)。
看起來挺不錯,是個平穩序列的樣子。不過,還是檢驗一下吧。
可以看到,趨勢(Trend)部分已基本被去除,但是季節性(seasonal)部分還是很明顯,而ARIMA是無法對含有seasonal的序列進行建模分析的。
在一開始我們提到了3個包均可以對時間序列進行建模。
為了簡便,這里 pmdarima 和 statsmodels.tsa 直接使用最好的建模方法即SARIMA,該方法在ARIMA的基礎上添加了額外功能,可以擬合seasonal部分以及額外添加的數據。
在使用ARIMA(Autoregressive Integrated Moving Average)模型前,我們先簡單了解下這個模型。這個模型其實可以包括三部分,分別對應著三個參數(p, d, q):
因此ARIMA模型就是將AR和MA模型結合起來然後加上差分,克服了不能處理非平穩序列的問題。但是,需要注意的是,其仍然無法對seasonal進行擬合。
下面開始使用ARIMA來擬合數據。
(1) 先分訓練集和驗證集。需要注意的是這里使用的原始數據來進行建模而非轉換後的數據。
(2)ARIMA一階差分建模並預測
(3)對差分結果進行還原
先手動選擇幾組參數,然後參數搜索找到最佳值。需要注意的是,為了避免過擬合,這里的階數一般不太建議取太大。
可視化看看結果怎麼樣吧。
(6)最後,我們還能對擬合好的模型進行診斷看看結果怎麼樣。
我們主要關心的是確保模型的殘差(resial)部分互不相關,並且呈零均值正態分布。若季節性ARIMA(SARIMA)不滿足這些屬性,則表明它可以進一步改善。模型診斷根據下面的幾個方面來判斷殘差是否符合正態分布:
同樣的,為了方便,我們這里使用 pmdarima 中一個可以自動搜索最佳參數的方法 auto_arima 來進行建模。
一般來說,在實際生活和生產環節中,除了季節項,趨勢項,剩餘項之外,通常還有節假日的效應。所以,在prophet演算法裡面,作者同時考慮了以上四項,即:
上式中,
更多詳細Prophet演算法內容可以參考 Facebook 時間序列預測演算法 Prophet 的研究 。
Prophet演算法就是通過擬合這幾項,然後把它們累加起來得到時間序列的預測值。
Prophet提供了直觀且易於調整的參數:
Prophet對輸入數據有要求:
關於 Prophet 的使用例子可以參考 Prophet example notebooks
下面使用 Prophet 來進行處理數據。
參考:
Facebook 時間序列預測演算法 Prophet 的研究
Prophet example notebooks
auto_arima documentation for selecting best model
數據分析技術:時間序列分析的AR/MA/ARMA/ARIMA模型體系
https://github.com/advaitsave/Introction-to-Time-Series-forecasting-Python
時間序列分析
My First Time Series Comp (Added Prophet)
Prophet官方文檔: https://facebookincubator.github.io