日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

11种常见的时间序列预测方法

發布時間:2023/12/31 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 11种常见的时间序列预测方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考內容:4大類11種常見的時間序列預測方法總結和代碼示例

代碼地址:
https://github.com/SeafyLiang/machine_learning_study/blob/master/time_series

11種常見的時間序列預測方法

    • 1、指數平滑Exponential Smoothing
    • 2、Holt-Winters 法
    • 3、自回歸 (AR)
    • 4、移動平均模型(MA)
    • 5、自回歸滑動平均模型 (ARMA)
    • 6、差分整合移動平均自回歸模型 (ARIMA)
    • 7、季節性 ARIMA (SARIMA)
    • 8、包含外生變量的SARIMA (SARIMAX)
    • 9、向量自回歸 (VAR)
    • 10、向量自回歸滑動平均模型 (VARMA)
    • 11、包含外生變量的向量自回歸滑動平均模型 (VARMAX)
    • 總結

本篇文章將總結時間序列預測方法,并將所有方法分類介紹并提供相應的python代碼示例,以下是本文將要介紹的方法列表:

1、使用平滑技術進行時間序列預測

  • 指數平滑
  • Holt-Winters 法

2、單變量時間序列預測

  • 自回歸 (AR)
  • 移動平均模型 (MA)
  • 自回歸滑動平均模型 (ARMA)
  • 差分整合移動平均自回歸模型 (ARIMA)
  • 季節性 ARIMA (SARIMA)

3、外生變量的時間序列預測

  • 包含外生變量的SARIMAX (SARIMAX)
  • 具有外生回歸量的向量自回歸移動平均 (VARMAX)

4、多元時間序列預測

  • 向量自回歸 (VAR)
  • 向量自回歸移動平均 (VARMA)

下面我們對上面的方法一一進行介紹,并給出python的代碼示例

1、指數平滑Exponential Smoothing

指數平滑法是過去觀測值的加權平均值,隨著觀測值變老,權重呈指數會衰減。換句話說,觀察時間越近相關權重就越高。它可以快速生成可靠的預測,并且適用于廣泛的時間序列。
簡單指數平滑:此方法適用于預測沒有明確趨勢或季節性模式的單變量時間序列數據。簡單指數平滑法將下一個時間步建模為先前時間步的觀測值的指數加權線性函數。
它需要一個稱為 alpha (a) 的參數,也稱為平滑因子或平滑系數,它控制先前時間步長的觀測值的影響呈指數衰減的速率,即控制權重減小的速率。a 通常設置為 0 和 1 之間的值。較大的值意味著模型主要關注最近的過去觀察,而較小的值意味著在進行預測時會考慮更多的歷史。簡單指數平滑時間序列的簡單數學解釋如下所示:

# SES from statsmodels.tsa.holtwinters import SimpleExpSmoothing from random import random # contrived dataset data = [x + random() for x in range(1, 100)] # fit model model = SimpleExpSmoothing(data) model_fit = model.fit() # make prediction yhat = model_fit.predict(len(data), len(data)) print(yhat)

2、Holt-Winters 法

在 1957 年初,Holt擴展了簡單的指數平滑法,使它可以預測具有趨勢的數據。這種被稱為 Holt 線性趨勢的方法包括一個預測方程和兩個平滑方程(一個用于水平,一個用于趨勢)以及相應的平滑參數 α 和 β。后來為了避免趨勢模式無限重復,引入了阻尼趨勢法,當需要預測許多序列時,它被證明是非常成功和最受歡迎的單個方法。除了兩個平滑參數之外,它還包括一個稱為阻尼參數 φ 的附加參數。
一旦能夠捕捉到趨勢,Holt-Winters 法擴展了傳統的Holt法來捕捉季節性。Holt-Winters 的季節性方法包括預測方程和三個平滑方程——一個用于水平,一個用于趨勢,一個用于季節性分量,并具有相應的平滑參數 α、β 和 γ。
此方法有兩種變體,它們在季節性成分的性質上有所不同。當季節變化在整個系列中大致恒定時,首選加法方法,而當季節變化與系列水平成比例變化時,首選乘法方法。

# HWES from statsmodels.tsa.holtwinters import ExponentialSmoothing from random import random # contrived dataset data = [x + random() for x in range(1, 100)] # fit model model = ExponentialSmoothing(data) model_fit = model.fit() # make prediction yhat = model_fit.predict(len(data), len(data)) print(yhat)

3、自回歸 (AR)

