mcpField
A
algo-forecast-arima

algo-forecast-arima

github.com/asgard-ai-platform数据与数据库24341 次安装21 周前更新
代码仓库

关于 algo-forecast-arima

面向分析人员的单变量时间序列 ARIMA 预测技能,适用于具有趋势或季节性的数据。流程包括平稳性检验、参数选择、模型拟合、残差诊断,以及生成带置信区间的预测。

主要功能

  1. 01检验并处理平稳性
  2. 02借助 ACF/PACF 选择参数
  3. 03拟合 ARIMA 或季节性 SARIMA
  4. 04使用 Ljung-Box 检查残差
  5. 05生成带置信区间的预测

适用场景

  1. 01预测销售或需求序列
  2. 02预测具有趋势的流量
  3. 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.md
references/
acf-pacf.md
seasonal-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:核心算法
  1. 平稳性:进行 ADF 检验。如果 p > 0.05,则进行差分(d=1)。重新检验。
  2. 参数选择:检查 ACF/PACF 图。或者使用 auto_arima(基于 AIC 的网格搜索)。
    • p(AR 项):PACF 截尾滞后阶数
    • q(MA 项):ACF 截尾滞后阶数
    • d:所需差分次数
  3. 拟合模型:最大似然估计
  4. 预测:生成带置信区间的预测值
阶段 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

评论

支持 Markdown