paper2skills Playbook

Prophet Forecasting with Seasonality and Holidays

Skill-Prophet-Forecasting · 03-时间序列

experimentforecastingmulti_agent供应链与补货MAS与智能体工程WF-A 智能补货
实现难度⭐⭐☆☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色供应链负责人 / 采购负责人 · 运营负责人 · 财务负责人
适用平台Amazon FBA · 海外仓 · 多市场多仓
什么情况下用大促前备货总是不是多了就是少了;新品上线第一个月断货,再补又积压;年底预算不知道各月目标怎么定
成功是什么样的提前 4-8 周准确预判各 SKU 需求峰值,库存积压减少 30%,断货率降低 50%
业务痛点
备货总是压货或断货旺季淡季波动太大预测不准补货周期 30 天但预测只看 7 天

1. 解决的问题

业务时序数据充满"人造季节性"——黑五、Prime Day、圣诞促销让销量暴涨,春节让物流停滞。

2. 核心算法逻辑

核心问题:业务时序数据充满"人造季节性"——黑五、Prime Day、圣诞促销让销量暴涨,春节让物流停滞。传统ARIMA难以处理这些不规则的节假日效应,而Prophet专为业务时序设计。

3. 业务应用场景

业务问题:Momcozy 需要在8月预测11月黑五期间的销量,用于提前向供应商备货(lead time 12周)。黑五期间销量通常是平时的5-10倍,传统方法严重低估。

2. 拟合模型:用过去2年周销量数据训练 3. 预测未来16周:覆盖黑五到圣诞季 4. 输出置信区间:用于制定乐观/悲观两种备货方案

预期产出: - 黑五周预测准确率(WAPE):基线方法 40% → Prophet 18% - 备货精准度:从"备货过多/过少"到"95%置信区间内" - 资金效率:库存周转从4次/年提升到6次/年

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI:节假日预测准确率提升50%+,备货资金效率提升30%
  • 难度:⭐⭐☆☆☆(2/5)— 现成库(`fbprophet`),调用即可
  • 优先级:⭐⭐⭐⭐⭐(5/5)— 业务时序预测的标准工具

7. 代码模板

代码块数量:2 · 路径:未检测到

"""
Prophet Forecasting — 业务时序预测
支持:趋势、季节性、节假日效应、不确定性区间
"""

import pandas as pd
import numpy as np
from datetime import datetime, timedelta


class SimpleProphet:
    """简化版Prophet实现(用于理解原理)"""

    def __init__(self, growth='linear', n_changepoints=25,
                 yearly_seasonality=True, weekly_seasonality=True,
                 changepoint_prior_scale=0.05):
        self.growth = growth
        self.n_changepoints = n_changepoints
        self.yearly = yearly_seasonality
        self.weekly = weekly_seasonality
        self.changepoint_scale = changepoint_prior_scale
        self.holidays = None

    def add_holiday(self, name, dates, lower_window=0, upper_window=0, prior_scale=10.0):
        """添加自定义节假日"""
        if self.holidays is None:
            self.holidays = []
        for ds in dates:
            for offset in range(-lower_window, upper_window + 1):
                self.holidays.append({
                    'holiday': name,
                    'ds': pd.to_datetime(ds) + timedelta(days=offset),
                    'lower_window': lower_window,
                    'upper_window': upper_window,
                    'prior_scale': prior_scale
                })

    def _fourier_series(self, t, period, series_order=3):
        """傅里叶级数季节性"""
        x = 2 * np.pi * np.arange(1, series_order + 1) / period
        x = x * t[:, None]
        return np.concatenate([np.sin(x), np.cos(x)], axis=1)

    def fit(self, df):
        """
        简化拟合:线性趋势 + 傅里叶季节性
        """
        df = df.copy()
        df['ds'] = pd.to_datetime(df['ds'])
        df['t'] = (df['ds'] - df['ds'].min()).dt.days

        # 趋势:简单线性回归
        self.trend_k, self.trend_m = np.polyfit(df['t'], df['y'], 1)

        # 去趋势后的残差
        trend = self.trend_k * df['t'] + self.trend_m
        residual = df['y'] - trend

        # 周季节性(7天周期)
        if self.weekly:

8. 论文来源

未自动抽取;请查看原始 Skill 卡片。