时间序列 自回归差分移动平均模型 ARIMA

目录

前言

一、ARIMA是什么?

二、ARIMA的优点和缺点

三、ARIMA的应用场景

四、构建ARIMA模型的注意事项

五、ARIMA模型的实现类库

六、ARIMA模型的评价指标

七、类库statsmodels实现ARIMA的例子

八、ARIMA的模型参数

总结


前言

时间序列是在时间点上形成的数值序列,时间序列预测是通过观察历史数据预测未来的值。代表性的算法模型是ARIMA。

一、ARIMA是什么?

自回归差分移动平均模型,又称ARIMA(Autoregressive Integrated Moving Average Model)模型,由AR、I、MA3部分构成。
AR:自回归,当前时间点上的数据被前K个时间点上的数据进行线性关系的解释。
I:差分,为了确保时间序列的数据是平稳的(建模需要),用当前时间点的数据减去K个时间点前的数据,实现差分转化,获得平稳的时间序列数据。
MA:移动平均。

ARIMA(p, d, q):是对数据进行d阶差分,转化数据为平稳时间序列之后,结合AR(p)和MA(q)的时间序列模型。AR(p)是P项自回归,MA(q)是q项的移动回归。此外,ARMA(p, q)是自回归AR(p)和移动平均MA(q)的组合模型。

二、ARIMA的优点和缺点

1. 优点:

  • 模型简单,容易实现;
  • 只需要内生变量,需要借助其他变量
  • 能够对线性和非线性趋势进行建模
  • 能够对季节性进行建模
  • 能够对残差进行建模,从而检查是否存在自相关性

2. 缺点:

  • 对于非线性趋势或非常复杂的时间序列,ARIMA模型可能无法很好地拟合数据
  • ARIMA模型需要大量的数据才能有效地进行建模和预测
  • ARIMA模型中需要手动选择参数,这可能需要一定的专业知识和经验

三、ARIMA的应用场景

ARIMA(自回归综合移动平均模型)是一种常见的时间序列分析模型,其应用场景包括但不限于以下几个方面:

  • 经济预测:ARIMA可以用于经济预测中,如股票价格预测、通货膨胀率预测等。
  • 销售预测:ARIMA可以用于销售预测中,如商品销售量预测、市场需求预测等。
  • 交通流量预测:ARIMA可以用于交通流量预测中,如道路拥堵预测、公交车运营时间预测等。
  • 气象预测:ARIMA可以用于气象预测中,如气温预测、降雨量预测等。
  • 能源需求预测:ARIMA可以用于能源需求预测中,如电力需求预测、石油需求预测等。
  • 信号处理:ARIMA可以用于信号处理中,如语音信号处理、音频信号处理等。
  • 负载预测:ARIMA可以用于负载预测中,如服务器负载预测、网络流量预测等。
  • 人口统计学:ARIMA可以用于人口统计学中,如人口增长预测、人口迁移预测等。
  • 环境监测:ARIMA可以用于环境监测中,如空气质量预测、水质预测等。

总之,ARIMA是一种非常常用的时间序列分析模型,可应用于多种领域,特别是需要进行时间序列数据分析和预测的场景下。

四、构建ARIMA模型的注意事项

  1. 时间序列建模需要数据具有平稳性,即均值函数是常数且协方差函数仅与时间差相关。可以通过ACF、PACF、ADF(单位根检验)进行验证。
  2.  在对ARIMA进行定阶(p,q)时,可以确认自相关系数ACF和偏自相关系数PACF的拖尾和截尾情况,p依据的是PACF的截尾阶数,q则依据的是ACF的截尾阶数,如果ACF和PACF均为拖尾,则可以通过AIC和BIC进行定阶。
  3. 对于模型拟合的结果,可以通过确认残差分布是否是白噪声序列来验证模型的参数是否得当。(白躁声:是由一组均值为0,方差不变,相互独立的元素构成,各元素之间没有相关性。建模的时间序列数据要求是非白噪声序列。)

  • 另外,时间序列除了ARIMA的回归模型外,还有时间序列的分解算法,比如:prophet模型   一个时间序列通常由长期趋势(T:Trend)、季节变动(S:Season)、循环波动(C:Cyclical)和不规则波动(I:Irregular)叠加或耦合。
    • T:较长时期内持续性发展变化的一种趋向或状态。
    • S:由于季节的变化引起的发展水平的规则变动。
    • C:以若干年为期限,不具有严格规则的周期性连续变动。
    • I:由于众多偶然因素对时间序列造成的影响。

