关于 algo-forecast-prophet
使用 Prophet 预测业务时间序列的技能,适用于具有季节性或节假日模式的日度、周度指标。内容涵盖数据准备、模型拟合、验证,以及分解后的预测结果。
主要功能
- 01建模趋势、季节性与节假日
- 02支持线性或逻辑增长模式
- 03处理缺失数据和异常值
- 04滚动窗口交叉验证
- 05分解预测组成部分
适用场景
- 01预测受节假日影响的日销售额
- 02估算具有季节模式的周流量
- 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.mdreferences/prophet-cv.mdprophet-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:核心算法
- 选择增长模型:'linear'(默认)或 'logistic'(带上限和下限)
- 设置季节性:年度(默认)、每周(默认)、自定义(例如每月)
- 添加节假日:国家内置节假日 + 自定义事件(促销、发布活动)
- 拟合模型:
m = Prophet(); m.fit(df) - 生成未来的 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