ARIMA模型

前述

介绍ARIMA模型前,首先需要了解一下这几个模型

  1. AR 自回归模型(Autoregressive)

Xt1Xt-1+…+φpXt-pt

  1. MA 移动平均模型(Moving Average)

Xt = αt1αt-1-…-θqαt-q

  1. ARMA(p,q)

Xt1Xt-1+…+φpXt-pt1αt-1-…-θqαt-q

平稳性以及可逆性

想要ARMA(p,q)模型有意义,则必须要满足平稳性以及可逆性,也就意味着序列的均值不回随着时间增加或者减少,序列的反差不随着时间变化,此外序列本身的相关模式也不发生改变。
但是一般在实际应用中,很难在数学上去验证这些条件,所以我们引进了自相关函数(ACF)以及偏相关函数(PACF)来对ARMA模型进行识别。

下图ACF随着时间(序列)的推移,函数平稳的收敛于原点,我们称之为拖尾。
ACF
下图PACF在前几个序列之后数据突然下降并在原点附近震荡,我们称之为截尾。
PACF
如何判断模型是AR模型还是MA模型还是ARMA模型?
模型判断

ARIMA模型的由来

我平常的时间序列中,我们会看到其实很多序列在做了ACF以及PACF后并不能判断是什么样的序列,这时,我们就需要对这个模型进行一次差分,即后一项减去前一项来寻求序列之间的关系,从而找到合适的ARMA(p,q)进行拟合。
这个过程我们称作差分,整个过程就称作整合(integrated)ARMA模型即ARIMA(p,d,q)模型(其中d表示差分的次数)。

ARIMA(p,d,q)(P,D,Q)S模型

ARIMA(p,d,q)(P,D,Q)S是ARIMA(p,d,q)模型中增加了季节性因素所产生的模型。一般的,我们要对原有的序列进行分解,将季节部分与趋势部分进行分离,从而再分别用ARIMA(p,d,q)模型进行拟合。在实际操作过程中,需要进行反复比较。

### ARIMA模型的使用与实现 ARIMA(Auto-Regressive Integrated Moving Average)是一种广泛应用于时间序列分析中的统计模型,特别适合处理具有趋势性和季节性的非平稳时间序列数据。以下是关于ARIMA模型的具体使用方法和实现方式。 #### 1. 数据预处理 在应用ARIMA模型之前,通常需要对原始数据进行必要的预处理操作。这一步骤的主要目的是使时间序列满足模型的前提条件——平稳性。如果输入的时间序列为非平稳,则需对其进行差分变换以达到平稳状态[^2]。 ```python import pandas as pd from statsmodels.tsa.stattools import adfuller def check_stationarity(data): """ADF检验""" result = adfuller(data) p_value = result[1] return p_value < 0.05 # 如果p-value小于显著水平(如0.05),则认为该序列是平稳的 # 对原序列做一阶或多阶差分直到其变为平稳为止 diff_order = 0 while not check_stationarity(series): series_diff = series.diff().dropna() diff_order += 1 ``` #### 2. 参数估计 (p,d,q) ARIMA模型由三个核心参数组成:`p`, `d`, 和 `q`。其中, - **p**: 自回归项数; - **d**: 差分次数(即单整阶数),用来将非平稳序列转换成平稳序列; - **q**: 移动平均项数。 可以通过观察自相关函数图(AutoCorrelation Function, ACF)以及偏自相关函数图(Partial AutoCorrelation Function, PACF)来初步判断合适的(p,q)值[^3]。 另外,在实际工作中也可以借助自动化工具包比如`pmdarima.auto_arima()`来自动生成最佳参数组合: ```python from pmdarima.arima import auto_arima model_auto = auto_arima(train_data, seasonal=False, trace=True, error_action='ignore', suppress_warnings=True) print(model_auto.summary()) ``` #### 3. 模型拟合与验证 选定好参数之后就可以构建并训练我们的ARIMA模型了。接着利用测试集评估模型性能指标如均方误差(MSE), 平均绝对百分比误差(MAPE)等。 ```python from sklearn.metrics import mean_squared_error import numpy as np # 构造ARIMA模型实例 model = sm.tsa.ARIMA(endog=series_diff, order=(p, d, q)) results = model.fit() forecast_values = results.forecast(steps=len(test_set))[0] mape = np.mean(np.abs((test_set.values - forecast_values)/test_set.values))*100 mse = mean_squared_error(test_set, forecast_values) print(f'MAPE: {mape:.2f}%') print(f'MSE: {mse}') ``` #### 4. 结果解释与可视化展示 最后可以绘制预测曲线同真实值对比图表以便直观理解模型效果如何。 ```python plt.figure(figsize=(10,6)) plt.plot(test_index, test_set, label="Observed", color="blue") plt.plot(test_index, forecast_values, label="Forecasted", color="red") plt.legend(loc='upper left') plt.title('Actual vs Predicted Values') plt.show() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值