SARIMAX模型的全面解析

一、什麼是SARIMAX模型

SARIMAX(Seasonal Autoregressive Integrated Moving Average with Exogenous Variables)是ARIMA模型的拓展版本,在ARIMA模型基礎上加入了外生變量(Exogenous Variables)的影響因素,用於解決ARIMA模型無法解釋的影響因素。SARIMAX模型常用於時間序列的預測和分析。

SARIMAX模型的數學表達式如下:

    SARIMAX(p,d,q)x(P,D,Q)m

其中,p、d、q、P、D、Q分別代表模型中的自回歸(AR)、差分(I)、移動平均(MA)和季節性自回歸、季節性差分、季節性移動平均的階數,m則代表季節性因素的周期。

二、如何建立SARIMAX模型

建立SARIMAX模型的關鍵是選擇合適的p、d、q、P、D、Q和m參數。常見的建模方法一般包括如下幾個步驟:

1.數據處理

首先對數據進行處理和預處理,例如平穩化、去趨勢等,以保證模型的建立和預測的準確性。

2.確定模型階數

採用ACF和PACF圖確定自回歸(AR)和移動平均(MA)的階數,採用差分法確定差分(I)的階數,採用季節性差分法和ACF、PACF進行模型初步篩選。

3.建立初步模型

根據初步篩選的結果,建立初步模型,利用貝葉斯信息準則(BIC)或赤池信息準則(AIC)對模型進行評價和篩選,選擇最優模型。

4.殘差檢驗

對模型建立後的殘差進行檢驗,排除殘差不符合正態性、平穩性和獨立性等假設的情況,以保證模型的有效性和準確性。

5.預測

基於建立好的SARIMAX模型,進行預測和分析,得到對應的結果或結論。

三、SARIMAX模型的優缺點

1.優點

SARIMAX模型具有較強的適應性和預測能力,能夠對時間序列數據進行有效建模和預測,也可以加入外生變量的影響因素進行分析和預測。此外,SARIMAX模型具有較高的可解釋性和可視化性,易於分析和理解。

2.缺點

SARIMAX模型需要基於時間序列數據建立模型,因此對於無法獲取時間序列數據的問題,該模型的應用範圍會受到限制。此外,如果外生變量的數據量較大,模型的建立和分析就會變得較為繁瑣和複雜。

四、代碼示例

1.數據預處理

import pandas as pd
from datetime import datetime
import matplotlib.pylab as plt

#讀取數據
data=pd.read_csv('data.csv')
dateparse=lambda dates:datetime.strptime(dates,'%Y-%m')
data=pd.read_csv('data.csv',parse_dates=['Month'],index_col='Month',date_parser=dateparse)
print(data.head())

#數據平穩化
fig=plt.figure(figsize=(12,8))
ax1=fig.add_subplot(211)
plt.plot(data)
ax1.set_xlabel('Date')
ax1.set_ylabel('Data')
ax1.set_title('Original Data')

ax2=fig.add_subplot(212)
plt.plot(data.diff())
ax2.set_xlabel('Date')
ax2.set_ylabel('Data')
ax2.set_title('Differenced Data')
plt.show()

2.模型建立

import statsmodels.api as sm

#模型階數估計
fig=plt.figure(figsize=(12,8))
ax1=fig.add_subplot(211)
fig=sm.graphics.tsa.plot_acf(data.diff().dropna(),lags=40,ax=ax1)
ax2=fig.add_subplot(212)
fig=sm.graphics.tsa.plot_pacf(data.diff().dropna(),lags=40,ax=ax2)

#模型擬合
model=sm.tsa.statespace.SARIMAX(data,order=(1,1,1),seasonal_order=(1,1,1,12),enforce_stationarity=False,enforce_invertibility=False)
results=model.fit()
print(results.summary())

3.模型檢驗和預測

#殘差檢驗
results.plot_diagnostics(figsize=(16,8))
plt.show()

#模型預測
pred=results.get_prediction(start=pd.to_datetime('2019-01'),dynamic=False)
pred_ci=pred.conf_int()
ax=data['2014':].plot(label='observed')
pred.predicted_mean.plot(ax=ax,label='One-step ahead Forecast',alpha=.7,figsize=(14,7))
ax.fill_between(pred_ci.index,pred_ci.iloc[:,0],pred_ci.iloc[:,1],color='k',alpha=.2)
ax.set_xlabel('Date')
ax.set_ylabel('Data')
plt.legend()
plt.show()

原創文章,作者:LJPY,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/131038.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
LJPY的頭像LJPY
上一篇 2024-10-03 23:42
下一篇 2024-10-03 23:42

相關推薦

  • TensorFlow Serving Java:實現開發全功能的模型服務

    TensorFlow Serving Java是作為TensorFlow Serving的Java API,可以輕鬆地將基於TensorFlow模型的服務集成到Java應用程序中。…

    編程 2025-04-29
  • Python應用程序的全面指南

    Python是一種功能強大而簡單易學的編程語言,適用於多種應用場景。本篇文章將從多個方面介紹Python如何應用於開發應用程序。 一、Web應用程序 目前,基於Python的Web…

    編程 2025-04-29
  • Python訓練模型後如何投入應用

    Python已成為機器學習和深度學習領域中熱門的編程語言之一,在訓練完模型後如何將其投入應用中,是一個重要問題。本文將從多個方面為大家詳細闡述。 一、模型持久化 在應用中使用訓練好…

    編程 2025-04-29
  • Python zscore函數全面解析

    本文將介紹什麼是zscore函數,它在數據分析中的作用以及如何使用Python實現zscore函數,為讀者提供全面的指導。 一、zscore函數的概念 zscore函數是一種用於標…

    編程 2025-04-29
  • 全面解讀數據屬性r/w

    數據屬性r/w是指數據屬性的可讀/可寫性,它在程序設計中扮演着非常重要的角色。下面我們從多個方面對數據屬性r/w進行詳細的闡述。 一、r/w的概念 數據屬性r/w即指數據屬性的可讀…

    編程 2025-04-29
  • Python計算機程序代碼全面介紹

    本文將從多個方面對Python計算機程序代碼進行詳細介紹,包括基礎語法、數據類型、控制語句、函數、模塊及面向對象編程等。 一、基礎語法 Python是一種解釋型、面向對象、動態數據…

    編程 2025-04-29
  • Python實現一元線性回歸模型

    本文將從多個方面詳細闡述Python實現一元線性回歸模型的代碼。如果你對線性回歸模型有一些了解,對Python語言也有所掌握,那麼本文將對你有所幫助。在開始介紹具體代碼前,讓我們先…

    編程 2025-04-29
  • ARIMA模型Python應用用法介紹

    ARIMA(自回歸移動平均模型)是一種時序分析常用的模型,廣泛應用於股票、經濟等領域。本文將從多個方面詳細闡述ARIMA模型的Python實現方式。 一、ARIMA模型是什麼? A…

    編程 2025-04-29
  • VAR模型是用來幹嘛

    VAR(向量自回歸)模型是一種經濟學中的統計模型,用於分析並預測多個變量之間的關係。 一、多變量時間序列分析 VAR模型可以對多個變量的時間序列數據進行分析和建模,通過對變量之間的…

    編程 2025-04-28
  • 如何使用Weka下載模型?

    本文主要介紹如何使用Weka工具下載保存本地機器學習模型。 一、在Weka Explorer中下載模型 在Weka Explorer中選擇需要的分類器(Classifier),使用…

    編程 2025-04-28

發表回復

登錄後才能評論