五、ARIMA模型的实现类库

Python中有多个库可以实现ARIMA,以下是其中比较常用的几个库:

  • statsmodels:statsmodels是Python中的统计分析库,其中包含了ARIMA模型。
  • Keras:Keras是一个高级神经网络API,可以在多个深度学习框架上运行,其中也包含了ARIMA。

以上这些库都提供了丰富的接口和功能,可以满足不同场景下的需求。需要注意的是,在使用这些库时,需要根据具体情况选择合适的模型、参数和评估指标,以获得更好的预测效果。

六、ARIMA模型的评价指标

  • 赤池信息量(AIC):衡量统计模型拟合优良性的一种标准,基于信息熵,对自变量个数施加惩罚,AIC越小,模型越好。
  • 贝叶斯信息量(BIC):衡量模型拟合优良性的一种标准,基于贝叶斯概率函数,对自变量个数施加惩罚,BIC越小,模型越好。
  • 均方根误差(RMSE):衡量模型预测值与实际值之间的平均差异,RMSE越小,表示模型预测效果越好。
  • 平均绝对误差(MAE):衡量模型预测值与实际值之间的平均差异,MAE越小,表示模型预测效果越好。
  • 平均绝对百分比误差(MAPE):衡量模型预测值与实际值之间的平均百分比误差,MAPE越小,表示模型预测效果越好。
  • 对称平均绝对百分比误差(SMAPE):衡量模型预测值与实际值之间的对称平均百分比误差,SMAPE越小,表示模型预测效果越好。

七、类库statsmodels实现ARIMA的例子

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 加载数据
df = pd.read_csv('data.csv', header=None)
data = df.values.flatten()

# 划分训练集和测试集
train_size = int(len(data) * 0.8)
train_data, test_data = data[:train_size], data[train_size:]

# 训练ARIMA模型
model = ARIMA(train_data, order=(1, 1, 1))
model_fit = model.fit()

# 预测测试集
y_pred = model_fit.forecast(steps=len(test_data))[0]

# 绘制预测结果和真实结果
plt.plot(test_data, label='True')
plt.plot(y_pred, label='Predict')
plt.legend()
plt.show()

八、ARIMA的模型参数

statsmodels库中ARIMA模型的参数:

  • endog:观测值的时间序列数据。
  • order:一个元组,表示AR、差分、MA的阶数。例如,(p, d, q)表示ARIMA(p, d, q)模型。
  • exog:外生变量的时间序列数据。
  • seasonal_order:一个元组,表示季节性ARIMA模型的季节性阶数。例如,(P, D, Q, s)表示季节性ARIMA(P, D, Q)(s)模型。
  • trend:趋势项的设置。可以是以下几种取值:

           'n':没有趋势项。

           'c':常数趋势项。

           't':线性趋势项。

           'ct':常数和线性趋势项。

  • enforce_stationarity:布尔值,表示是否强制保持模型的稳定性。
  • enforce_invertibility:布尔值,表示是否强制保持模型的可逆性。
  • hamilton_representation:布尔值,表示是否使用Hamilton表示法。
  • concentrate_scale:布尔值,表示是否集中估计尺度参数。
  • trend_offset:整数,表示趋势项的偏移量。
  • dates:时间索引,用于指定时间序列数据的日期。
  • freq:字符串,表示时间序列数据的频率。
  • missing:字符串,表示缺失值的处理方式。

总结

本文主要简单介绍了ARIMA的基本概念,优缺点,应用场景,建模时的注意事项,实现方法以及模型的参数等。

你可能感兴趣的:(机器学习算法,人工智能,机器学习,ARIMA,时间序列)