20個時間序列基本概念,學會幫你做好預測分析!

數據分析那些事
11 min readJun 12, 2023

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」,送你十週入門數據分析電子書唷!期待你與我互動起來~

文章推薦

餅圖變形記,肝了3000字,收藏就是學會!

MySQL必須掌握4種語言!

太實用了!4種方法教你輕鬆製作互動式儀表板!

跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求

妙呀!一行Python程式碼

回顧十週入門數據分析系列文:

關注數據君的臉書:

我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!

--

--

數據分析那些事

這是一個專注於數據分析職場的內容部落格,聚焦一批數據分析愛好者,在這裡,我會分享數據分析相關知識點推送、(工具/書籍)等推薦、職場心得、熱點資訊剖析以及資源大盤點,希望同樣熱愛數據的我們一同進步! 臉書會有更多互動喔:https://www.facebook.com/shujvfenxi/