S&OP工程 II:Demand Planning,从猜测到概率
It looks like only the source line was provided. Could you please share the rest of the text you’d like translated into Simplified Chinese? Once I have the content, I’ll translate it while preserving the original formatting, markdown syntax, and any code blocks or URLs.
执行摘要
概率预测不会告诉你“你会卖出 100”。它会告诉你“在 95 % 的概率下,你会卖出 35 到 157 之间”。这条不确定性区间是计算你的 Safety Stock 而不依赖经验法则的数学基础。
demand_forecasts 表设计
CREATE TABLE demand_forecasts (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
execution_date DATE NOT NULL, -- Cuándo corrimos el modelo
ds DATE NOT NULL, -- Fecha futura predicha
yhat NUMERIC NOT NULL, -- Predicción central
yhat_lower NUMERIC NOT NULL, -- Límite inferior (Safety Stock)
yhat_upper NUMERIC NOT NULL, -- Límite superior (Riesgo)
model_version TEXT NOT NULL, -- Trazabilidad
UNIQUE(execution_date, ds) -- Un forecast por ejecución y fecha
);
为什么使用 execution_date?
在 6 个月后,当你想审计模型的准确性时,需要知道预测是何时生成的以及与哪些真实数据进行比较。这一做法在 MLOps 中被称为 Snapshotting,它可以评估模型随时间的漂移。没有这列,你只有一个模型;有了它,你就拥有一个可审计的系统。
Source: …
Prophet模型
Prophet 是 Meta 开发的时间序列引擎,专为业务数据的不规则性设计:缺口、节假日和趋势变化。它非常适合真实的供应链。
类 ProphetPredictor
def train_model(self, country_code='ES'):
"""
Entrena Prophet con dos configuraciones clave para S&OP:
- interval_width: Ancho del intervalo de confianza
- country_holidays: Contexto operativo del país
"""
self.model = Prophet(
interval_width=0.95, # Intervalo de confianza del 95 %
weekly_seasonality=True,
yearly_seasonality=True
)
# Festivos que alteran patrones de carga/descarga
self.model.add_country_holidays(country_name=country_code)
self.model.fit(self.ts_df)
工程决策
-
interval_width=0.95:这不是装饰性的。上限 (yhat_upper) 表示在 95 % 置信水平下的最大可能需求,并直接用于计算安全库存:
Safety Stock = yhat_upper - yhat。 -
add_country_holidays('ES'):节假日是运营异常(工厂、仓库、运输停工)。如果模型忽略了例如西班牙的 8 月 15 日,它会把订单下降解释为需求下降趋势,从而破坏九月的预测。
可视化与 XAI(可解释人工智能)
黑点代表你的实际历史需求。在可视化中:
- 蓝线:中心预测(
yhat)。 - 阴影带:95 % 置信区间。
历史波动性越大,带越宽 → 需要的安全库存越多 → 冻结的资本越多。此带是你应与 CFO(首席财务官)讨论的内容。
模型分解为:
- 趋势(业务的增长或下降)
- 季节性(一年中不同时间的峰值)
- 节假日效应
这使得总经理能够凭借可视化证据批准运营计划。
交互式环境
我准备了一个独立的 notebook,你可以在其中对第 1 章中清理后的匿名化数据快照进行模型训练。你无需安装 Python、Prophet 或配置 Supabase;只需一个浏览器。
- 📎 在 Google Colab 中打开交互式 Notebook
运行单元格,观察如何生成带有不确定性区间的概率预测,并尝试修改预测范围、国家和置信区间。
接下来的步骤
在 第3章 中,我们将介绍数学优化(PuLP)和约束理论,以将预测转化为供应决策:购买多少、何时生产以及如何在最小化成本的前提下分配有限资源。
反应型运营总监与决策型运营总监的区别在于数据与行动之间的数学模型。