关于 algo-forecast-arima
面向分析人员的单变量时间序列 ARIMA 预测技能,适用于具有趋势或季节性的数据。流程包括平稳性检验、参数选择、模型拟合、残差诊断,以及生成带置信区间的预测。
主要功能
- 01检验并处理平稳性
- 02借助 ACF/PACF 选择参数
- 03拟合 ARIMA 或季节性 SARIMA
- 04使用 Ljung-Box 检查残差
- 05生成带置信区间的预测
适用场景
- 01预测销售或需求序列
- 02预测具有趋势的流量
- 03分析单变量季节性数据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ asgard-ai-platform/ skills --skill algo-forecast-arima安装后在 Claude Code 中输入/algo-forecast-arima确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/sample_scenario.mdreferences/acf-pacf.mdseasonal-arima.md详细介绍
ARIMA 时间序列模型
概述
ARIMA(p,d,q) 将自回归(AR)、差分(I)和移动平均(MA)结合起来,用于时间序列预测。季节性变体:SARIMA(p,d,q)(P,D,Q,s)。要求数据平稳(可通过差分实现)。最适合具有明显趋势/季节性模式的单变量序列。
适用场景
触发条件:
- 预测单变量时间序列(销售额、需求、流量)
- 数据具有明显趋势和/或季节性模式
- 需要具备统计特性且易于解释的模型
不适用场景:
- 多个外部特征参与的多变量预测(使用 ML 模型)
- 超长期预测(ARIMA 的置信区间会迅速扩大)
- 不规则/事件驱动数据(使用因果模型)
算法
IRON LAW: ARIMA Requires STATIONARY Data
Non-stationary data (trend, changing variance) violates ARIMA assumptions.
Test stationarity with ADF test (p < 0.05 = stationary).
If non-stationary: difference the series (d=1 usually suffices).
If still non-stationary after d=2, ARIMA may not be appropriate.
阶段 1:输入验证
检查:时间间隔是否规律、是否存在缺失值(必要时进行插补)、观测值是否至少有 50 个(理想情况下涵盖 2 个或更多完整季节周期)。使用 ADF 检验平稳性。 门槛: 数据规律、长度充足,且已评估平稳性。
阶段 2:核心算法
- 平稳性:进行 ADF 检验。如果 p > 0.05,则进行差分(d=1)。重新检验。
- 参数选择:检查 ACF/PACF 图。或者使用 auto_arima(基于 AIC 的网格搜索)。
- p(AR 项):PACF 截尾滞后阶数
- q(MA 项):ACF 截尾滞后阶数
- d:所需差分次数
- 拟合模型:最大似然估计
- 预测:生成带置信区间的预测值
阶段 3:验证
检查残差:应为白噪声(无自相关)。进行 Ljung-Box 检验(p > 0.05 = 无自相关)。残差应服从正态分布。 门槛: 残差通过 Ljung-Box 检验,且不存在残留模式。
阶段 4:输出
返回带置信区间的预测值。
输出格式
{
"forecasts": [{"period": "2025-04", "forecast": 1250, "lower_95": 1100, "upper_95": 1400}],
"model": {"order": [1,1,1], "seasonal_order": [1,1,1,12], "aic": 520.3},
"metadata": {"training_periods": 60, "forecast_horizon": 12}
}
示例
输入/输出示例
输入: 12 个月度观测值,呈上升趋势:[10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32]
步骤 1: 一阶差分 = [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2](常数 → 平稳,d=1 即可)
步骤 2: 带漂移 μ=2 的 ARIMA(0,1,0) 随机游走是最简单的拟合模型。
预期预测值(漂移=2 的 ARIMA(0,1,0)):
- 第 13 期:32 + 2 = 34
- 第 14 期:32 + 4 = 36
- 第 15 期:32 + 6 = 38
验证:差分后的序列为常数(2)→ 无需 AR/MA 项。残差恰好为 0 → 完美拟合(玩具示例)。对于真实数据,残差应通过 Ljung-Box 检验(p > 0.05)。
边缘情况
| 输入 | 预期结果 | 原因 |
|---|---|---|
| 无趋势、无季节性 | ARIMA(p,0,q) | 无需差分 |
| 仅有明显趋势 | ARIMA(p,1,q) | 一阶差分可消除线性趋势 |
| 多种季节性 | ARIMA 可能难以处理 | 可改用 Prophet 或 TBATS |
注意事项
- 过度差分:在 d=1 已足够时使用 d=2 会引入不必要的噪声。再次差分前,先检查一阶差分是否平稳。
- Auto-ARIMA 并非万能:基于 AIC 的选择可能会选出过拟合模型。无论是否使用自动选择,都要检查残差诊断。
- 置信区间会快速扩大:多步预测会累积不确定性。不要轻信超出 2-3 个季节周期的点预测。
- 日历效应:工作日、节假日和闰年会影响月度/周度数据。ARIMA 无法原生处理这些因素——添加回归变量或使用 Prophet。
- 结构性突变:ARIMA 假定数据生成过程稳定。COVID、市场冲击或政策变化都会破坏这一假设。
参考资料
- ACF/PACF 解读指南,参见
references/acf-pacf.md - SARIMA 季节性参数选择,参见
references/seasonal-arima.md