c语言编程笔录

首页 >   > 笔记大全

笔记大全

Python中的自回归移动平均模型详解

更新时间:2023-09-17

Python中的自回归移动平均模型详解

自回归移动平均模型(ARMA)是一种广泛使用的时间序列分析模型,适用于统计分析、经济预测等领域。本文将阐述ARMA的基本定义、模型建立方法以及在Python中通过statsmodels库进行计算的方法。

ARMA模型的定义

ARMA模型是由自回归模型(AR)和移动平均模型(MA)组成的组合模型,它的定义如下:

import numpy as np
from statsmodels.tsa.arima_model import ARMA

class ARMA_Model:
      def __init__(self, ar_params, ma_params):
          self.ar_params=ar_params
          self.ma_params=ma_params
      
      def fit(self, data):
          self.arma_model=ARMA(
              data,
              order=(len(self.ar_params), len(self.ma_params))
          )
          self.model_fit=self.arma_model.fit(
              method='css',
              trend='c',
              start_params=None,
              hamilton_representation=False,
              enforce_invertibility=True
          )
      
      def predict(self, n):
          return self.model_fit.predict(start=len(self.ar_params), end=len(self.ar_params) + n)
    

ARMA模型通过自回归模型和移动平均模型的结合,可以对具有纯随机游走结构的时间序列进行建模和预测,对于具有非随机结构的时间序列,需要更高阶的ARMA模型进行建模和预测。

ARMA模型建立方法

在进行ARMA模型的建立之前,需要对时间序列数据进行平稳性检验,平稳性的检验可以采用ADF检验、KPSS检验等方法。如果时间序列数据不是平稳的,需要进行差分操作,一般使用一阶或者二阶差分。差分操作后,需要再次进行平稳性检验,直至数据平稳。

在平稳性检验通过后,需要对时间序列数据进行ACF和PACF分析,以确定AR和MA的阶数,在建立ARMA模型之前,可以通过ACF和PACF图进行直观判断,也可以使用计算方法确定AR和MA的阶数。

from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

plot_acf(data)
plot_pacf(data)
    

ACF和PACF图分别如下所示:

arma

图中,蓝色区域为置信区间,可以看出,时间序列数据的ACF在1阶之后逐渐趋于零,而PACF在1阶之后截尾,因此,可以确定AR和MA的阶数均为1,即ARMA(1,1)模型。

Python中计算ARMA模型

在Python中,可以使用statsmodels库进行ARMA模型的计算,代码如下:

from statsmodels.tsa.arima_model import ARMA

arma_model=ARMA(data, order=(1, 1))
model_fit=arma_model.fit(
    method='css',
    trend='c',
    start_params=None,
    hamilton_representation=False,
    enforce_invertibility=True
)

prediction=model_fit.predict(
    start=len(data) - 1,
    end=len(data) + 10
)
    

在statsmodels库中,ARMA模型的计算需要指定阶数和拟合方法,其中method参数指定使用的最小二乘法的计算方法,trend参数指定拟合的线性趋势是常数还是直线,start_params参数指定初始模型参数,hamilton_representation参数指定ARMA模型参数是否采用Hamilton表示,enforce_invertibility参数指定是否进行可逆性约束。

进行模型拟合后,可以通过predict方法对时间序列进行预测,需要注意的是,predict方法需要指定预测的时间区间。

总结

这篇文章介绍了自回归移动平均模型的基本定义、建立方法以及在Python中的计算方法,通过ARMA模型可以对时间序列数据进行建模和预测,在实际使用时,需要对数据进行平稳性检验和ACF、PACF分析,选择合适的ARMA阶数和拟合方法进行模型建立和拟合,使用statsmodels库可以方便地进行ARMA模型的计算。