在 AR 模型中,我們使用變量過去值的線性組合來預測感興趣的變量。術語自回歸表明它是變量對自身的回歸。AR模型的簡單數學表示如下:

這里,εt 是白噪聲。這類似于多元回歸,但是使用 yt 的滯后值作為預測變量。我們將其稱為 AR§ 模型,即 p 階的自回歸模型。

#AR from statsmodels.tsa.ar_model import AutoReg from random import random # contrived dataset data = [x + random() for x in range(1, 100)] # fit model model = AutoReg(data, lags=1) model_fit = model.fit() # make prediction yhat = model_fit.predict(len(data), len(data)) print(yhat)

4、移動平均模型(MA)

與在回歸中使用預測變量的過去值的 AR 模型不同,MA 模型在類似回歸的模型中關注過去的預測誤差或殘差。MA模型的簡單數學表示如下:

這里,εt 是白噪聲。我們將其稱為 MA(q) 模型,即 q 階移動平均模型。

# MA from statsmodels.tsa.arima.model import ARIMA from random import random # contrived dataset data = [x + random() for x in range(1, 100)] # fit model model = ARIMA(data, order=(0, 0, 1)) model_fit = model.fit() # make prediction yhat = model_fit.predict(len(data), len(data)) print(yhat)

需要說明的是不應將這里說的移動平均線方法與計算時間序列的移動平均線混淆,因為兩者是不同的概念。

5、自回歸滑動平均模型 (ARMA)

在 AR 模型中,我們使用變量過去值與過去預測誤差或殘差的線性組合來預測感興趣的變量。它結合了自回歸 (AR) 和移動平均 (MA) 模型。
AR 部分涉及對變量自身的滯后(即過去)值進行回歸。MA部分涉及將誤差項建模為在過去不同時間同時發生的誤差項的線性組合。模型的符號涉及將 AR§ 和 MA(q) 模型的順序指定為 ARMA 函數的參數,例如 ARMA(p,q)。ARMA 模型的簡單數學表示如下所示:

# ARMA from statsmodels.tsa.arima.model import ARIMA from random import random # contrived dataset data = [random() for x in range(1, 100)] # fit model model = ARIMA(data, order=(2, 0, 1)) model_fit = model.fit() # make prediction yhat = model_fit.predict(len(data), len(data)) print(yhat)

6、差分整合移動平均自回歸模型 (ARIMA)

如果我們將差分與自回歸和移動平均模型相結合,我們將獲得 ARIMA 模型。ARIMA 是差分整合移動平均自回歸模型Autoregressive Integrated Moving Average model 的首字母縮寫。它結合了自回歸 (AR) 和移動平均模型 (MA) 以及為了使序列平穩而對序列的差分預處理過程,這個過程稱為積分(I)。ARIMA 模型的簡單數學表示如下:

其中 y′t 是差分級數。右側的“預測變量”包括滯后值和滯后誤差。我們稱之為 ARIMA(p,d,q) 模型。

這里,p 是自回歸部分的階數,d 是所涉及的一階差分程度,q 是移動平均部分的階數。
ACF 和 PACF 圖在求 p 和 q 階中的意義:

  • 為了找到 AR§ 模型的階 p:我們預計 ACF 圖會逐漸減小,同時 PACF 在 p 顯著滯后后會急劇下降或切斷。
  • 為了找到 MA(q) 模型的階 p:我們預計 PACF 圖將逐漸減小,同時 ACF 應該在某些 q 顯著滯后后急劇下降或切斷。
# ARIMA from statsmodels.tsa.arima.model import ARIMA from random import random # contrived dataset data = [x + random() for x in range(1, 100)] # fit model model = ARIMA(data, order=(1, 1, 1)) model_fit = model.fit() # make prediction yhat = model_fit.predict(len(data), len(data), typ='levels') print(yhat)

7、季節性 ARIMA (SARIMA)

ARIMA 模型還能夠對廣泛的季節性數據進行建模。季節性 ARIMA 模型是通過在 ARIMA 模型中包含額外的季節性項來形成的。

這里,m = 每個時間季節的步數。我們對模型的季節性部分使用大寫符號,對模型的非季節性部分使用小寫符號。

它將 ARIMA 模型與在季節性數據級別執行相同的自回歸、差分和移動平均建模的能力相結合。

# SARIMA from statsmodels.tsa.statespace.sarimax import SARIMAX from random import random # contrived dataset data = [x + random() for x in range(1, 100)] # fit model model = SARIMAX(data, order=(1, 1, 1), seasonal_order=(0, 0, 0, 0)) model_fit = model.fit(disp=False) # make prediction yhat = model_fit.predict(len(data), len(data)) print(yhat)

