天天看點

時間序列預測的20個基本概念總結

作者:deephub
時間序列預測的20個基本概念總結

1、時間序列

時間序列是一組按時間順序排列的資料點

比如:

  • 每小時的氣壓
  • 每年的醫院急診
  • 按分鐘計算的股票價格

2、時間序列的組成部分

時間序列資料有三個主要組成部分。

  • 趨勢
  • 季節性
  • 殘差或白噪聲

3、趨勢

在時間序列中記錄的長期緩慢變化/方向。

時間序列預測的20個基本概念總結

4、季節性

季節性是在固定時間内發生的時間序列中的循環模式。

下面的時間序列顯示了季節性,在每個周期中,都處于底部和峰值,模式相似。

時間序列預測的20個基本概念總結

5、殘差/白噪聲

這是一個時間序列的模式,完全是随機的,不能用趨勢或季節成分來解釋。

時間序列預測的20個基本概念總結

6、時間序列分解

時間序列分解是将時間序列分解為其組成部分的過程,即趨勢,季節性和殘差。

時間序列預測的20個基本概念總結

在上圖顯示了時間序列資料,資料下面的圖中被分解為其組成部分。

“殘差”顯示的是時間序列中無法用趨勢或季節性解釋的模式。這些表示資料中的随機性。

我們可以使用如下所示的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)

時間序列預測的20個基本概念總結

這裡的x軸上的值表示滞後,y軸上的值表示由滞後分隔的不同值之間的相關性。

如果y軸上的任何值位于圖的藍色陰影區域,則該值在統計上不顯著,比如下面的ACF圖顯示其值之間沒有相關性(除了第一個與自身相關的值)。

時間序列預測的20個基本概念總結

17、平滑方法

平滑方法(Smoothing Methods)是一種用于對時間序列資料進行平滑處理的技術,以便更好地觀察資料的趨勢和季節性成分。這些方法的目标是減少随機噪聲,突出資料中的長期變化模式。

常見的有:移動平均法(Moving Average Method)、權重移動平均法(Weighted Moving Average Method)、指數平滑法(Exponential Smoothing Method)、季節性平滑法(Seasonal Smoothing Method)

18、時間序列資料特征

  1. 靜态時間序列(Static Time Series): 靜态時間序列是指資料在時間上沒有變化的情況下進行分析。也就是說,它假設觀測到的時間序列資料是固定的,沒有随時間的推移而發生變化。在靜态時間序列中,我們通常關注資料的平均水準、趨勢和季節性等靜态特征。常見的靜态時間序列模型包括平均數模型、指數平滑模型和ARIMA模型等。
  2. 動态時間序列(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是一個用于提取時間序列特征的庫,它提供了各種統計和時間特征提取方法,用于時間序列資料的特征工程。

作者:Ashish Bamania

繼續閱讀