mcpField
A
algo-forecast-prophet

algo-forecast-prophet

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

关于 algo-forecast-prophet

使用 Prophet 预测业务时间序列的技能,适用于具有季节性或节假日模式的日度、周度指标。内容涵盖数据准备、模型拟合、验证,以及分解后的预测结果。

主要功能

  1. 01建模趋势、季节性与节假日
  2. 02支持线性或逻辑增长模式
  3. 03处理缺失数据和异常值
  4. 04滚动窗口交叉验证
  5. 05分解预测组成部分

适用场景

  1. 01预测受节假日影响的日销售额
  2. 02估算具有季节模式的周流量
  3. 03使用 MAPE 和 RMSE 验证预测

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/asgard-ai-platform/skills --skill algo-forecast-prophet

安装后在 Claude Code 中输入/algo-forecast-prophet确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

examples/
sample_scenario.md
references/
prophet-cv.md
prophet-tuning.md

详细介绍

Prophet 预测

概述

Prophet(Meta)将时间序列分解为趋势 + 季节性 + 节假日 + 误差。使用 Stan 拟合加法(或乘法)模型。原生支持处理缺失数据、异常值和节假日效应。专为按日/周粒度的业务时间序列设计。

适用场景

触发条件:

  • 按日/周频率预测业务指标(销售额、流量、互动量)
  • 数据具有明显的季节性模式和已知的节假日效应
  • 需要快速获得合理的预测结果,且缺乏深厚的时间序列专业知识

不适用场景:

  • 高频数据(小时以下)—— Prophet 专为按日及以上粒度设计
  • 需要因果/解释性模型时(Prophet 是描述性的)
  • 时间序列过短(少于 2 个季节周期)

算法

IRON LAW: Prophet Is an Additive Regression Model, NOT Classical Time Series
y(t) = g(t) + s(t) + h(t) + ε(t)
- g(t): piecewise linear or logistic trend with automatic changepoints
- s(t): Fourier series for yearly/weekly/daily seasonality
- h(t): user-specified holiday effects
Prophet does NOT model autocorrelation in residuals. If residuals are
autocorrelated, the uncertainty intervals will be too narrow.
阶段 1:输入验证

准备包含以下列的 DataFrame:ds(时间戳)、y(指标)。如果有可用的回归变量,则添加相应列。指定国家节假日、自定义节假日和增长类型。 关卡: 数据格式正确,至少包含 2 个完整的季节周期。

阶段 2:核心算法
  1. 选择增长模型:'linear'(默认)或 'logistic'(带上限和下限)
  2. 设置季节性:年度(默认)、每周(默认)、自定义(例如每月)
  3. 添加节假日:国家内置节假日 + 自定义事件(促销、发布活动)
  4. 拟合模型:m = Prophet(); m.fit(df)
  5. 生成未来的 DataFrame 并进行预测:m.predict(future)
阶段 3:验证

检查预测组件(趋势、季节性、节假日)是否符合直觉。进行交叉验证:使用 Prophet 内置的 cross_validation() 和滚动窗口。评估 MAPE、RMSE。 关卡: MAPE 符合使用场景的要求,组件通过可视化检查。

阶段 4:输出

返回包含分解组件的预测结果。

输出格式

{
  "forecasts": [{"ds": "2025-04-15", "yhat": 1200, "yhat_lower": 1050, "yhat_upper": 1350}],
  "components": {"trend": "upward_3pct", "yearly_seasonality": "peak_in_december", "weekly_seasonality": "low_on_weekends"},
  "metadata": {"mape": 0.08, "training_days": 730, "forecast_days": 90}
}

示例

示例输入/输出

输入: 2 年的每日网站流量数据,其中圣诞节流量激增,夏季流量下降 预期: 预测结果能够捕捉到:上升趋势、每周模式(工作日 > 周末)、年度模式(圣诞节流量激增,夏季流量下降)。

边缘情况
输入预期结果原因
缺失多天数据Prophet 原生支持处理与 ARIMA 不同,无需插补
趋势突然变化自动检测变点Prophet 相较于 ARIMA 的关键特性
乘法季节性设置 seasonality_mode='multiplicative'适用于季节性振幅随趋势增大的情况

注意事项

  • 默认变点灵敏度:Prophet 可能会过度或不足地检测趋势变化。调整 changepoint_prior_scale(默认值为 0.05):值越高,模型越灵活;值越低,曲线越平滑。
  • 预测结果趋于平坦:如果趋势变点的设置过于保守,长期预测可能会不切实际地趋于平坦。提高灵活性或指定增长上限。
  • 必须指定节假日效应:Prophet 不会自动发现节假日。必须提供节假日 DataFrame——未提供的节假日不会纳入模型。
  • 不适用于因果推断:Prophet 可以发现模式,但无法解释其成因。添加回归变量显示的是相关性,而非因果关系。
  • 不确定性区间:基于历史趋势变化方差,而非残差自相关。如果残差具有结构性,不确定性区间可能过窄。

参考资料

  • Prophet 超参数调优指南,请参阅 references/prophet-tuning.md
  • 交叉验证最佳实践,请参阅 references/prophet-cv.md

评论

支持 Markdown