第七章:时间序列模型
第二部分:时间序列统计模型与神经网络模型
第二节:适用广泛的时间序列模型: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 模型的三大核心能力:
-
自回归:利用历史值;
-
差分:去除趋势;
-
移动平均:建模随机扰动。
即使在深度学习盛行的今天,ARIMA 仍是企业、金融机构和科研项目中的强力基线模型 。
它帮助我们理解时间序列的结构,为更复杂模型(如 LSTM、Transformer)打下基础。
一句话总结:
"ARIMA 是传统时序分析的瑞士军刀------小巧、精准、实用。"