Prophet 与层级预测:业务多层口径的一致性建模
1. 为什么 Prophet 在业务里常用
Prophet 的优势是结构直观:趋势 + 季节 + 节假日。
它非常适合快速搭建可解释基线,并让非算法团队也能理解预测来源。
2. Prophet 形式
$$ y(t)=g(t)+s(t)+h(t)+\epsilon_t $$
其中:
- $g(t)$:分段线性或逻辑增长趋势。
- $s(t)$:傅里叶季节项。
- $h(t)$:节假日/事件效应。
3. Python 示例
from prophet import Prophet
dfp = df.rename(columns={"ds": "ds", "y": "y"})
m = Prophet(
yearly_seasonality=True,
weekly_seasonality=True,
changepoint_prior_scale=0.1,
)
m.add_country_holidays(country_name="CN")
m.fit(dfp)
future = m.make_future_dataframe(periods=30)
fcst = m.predict(future)
print(fcst[["ds", "yhat", "yhat_lower", "yhat_upper"]].tail())
4. 层级预测为什么难
企业常有多层口径:商品 -> 品类 -> 大区 -> 全国。
逐层独立预测会产生“不加总一致”问题(子层之和不等于父层预测)。
5. 一致性修正思路
- Bottom-up:先预测子层,再向上汇总。
- Top-down:先预测总量,再分摊到子层。
- MinT:基于误差协方差做最优一致性投影。
6. 实务建议
- Prophet 作为冷启动与可解释基线非常有效。
- 对重要层级做一致性约束,避免报表冲突。
- 重大事件期(大促、政策变动)应人工注入外生信息。
Prophet 解决的是“快速、稳健、可解释”的第一公里,层级一致性解决的是“组织可执行”的最后一公里。