Prophet Forecasting with Seasonality and Holidays
Skill-Prophet-Forecasting · 03-时间序列
experimentforecastingmulti_agent供应链与补货MAS与智能体工程WF-A 智能补货
实现难度⭐⭐☆☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色供应链负责人 / 采购负责人 · 运营负责人 · 财务负责人
适用平台Amazon FBA · 海外仓 · 多市场多仓
什么情况下用大促前备货总是不是多了就是少了;新品上线第一个月断货,再补又积压;年底预算不知道各月目标怎么定
成功是什么样的提前 4-8 周准确预判各 SKU 需求峰值,库存积压减少 30%,断货率降低 50%
业务痛点
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 卡片。