采购前置期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