P paper2skillsPlaybook
AI 路线图 →

S&OP销售与运营计划协同 — 需求供应全链路对齐与月度计划闭环

Skill-SOP-Sales-Operations-Planning · 04-供应链

causalexperimentforecastingoptimization供应链与补货WF-A 智能补货WF-G Listing内容优化WF-I 智能体工程
年化 ROI50万
实现难度⭐⭐☆☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色供应链负责人 · 采购负责人 · CEO / 运营 VP
适用平台Amazon FBA · 海外仓 · 多国仓位(美/欧/日)
什么情况下用库存周转率低,资金压在海外仓出不来;SKU 断货紧急空运,物流成本吃掉毛利;多仓库存分布不均
成功是什么样的库存周转天数从 90 天降到 60 天,断货率 <3%,海外仓综合成本降低 15-25%
业务痛点
库存周转天数太长资金压死了断货了只能空运救急成本爆了多市场库存分配不均

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