趋近智
将 ARIMA 模型拟合到时间序列数据,通常使用 statsmodels,是预测工作中的一个重大步骤。然而,在生成预测结果之前,有必要停下来评估模型实际拟合数据的效果。拟合模型相对容易;但要确保它是好模型,则需要进行一些诊断工作。残差分析可满足这一需求。
残差就是观测值与您的模型对训练数据预测值之间的差异。对于时间 t,残差 et 的计算方式如下:
et=yt−y^t其中 yt 是时间 t 时的实际观测值,而 y^t 是您的 ARIMA 模型在时间 t 拟合的值。
可以将残差视为“剩余部分”——模型无法解释的数据部分。如果您的 ARIMA 模型已有效地反映了内部规律(自回归和移动平均分量,并通过差分处理了非平稳性),那么残差理想情况下应表现得像随机噪声。具体来说,它们应类似于白噪声。
一个拟合得好的 ARIMA 模型应产生满足以下条件的残差:
statsmodels 库使进行这些诊断检查变得简单易行。当您拟合 ARIMA 模型时,结果对象包含有用的信息和诊断方法。
假设您已拟合了这样的模型:
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.tsa.arima.model import ARIMA
# 假设 'data' 是您的 pandas Series(平稳或已差分)
# 假设 'p', 'd', 'q' 是您选择的阶数
# 示例拟合过程(请替换为您实际的数据和阶数)
# model = ARIMA(your_endog_data, order=(p, d, q)) # 如果 d > 0 则使用
# model_fit = model.fit()
# 让我们创建一些虚拟结果以进行演示
# 请替换为您实际的模型拟合
np.random.seed(42)
dummy_data = sm.tsa.arma_generate_sample(ar=[0.75], ma=[0], nsample=200)
dummy_series = pd.Series(dummy_data)
model = ARIMA(dummy_series, order=(1, 0, 0)) # 拟合一个 AR(1)
model_fit = model.fit()
# model_fit 对象现在包含结果和诊断工具
print(model_fit.summary())
model_fit.summary() 输出本身提供了一些初步的诊断信息,通常包含:
Prob(Q) 值(p 值)理想情况下应大于 0.05,表明在该滞后处无重要自相关。Prob(JB) 值(p 值)理想情况下应大于 0.05,支持残差呈正态分布的原假设。虽然摘要很有用,但视觉诊断通常提供更多信息。statsmodels 提供了一个实用的方法,名为 plot_diagnostics。
import matplotlib.pyplot as plt
# 生成标准诊断图
fig = model_fit.plot_diagnostics(figsize=(12, 8))
plt.tight_layout() # 调整布局以防止重叠
plt.show()
该命令通常会生成一个 2x2 的图表网格:
标准化残差图: 显示随时间变化的残差图。观察:
直方图加估计密度: 显示残差分布与正态分布的比较(通常带有 KDE - 核密度估计)。观察:
正态 Q-Q 图: 将残差分布的分位数与标准正态分布的分位数进行比较。观察:
相关图(ACF 图): 显示残差的自相关函数(ACF)。观察:
k 处存在重要尖峰,请尝试增加与该滞后对应的 AR 或 MA 阶数(例如,添加 AR(k) 或 MA(k) 项)。m、2m 等处出现尖峰),您可能需要一个 SARIMA 模型(下一章将涵盖)。模型诊断是一个反复过程。您拟合模型,检查残差,如果它们显示出问题,则调整模型(例如,更改阶数 p,d,q,应用变换),并重复该过程,直到残差看起来足够随机且无结构。只有到那时,您才能对模型生成的预测结果有信心。
这部分内容有帮助吗?
statsmodels中ARIMAResults对象的官方文档,对理解Python中用于模型诊断的方法和属性至关重要。© 2026 ApX Machine Learning用心打造