【第七章:时间序列模型】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 是传统时序分析的瑞士军刀------小巧、精准、实用。"

相关推荐
凌杰1 小时前
AI 学习笔记:Agent 的能力体系
人工智能
IT_陈寒3 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
舒一笑4 小时前
如何获取最新的技术趋势和热门技术
人工智能·程序员
聚客AI4 小时前
🎉OpenClaw深度解析:多智能体协同的三种模式、四大必装技能与自动化运维秘籍
人工智能·开源·agent
黄粱梦醒4 小时前
大模型企业级部署方案-vllm
人工智能·llm
IT_陈寒5 小时前
JavaScript代码效率提升50%?这5个优化技巧你必须知道!
前端·人工智能·后端
IT_陈寒5 小时前
Java开发必知的5个性能优化黑科技,提升50%效率不是梦!
前端·人工智能·后端
康斯坦丁师傅5 小时前
发现一个插件,免费用谷歌最新NanoBanana 2
人工智能
emo猫pro_max6 小时前
openclaw飞书流式回复配置指南
人工智能
FishCoderh6 小时前
被OpenClaw的Session搞晕了?这篇让你彻底搞懂
人工智能