1、時間序列
時間序列是一組按時間順序排列的資料點
比如:
- 每小時的氣壓
- 每年的醫院急診
- 按分鐘計算的股票價格
2、時間序列的組成部分
時間序列資料有三個主要組成部分。
- 趨勢
- 季節性
- 殘差或白噪聲
3、趨勢
在時間序列中記錄的長期緩慢變化/方向。
4、季節性
季節性是在固定時間內發生的時間序列中的迴圈模式。
下面的時間序列顯示了季節性,在每個週期中,都處於底部和峰值,模式相似。
5、殘差/白噪聲
這是一個時間序列的模式,完全是隨機的,不能用趨勢或季節成分來解釋。
6、時間序列分解
時間序列分解是將時間序列分解為其組成部分的過程,即趨勢,季節性和殘差。
在上圖顯示了時間序列資料,資料下面的圖中被分解為其組成部分。
“殘差”顯示的是時間序列中無法用趨勢或季節性解釋的模式。這些表示資料中的隨機性。
我們可以使用如下所示的statmodels庫來分解時間序列。
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.seasonal import STL
df = pd.read_csv("time-series-data.csv")
decomposition = STL(df['x'], period=12).fit()
decomposition可以進一步繪製如下:
fig, (ax1, ax2, ax3, ax4) = plt.subplots(nrows=4, ncols=1, sharex=True,figsize=(10,8))
ax1.plot(decomposition.observed)
ax1.set_ylabel('Observed')
ax2.plot(decomposition.trend)
ax2.set_ylabel('Trend')
ax3.plot(decomposition.seasonal)
ax3.set_ylabel('Seasonal')
ax4.plot(decomposition.resid)
ax4.set_ylabel('Residuals')
plt.tight_layout()
7、時間序列預測
預測是基於歷史時間資料在以後時間上進一步預測資料點的過程。
這可以使用統計模型來完成,例如:
- 自迴歸(AR)模型
- 移動平均(MA)模型
- 自迴歸移動平均(ARMA)模型
- 自迴歸綜合移動平均(ARIMA)模型
- 季節自迴歸綜合移動平均(SARIMA)模型
- 帶有外源迴歸量的季節自迴歸綜合移動平均(SARIMAX)模型
- 向量自迴歸(VAR)模型
- 向量誤差校正(VECM)模型
對於較大的資料集,使用以下提到的深度學習模型:
- 多層感知器(MLP)
- 迴圈神經網路(RNN)
- 長短期記憶網路(LSTM)
- 自迴歸LSTMs
- 卷積神經網路(CNN)
8、預測範圍
根據歷史時間序列資料預測未來資料點的時間段。
例如根據10年記錄的每日氣溫資料,預測下一週的氣溫。
在這種情況下,預測範圍是一週的時間。
9、預測模型基本步驟
時間序列預測模型主要由以下步驟組成:
- 收集時間序列資料
- 開發預測模型
- 將模型部署到生產環境中
- 收集新資料
- 監控和評估模型效能
- 重新訓練預測模型
- 將新模型部署到生產環境中
- 返回步驟4
10、時間序列預測與迴歸
下面是時間序列預測與迴歸任務的主要區別。
時間序列資料是有序的。這意味著觀察/資料點依賴於以前的觀察/資料點。因此,在模型訓練期間,資料點順序不會被打亂。
時間序列預測處理隨時間收集的資料。而回歸可以處理不同型別的資料。
11、Naïve預測與基線模型
基線模型是使用naïve對時間序列資料進行預測構建的最簡單的模型。作為比較其他預測模型的基線。
以下假設可用於建立基線模型:
- 未來值與時間序列中的最後一個數據點相同
- 未來值與某一時期內的值的中位數/眾數相同
- 未來的值等於一定時期內的平均值
- 未來的值與一定時期內的所有值相同
12、錯誤指標
準確預測的目的是最小化資料中預測值與實際值之間的差距。所以有各種錯誤指標用於監視和最小化這種差距。
常用的誤差指標如下:
- 均方誤差 (MSE)
- 平均絕對誤差 (MAE)
- 均方根誤差 (RMSE)
- 平均絕對百分比誤差 (MAPE)
13、平穩性
平穩的時間序列是其統計性質不隨時間變化的序列,這些統計屬性包括:
- 均值
- 方差
- 自相關性
一般的統計預測方法(AR、MA、ARMA)都假定時間序列是平穩的。所以如果非平穩時間序列資料與這些一起使用,結果將是不可靠的。
14、變換
變換可以認為是使時間序列平穩的數學過程。常用的變換有:
差分計算從一個時間步到另一個時間步的變化。有助於在時間序列資料中獲得恆定的均值。
要應用差分,我們只需從當前時間步長的值中減去之前時間步長的值。
一階差分:對資料應用一次的差分;二階差分:對資料應用兩次的差分
對數函式應用於時間序列以穩定其方差,但是對數變換後需要進行逆向變換,將最終的結果進行還原。
15、Dickey-Fuller (ADF) 檢驗
Augmented Dickey-Fuller (ADF) Test是一種用於時間序列資料的經濟統計學檢驗方法,用於確定一個時間序列是否具有單位根(unit root)。單位根表示時間序列具有非平穩性,即序列的均值和方差不隨時間變化而穩定。ADF測試的目的是確定時間序列是否具有趨勢,並且是否可以進行經濟統計學分析。
ADF測試的核心假設是,如果時間序列具有單位根,則序列是非平穩的。反之,如果序列不具有單位根,則序列是平穩的。ADF測試透過對序列進行迴歸分析來驗證這些假設。
我們可以直接使用statsmodels來進行這個檢驗
from statsmodels.tsa.stattools import adfuller
ADF_result = adfuller(time_series)
print(f"ADF Result Value: {ADF_result[0]}")
print(f"ADF Result p-value: {ADF_result[1]}")
16、自相關
是對時間序列中由不同時間步長隔開的值之間線性關係的度量。滯後是分隔兩個值的時間步數。
自相關函式(ACF)圖用於測試時間序列中的值是否隨機分佈或彼此相關(如果時間序列具有趨勢)。
from statsmodels.graphics.tsaplots import plot_acf
plot_acf(time_series, lags = 20)
這裡的x軸上的值表示滯後,y軸上的值表示由滯後分隔的不同值之間的相關性。
如果y軸上的任何值位於圖的藍色陰影區域,則該值在統計上不顯著,比如下面的ACF圖顯示其值之間沒有相關性(除了第一個與自身相關的值)。
17、平滑方法
平滑方法(Smoothing Methods)是一種用於對時間序列資料進行平滑處理的技術,以便更好地觀察資料的趨勢和季節性成分。這些方法的目標是減少隨機噪聲,突出資料中的長期變化模式。
常見的有:移動平均法(Moving Average Method)、加權移動平均法(Weighted Moving Average Method)、指數平滑法(Exponential Smoothing Method)、季節性平滑法(Seasonal Smoothing Method)
18、時間序列資料特徵
- 靜態時間序列(Static Time Series):靜態時間序列是指資料在時間上沒有變化的情況下進行分析。也就是說,它假設觀測到的時間序列資料是固定的,沒有隨時間的推移而發生變化。在靜態時間序列中,我們通常關注資料的平均水平、趨勢和季節性等靜態特徵。常見的靜態時間序列模型包括平均數模型、指數平滑模型和ARIMA模型等。
- 動態時間序列(Dynamic Time Series):動態時間序列是指資料在時間上呈現出變化的情況下進行分析。也就是說,它認為觀測到的時間序列資料是隨時間變化的,並且過去的值對未來的值有影響。在動態時間序列中,我們關注資料的動態性、趨勢變化和週期性等動態特徵。常見的動態時間序列模型包括自迴歸移動平均模型(ARMA)、自迴歸積分滑動平均模型(ARIMA)和向量自迴歸模型(VAR)等。
靜態時間序列假設資料在時間上沒有變化,主要關注資料的靜態特徵。動態時間序列考慮資料在時間上的變化,並關注資料的動態特徵。靜態時間序列可以看作是動態時間序列的特例,當資料在時間上沒有變化時,可以將其視為靜態時間序列。
19、季節性(Seasonality),迴圈性(Cyclicity) 區別
季節性(Seasonality)和迴圈性(Cyclicity)都是描述時間序列資料中重複出現的模式,但它們之間存在一些區別。
季節性是在較短的時間尺度內,由於固定或變化的季節因素引起的週期性模式,而迴圈性則是在較長時間尺度內,由於經濟或其他結構性因素引起的週期性模式。
季節性(Seasonality)是指時間序列資料中由於季節因素引起的重複模式。這種模式通常是在較短的時間尺度內(例如每年、每季度、每月或每週)出現的,並且在不同時間段內的觀測值之間存在明顯的相似性。季節性可以是固定的,即在每個季節週期內的模式相對穩定,例如每年夏天都有高溫;也可以是非固定的,即在季節週期內的模式可能有變化,例如某個季節的銷售量在不同年份間波動。
迴圈性(Cyclicity)是指時間序列資料中具有較長週期性的模式。這種模式的週期可以大於或小於季節週期,並且迴圈性的持續時間通常比季節性更長。迴圈性可能是由經濟、商業或其他結構性因素引起的,與季節性不同,迴圈性的模式不一定按照固定的時間間隔出現,而是根據外部因素的影響而變化。例如,房地產市場的週期性波動就是一個迴圈性的例子。
20、時間序列庫推薦
- PyFlux: PyFlux是一個用於時間序列分析和建模的庫,提供了多種模型,包括ARIMA、GARCH、VAR等。
- PyCaret: PyCaret是一個用於機器學習和自動化建模的庫,它提供了簡化時間序列預測任務的工具。它支援自動特徵選擇、模型選擇和調優等功能,可以快速構建時間序列預測模型。
- sktime: sktime是一個專門用於時間序列資料的機器學習庫,它建立在scikit-learn之上,並提供了許多專門針對時間序列的預處理和建模技術。
- CausalImpact: CausalImpact是一個用於因果效應分析的庫,它可以幫助評估時間序列資料中某個事件或處理對結果的影響。
- tsfresh: tsfresh是一個用於提取時間序列特徵的庫,它提供了各種統計和時間特徵提取方法,用於時間序列資料的特徵工程。
文章來源:Deephub Imba
原文連結:https://mp.weixin.qq.com/s/8Sc5uc0Ytu2ynfZjRoiiBg
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~
文章推薦
◆跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求
回顧十週入門數據分析系列文:
關注數據君的臉書:
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!