8、包含外生變量的SARIMA (SARIMAX)

SARIMAX 模型是傳統 SARIMA 模型的擴展,包括外生變量的建模,是Seasonal Autoregressive Integrated Moving-Average with Exogenous Regressors 的縮寫
外生變量是其值在模型之外確定并施加在模型上的變量。它們也被稱為協變量。外生變量的觀測值在每個時間步直接包含在模型中,并且與主要內生序列的使用不同的建模方式。
SARIMAX 方法也可用于通過包含外生變量來模擬具有外生變量的其他變化,例如 ARX、MAX、ARMAX 和 ARIMAX。

# SARIMAX from statsmodels.tsa.statespace.sarimax import SARIMAX from random import random # contrived dataset data1 = [x + random() for x in range(1, 100)] data2 = [x + random() for x in range(101, 200)] # fit model model = SARIMAX(data1, exog=data2, order=(1, 1, 1), seasonal_order=(0, 0, 0, 0)) model_fit = model.fit(disp=False) # make prediction exog2 = [200 + random()] yhat = model_fit.predict(len(data1), len(data1), exog=[exog2]) print(yhat)

9、向量自回歸 (VAR)

VAR 模型是單變量自回歸模型的推廣,用于預測時間序列向量或多個并行時間序列,例如 多元時間序列。它是關于系統中每個變量的一個方程。
如果序列是平穩的,可以通過將 VAR 直接擬合到數據來預測它們(稱為“VAR in levels”)。如果序列是非平穩的,我們會取數據的差異以使其平穩,然后擬合 VAR 模型(稱為“VAR in differences”)。
我們將其稱為 VAR§ 模型,即 p 階向量自回歸模型。

# VAR from statsmodels.tsa.vector_ar.var_model import VAR from random import random # contrived dataset with dependency data = list() for i in range(100):v1 = i + random()v2 = v1 + random()row = [v1, v2]data.append(row) # fit model model = VAR(data) model_fit = model.fit() # make prediction yhat = model_fit.forecast(model_fit.y, steps=1) print(yhat)

10、向量自回歸滑動平均模型 (VARMA)

VARMA 方法是 ARMA 對多個并行時間序列的推廣,例如 多元時間序列。具有有限階 MA 誤差項的有限階 VAR 過程稱為 VARMA。
模型的公式將 AR§ 和 MA(q) 模型的階數指定為 VARMA 函數的參數,例如 VARMA(p,q)。VARMA 模型也可用于VAR 或 VMA 模型。

# VARMA from statsmodels.tsa.statespace.varmax import VARMAX from random import random # contrived dataset with dependency data = list() for i in range(100):v1 = random()v2 = v1 + random()row = [v1, v2]data.append(row) # fit model model = VARMAX(data, order=(1, 1)) model_fit = model.fit(disp=False) # make prediction yhat = model_fit.forecast() print(yhat)

11、包含外生變量的向量自回歸滑動平均模型 (VARMAX)

Vector Autoregression Moving-Average with Exogenous Regressors (VARMAX) 是 VARMA 模型的擴展,模型中還包含使用外生變量的建模。它是 ARMAX 方法對多個并行時間序列的推廣,即 ARMAX 方法的多變量版本。
VARMAX 方法也可用于對包含外生變量的包含模型進行建模,例如 VARX 和 VMAX。

# VARMAX from statsmodels.tsa.statespace.varmax import VARMAX from random import random # contrived dataset with dependency data = list() for i in range(100):v1 = random()v2 = v1 + random()row = [v1, v2]data.append(row) data_exog = [x + random() for x in range(100)] # fit model model = VARMAX(data, exog=data_exog, order=(1, 1)) model_fit = model.fit(disp=False) # make prediction data_exog2 = [[100]] yhat = model_fit.forecast(exog=data_exog2) print(yhat)

總結

在這篇文章中,基本上覆蓋了所有主要時間序列預測的問題。我們可以把上面提到的方法整理成以下幾個重要的方向:

  • AR:自回歸
  • MA:平均移動
  • I:差分整合
  • S:季節性
  • V:向量(多維輸入)
  • X:外生變量

本文中提到的每種算法基本上都是這幾種方法的組合,本文中已將每種的算法都進行了重點的描述和代碼的演示,如果你想深入了解其中的知識請查看相關的論文。

總結

以上是生活随笔為你收集整理的11种常见的时间序列预测方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。