时间序列算法之ARIMA模型详解与python代码示例【动手学机器学习】

2024-06-30 1166阅读

ARIMA模型详解

ARIMA(AutoRegressive Integrated Moving Average)模型是时间序列分析中一种广泛使用的统计模型。它结合了自回归(AR)模型、差分(I)和移动平均(MA)模型的特点,适用于非平稳时间序列数据的建模和预测。

时间序列算法之ARIMA模型详解与python代码示例【动手学机器学习】
(图片来源网络,侵删)

ARIMA模型的定义

ARIMA模型由三个部分组成:

  1. 自回归(AR)部分:表示时间序列当前值与其前若干个时刻值之间的线性关系。
  2. 差分(I)部分:通过对时间序列进行差分操作,使其转化为平稳序列。
  3. 移动平均(MA)部分:表示时间序列当前值与前若干个时刻的误差项之间的线性关系。

ARIMA模型通常表示为 A R I M A ( ( p , d , q ) ) ARIMA((p, d, q)) ARIMA((p,d,q)),其中:

  • p 是自回归部分的阶数。
  • d 是差分次数。
  • q 是移动平均部分的阶数。

    ARIMA模型的数学表达式

    ARIMA((p, d, q))模型的数学表达式为:

    ( 1 − ∑ i = 1 p ϕ i L i ) ( 1 − L ) d X t = c + ( 1 + ∑ j = 1 q θ j L j ) ϵ t (1 - \sum_{i=1}^{p} \phi_i L^i) (1 - L)^d X_t = c + (1 + \sum_{j=1}^{q} \theta_j L^j) \epsilon_t (1−i=1∑p​ϕi​Li)(1−L)dXt​=c+(1+j=1∑q​θj​Lj)ϵt​

    其中:

    • X t 是时间序列在时刻 t 的值。 X_t 是时间序列在时刻 t 的值。 Xt​是时间序列在时刻t的值。
    • c 是常数项。 c是常数项。 c是常数项。
    • ϕ i 是自回归部分的系数。 \phi_i 是自回归部分的系数。 ϕi​是自回归部分的系数。
    • θ j 是移动平均部分的系数。 \theta_j 是移动平均部分的系数。 θj​是移动平均部分的系数。
    • ϵ t 是白噪声误差项,通常假设为均值为零、方差为 σ 2 的独立同分布随机变量。 \epsilon_t 是白噪声误差项,通常假设为均值为零、方差为 \sigma^2 的独立同分布随机变量。 ϵt​是白噪声误差项,通常假设为均值为零、方差为σ2的独立同分布随机变量。
    • L 是滞后算子( L a g O p e r a t o r ),定义为 L k X t = X t − k . L 是滞后算子(Lag Operator),定义为 L^k X_t = X_{t-k} . L是滞后算子(LagOperator),定义为LkXt​=Xt−k​.

      ARIMA模型的步骤

      1. 平稳性检验:

        • 在应用ARIMA模型之前,需要确保时间序列是平稳的。如果时间序列不是平稳的,可以通过差分等方法将其转化为平稳序列。
        • 模型识别与阶数确定:

          • 使用自相关函数(ACF)和偏自相关函数(PACF)图来识别模型的阶数 p、d和q.
          • ACF用于识别MA部分的阶数 q,PACF用于识别AR部分的阶数 p.
          • 差分次数d通常通过单位根检验(如ADF检验)确定.
          • 模型参数估计:

            • 使用最大似然估计(MLE)或最小二乘法(OLS)等方法估计模型参数 ϕ i \phi_i ϕi​ 和 θ j \theta_j θj​.
            • 模型诊断:

              • 检查模型的残差序列是否为白噪声,残差的ACF图是否接近零,使用Ljung-Box检验等方法进行模型诊断.
              • 模型预测:

                • 使用ARIMA模型对未来的时间序列值进行预测.

      ARIMA模型的实现

      以下是使用Python中的statsmodels库实现ARIMA模型的示例代码:

      import numpy as np
      import pandas as pd
      import matplotlib.pyplot as plt
      from statsmodels.tsa.arima.model import ARIMA
      from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
      from statsmodels.tsa.stattools import adfuller
      # 生成非平稳时间序列数据
      np.random.seed(42)
      n = 100
      time_series = np.cumsum(np.random.randn(n))
      # 绘制时间序列图
      plt.figure(figsize=(12, 6))
      plt.plot(time_series, label='Time Series')
      plt.legend()
      plt.show()
      # 检查平稳性
      result = adfuller(time_series)
      print(f'ADF Statistic: {result[0]}')
      print(f'p-value: {result[1]}')
      # 差分使其平稳
      diff_series = np.diff(time_series)
      # 绘制差分后的时间序列图
      plt.figure(figsize=(12, 6))
      plt.plot(diff_series, label='Differenced Time Series')
      plt.legend()
      plt.show()
      # 绘制ACF和PACF图
      fig, ax = plt.subplots(2, 1, figsize=(12, 8))
      plot_acf(diff_series, lags=20, ax=ax[0])
      plot_pacf(diff_series, lags=20, ax=ax[1])
      plt.show()
      # 确定ARIMA模型的阶数(p, d, q)
      p = 2  # AR部分的阶数
      d = 1  # 差分次数
      q = 2  # MA部分的阶数
      # 拟合ARIMA模型
      model = ARIMA(time_series, order=(p, d, q))
      model_fit = model.fit()
      # 打印模型摘要
      print(model_fit.summary())
      # 预测未来的值
      forecast_steps = 10
      forecast = model_fit.forecast(steps=forecast_steps)
      print(f"Forecast: {forecast}")
      # 绘制预测结果
      plt.figure(figsize=(12, 6))
      plt.plot(time_series, label='Observed')
      plt.plot(range(n, n + forecast_steps), forecast, label='Forecast', color='red')
      plt.legend()
      plt.show()
      

      总结

      ARIMA模型通过结合自回归、差分和移动平均的特点,能够有效地描述和预测非平稳时间序列数据。应用ARIMA模型时,需要进行平稳性检验、模型识别与阶数确定、参数估计、模型诊断和预测等步骤。通过合理地选择和调整模型参数,可以提高时间序列分析和预测的准确性。

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]