【第七章:时间序列模型】2.时间序列统计模型与神经网络模型-(2)适用广泛的时间序列模型:Arima模型

第七章:时间序列模型

第二部分:时间序列统计模型与神经网络模型

第二节:适用广泛的时间序列模型:Arima模型


一、引言:为什么 ARIMA 是时间序列预测的核心模型

ARIMA 模型(AutoRegressive Integrated Moving Average,自回归积分滑动平均模型)是时间序列分析中最经典、最通用、最稳定 的统计模型之一。

无论在经济学、金融市场、天气预测、流量分析 还是工业监控中,ARIMA 都是"传统预测模型的基石"。

代表性特点:

  • 可捕捉序列的趋势性与随机性

  • 能处理非平稳时间序列(通过差分实现)

  • 参数少、可解释性强


二、ARIMA 模型的结构组成

ARIMA 模型由三部分组成:

ARIMA(p, d, q)

参数 含义 对应模块
p 自回归(AR)阶数 与过去观测值相关
d 差分(I)阶数 消除趋势,稳定序列
q 滑动平均(MA)阶数 与过去误差相关

最终模型结合三者:


三、模型原理分解

1. 自回归(AR)

核心思想:当前值依赖于过去若干时刻的值。

举例:

今天的温度与前几天的温度强相关。

2. 差分(I)

差分用于去除趋势性,使序列平稳。

一阶差分:

若仍不平稳,可进行二阶差分:

3. 移动平均(MA)

当前值受过去误差项的影响。


四、ARIMA 模型建立的完整流程

1.数据可视化与平稳性检测

  • 通过折线图观察趋势与季节性

  • 使用 ADF(Augmented Dickey-Fuller)检验 判断平稳性

2.差分处理

  • 若不平稳 → 进行一阶或二阶差分

3.参数选择

  • 通过 ACF(自相关函数)PACF(偏自相关函数) 确定 p 与 q

  • 或使用 auto_arima 自动调参

4.模型训练与残差分析

  • 检查残差是否为白噪声

  • 若残差仍有结构性 → 重新调整参数

5.模型预测

  • 使用 forecast()predict() 进行未来时刻预测

五、实战案例:使用 ARIMA 预测月度销量

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
from statsmodels.tsa.arima.model import ARIMA
from pmdarima import auto_arima

# 1. 加载示例数据
data = pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv')
data['Month'] = pd.to_datetime(data['Month'])
data.set_index('Month', inplace=True)
series = data['Passengers']

plt.plot(series)
plt.title('航空旅客数量变化')
plt.show()

# 2. 平稳性检验
adf_result = adfuller(series)
print(f"ADF统计量: {adf_result[0]}, p值: {adf_result[1]}")

# 3. 自动参数选择
model_auto = auto_arima(series, seasonal=False, trace=True)
print(model_auto.summary())

# 4. 拟合模型
model = ARIMA(series, order=model_auto.order)
fit = model.fit()
print(fit.summary())

# 5. 残差分析
residuals = fit.resid
plt.figure(figsize=(10,4))
plt.subplot(121)
plt.plot(residuals)
plt.title("残差序列")
plt.subplot(122)
plt.hist(residuals, bins=20)
plt.title("残差分布")
plt.show()

# 6. 未来预测
forecast = fit.forecast(steps=12)
plt.plot(series, label='历史数据')
plt.plot(forecast, label='未来预测', color='red')
plt.legend()
plt.show()

运行结果:

模型能够平滑捕捉月度趋势,并生成合理的未来12个月预测。


六、模型效果与误差评估

常用指标:

指标 公式 含义
MAE ( \frac{1}{n}\sum y_t - \hat{y}_t
RMSE ( \sqrt{\frac{1}{n}\sum (y_t - \hat{y}_t)^2} ) 强调大误差惩罚
MAPE ( \frac{100}{n}\sum \left \frac{y_t - \hat{y}_t}{y_t}\right
python 复制代码
from sklearn.metrics import mean_absolute_error, mean_squared_error
import numpy as np

y_true = series[-12:]
y_pred = forecast[:12]

mae = mean_absolute_error(y_true, y_pred)
rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print(f"MAE: {mae:.2f}, RMSE: {rmse:.2f}")

七、ARIMA 的优缺点总结

优点 缺点
理论成熟,可解释性强 难捕捉复杂非线性关系
适合小数据量预测 无法自动建模季节性,需要 SARIMA 扩展
模型稳定、参数可控 对平稳性要求高,预处理复杂

八、实战经验与应用场景

  • 电商销量预测:通过 ARIMA 捕捉商品月销量趋势。

  • 经济指标分析:GDP、CPI、PMI 等宏观经济数据趋势预测。

  • 能源/交通预测:用 ARIMA 预测电力负荷、客流量、油价波动。

  • 异常检测:通过残差序列判断异常时间点。


九、小结

ARIMA 模型的三大核心能力:

  1. 自回归:利用历史值;

  2. 差分:去除趋势;

  3. 移动平均:建模随机扰动。

即使在深度学习盛行的今天,ARIMA 仍是企业、金融机构和科研项目中的强力基线模型

它帮助我们理解时间序列的结构,为更复杂模型(如 LSTM、Transformer)打下基础。

一句话总结:
"ARIMA 是传统时序分析的瑞士军刀------小巧、精准、实用。"

相关推荐
IT_陈寒7 小时前
Spring Boot 3.2性能翻倍!我仅用5个技巧就让接口响应时间从200ms降到50ms
前端·人工智能·后端
iNBC8 小时前
AI基础概念-第一部分:核心名词与定义(一)
人工智能·语言模型·prompt
java1234_小锋8 小时前
PyTorch2 Python深度学习 - transform预处理转换模块
开发语言·python·深度学习·pytorch2
wechat_Neal9 小时前
AI革新汽车安全软件开发
人工智能·语言模型·自然语言处理
leafff12313 小时前
新手入坑 Stable Diffusion:模型、LoRA、硬件一篇讲透
人工智能·计算机视觉·stable diffusion
Liudef0614 小时前
DeepseekV3.2 实现构建简易版Wiki系统:从零开始的HTML实现
前端·javascript·人工智能·html
珺毅同学15 小时前
YOLO输出COCO指标及YOLOv12报错
python·深度学习·yolo
格林威16 小时前
AOI在产品质量检测制造领域的应用
人工智能·数码相机·计算机网络·计算机视觉·目标跟踪·视觉检测·制造
短视频矩阵源码定制16 小时前
矩阵系统源码推荐:技术架构与功能完备性深度解析
java·人工智能·矩阵·架构