P paper2skillsPlaybook
AI 路线图 →

采购前置期PLT全链路KPI体系 — 采购周期时效量化与断货风险预警

Skill-Procurement-Cycle-Time-KPI · 04-供应链

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

1. 解决的问题

采购计划员面临"PLT均值掩盖风险"——P85分位点法将安全库存精准化,断货率从18%降至4%,年化减少断货损失15万元

2. 核心算法逻辑

采购前置期(PLT, Procurement Lead Time) 是供应链计划的基准时间轴。全链路PLT由三段叠加:

3. 业务应用场景

场景A:吸奶器SKU跨境采购PLT诊断 - 业务问题:Momcozy 吸奶器从国内供应商采购,历史多次断货,事后发现PLT比计划多出8-12天 - 数据要求:历史采购订单(下单日→到仓日)+ 各阶段节点时间戳(生产完工日、发货日、清关日) - 预期产出: - PLT分布图(P50=28天,P85=38天,P95=45天) - 阶段瓶颈热图(生产阶段方差最大 → 找根因) - PLT达成率:过去12月仅73%(目标90%) - 业务价值:用P85替代均值计算安全库存,备货提前5天,断货率从18%降至4%,年化减少断货损失约15万元

**场景B:A2奶粉多供应商PLT对比优化** - **业务问题**:同款A2奶粉对接3家供应商,价格差异5%,但PLT差异高达12天 - **数据要求**:每家供应商近24批次PLT明细数据 - **预期产出**:供应商PLT可靠性评分(均值+方差双维度)、最优供应商组合方案 - **业务价值**:PLT短且稳定的供应商减少应急空运2次/季 → 节省空运费约8万元/年

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI预估:PLT管理精细化可减少50%断货事件,以日均GMV 5万元、断货率降低10个百分点测算,年化减少断货损失约18万元;同时减少紧急空运2-3次/季,节省空运附加费8-12万元/年
  • 实施难度:⭐⭐☆☆☆(核心依赖采购订单时间戳,多数ERP/采购系统有记录)
  • 优先级评分:⭐⭐⭐⭐⭐(PLT是所有库存计划的基础输入,优先级最高)
  • 评估依据:陈凤霞书中强调PLT是供应链计划"第一输入",P85分位点法比均值法普遍减少20-30%断货风险

7. 代码模板

代码块数量:2 · 路径:未检测到

"""
采购前置期(PLT) KPI 分析体系
功能:PLT分布分析 / 阶段拆解 / 安全库存重算 / 断货预警
输入:采购订单历史数据(含各阶段时间戳)
输出:PLT KPI报告 + 安全库存建议
"""
import numpy as np
import pandas as pd
from scipy import stats
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')


def generate_sample_po_data(n=200, seed=42):
    """生成模拟采购订单数据(含各阶段时间戳)"""
    np.random.seed(seed)
    records = []
    base_date = datetime(2025, 1, 1)
    
    for i in range(n):
        t_order_confirm = np.random.randint(1, 3)           # 下单确认:1-2天
        t_production = np.random.randint(10, 22)            # 生产:10-21天(长尾)
        if np.random.random() < 0.15:                       # 15%概率遇到产能延误
            t_production += np.random.randint(5, 12)
        t_transit = np.random.randint(18, 32)               # 海运:18-31天
        t_customs = np.random.randint(2, 8)                 # 清关:2-7天(偶尔延误)
        if np.random.random() < 0.10:
            t_customs += np.random.randint(3, 10)
        t_inbound = np.random.randint(1, 4)                 # 入仓验收:1-3天
        
        total_plt = t_order_confirm + t_production + t_transit + t_customs + t_inbound
        order_date = base_date + timedelta(days=i * 2)
        planned_plt = 35  # 计划PLT = 35天
        
        records.append({
            'po_id': f'PO-{i+1:04d}',
            'sku': np.random.choice(['SKU-吸奶器A', 'SKU-吸奶器B', 'SKU-奶粉900g']),
            'supplier': np.random.choice(['供应商A', '供应商B', '供应商C'],
                                         p=[0.5, 0.3, 0.2]),
            'order_date': order_date,
            'planned_plt': planned_plt,
            'actual_plt': total_plt,
            't_confirm': t_order_confirm,
            't_production': t_production,
            't_transit': t_transit,
            't_customs': t_customs,
            't_inbound': t_inbound,
            'plt_variance': total_plt - planned_plt,  # 正=延误
        })
    
    return pd.DataFrame(records)


def analyze_plt_distribution(df):
    """PLT分布分析:均值/分位数/方差系数"""
    print("=" * 60)
    print("【PLT分布分析】")
    print("=" * 60)
    

8. 论文来源

  • 2309.14791