S&OP销售与运营计划协同 — 需求供应全链路对齐与月度计划闭环
Skill-SOP-Sales-Operations-Planning · 04-供应链
1. 解决的问题
采购/销售/财务三方各自为政导致旺季爆款缺货淡季大量积压——月度S&OP协同将预测准确率从55%提升至72%,缺货率从18%降至7%,年化收益约$18万($50万GMV规模)
2. 核心算法逻辑
业务背景(陈凤霞实战经验):S&OP(Sales & Operations Planning,销售与运营计划)是连接"生意目标"与"物流履约"的桥梁。书中强调:电商供应链的核心矛盾是销售要库存充足,财务要资金效率,运营要成本最低——S&OP就是在这三者之间找到最优均衡的协同机制,每月滚动一次。
3. 业务应用场景
- 业务问题:某卖家月销$50万,销售团队预测与采购各做各的,备货时常"旺季爆单缺货、淡季大量积压",年均库存积压成本$15万,缺货损失$10万 - 数据要求:历史12个月SKU级销售数据、当前库存水位、在途清单、供应商交期、促销日历 - S&OP流程执行: 1. 月度盘货会(每月25日):30分钟,3方到场(运营/采购/财务) 2. 需求计划:Prophet预测下3个月基线,销售叠加Q4旺季+30% 3. 供应对齐:检查到货节奏,识别"9月吸奶器缺货风险" 4. 差距闭环:提前30天追加采购500件,锁定海运舱位 5. 次月复盘:实际vs预测偏差分析,调整模型参数 - 预期产出:预测准确率从
场景B:大促盘货S&OP(Prime Day/双11)
- **业务问题**:大促备货完全靠"经验拍脑袋",连续3年出现"爆款缺货、滞销款积压$30万" - **算法应用**:大促专项S&OP提前8周启动:自上而下目标拆解(总GMV目标→品类→SKU)+ 自下而上盘货聚合(每个SKU历史大促数据×增长系数),两路收敛校准 - **预期产出**:大促备货准确率从40%提升至68%,大促后滞销库存减少45%
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI 预估:月销$50万卖家,S&OP将预测准确率从55%→72%,缺货率18%→7%,年化收益$18万;系统成本$6000/年,ROI≈300x
- 实施难度:⭐⭐☆☆☆(流程和数据门槛低,最难的是让销售/采购/财务三方都参与月度会议)
- 优先级:⭐⭐⭐⭐⭐(供应链管理的顶层框架,所有其他优化的前提)
- 适用规模:月销>$20万、SKU数>50个的卖家强烈推荐;更小规模可用简化版(双周盘货表)
- 数据依赖:历史12个月SKU销售数据、库存系统实时数据、采购到货记录
7. 代码模板
代码块数量:1 · 路径:未检测到
"""
S&OP销售与运营计划协同系统
功能:需求计划 + 供应对齐 + 差距闭环 + 滚动更新
"""
import numpy as np
import pandas as pd
from dataclasses import dataclass, field
from typing import List, Dict, Optional, Tuple
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')
@dataclass
class SKUPlan:
"""SKU计划单元"""
sku_id: str
category: str # A/B/C 分类
current_stock: int # 当前库存
in_transit: int # 在途库存
committed: int # 已承诺订单
daily_sales: float # 日均销量
lead_time_days: int # 采购提前期
unit_cost: float # 单位采购成本($)
safety_stock_days: int = 14 # 安全库存天数
@dataclass
class DemandPlan:
"""需求计划"""
sku_id: str
period: str # '2026-07', '2026-08', '2026-09'
baseline_forecast: float # 基线预测
sales_adjustment: float # 销售调整系数
final_forecast: float = 0.0
def __post_init__(self):
self.final_forecast = self.baseline_forecast * self.sales_adjustment
class SalesOperationsPlanner:
"""S&OP销售运营计划协同引擎"""
def __init__(self, planning_horizon_months: int = 3):
self.horizon = planning_horizon_months
self.skus: Dict[str, SKUPlan] = {}
self.demand_plans: List[DemandPlan] = []
self.sop_results = []
def add_sku(self, sku: SKUPlan):
self.skus[sku.sku_id] = sku
def add_demand_plan(self, plan: DemandPlan):
self.demand_plans.append(plan)
def compute_atp(self, sku: SKUPlan) -> float:
"""计算可承诺库存 ATP"""
return max(sku.current_stock + sku.in_transit - sku.committed, 0)
def compute_doi(self, sku: SKUPlan) -> float:8. 论文来源
- 2312.09847