供应链数据分析案例
场景
你是某零售/电商公司的供应链数据分析师,发现整体库存周转天数从 30 天上升到 45 天,滞销库存金额占比达 25%。请分析原因并提出优化方案。
核心指标
| 指标 | 公式 | 说明 |
|---|---|---|
| 库存周转天数 | 平均库存金额 / 日均销售成本 | 越低越好 |
| 库存周转率 | 销售成本 / 平均库存金额 | 越高越好 |
| 滞销率 | 90 天无动销 SKU / 总 SKU | ≤10% 为健康 |
| 缺货率 | 缺货 SKU-天 / 总 SKU-天 | ≤2% 为健康 |
| 预测准确率 | `1 - | 实际 - 预测 |
分析过程
第一步:按品类拆解库存健康度
-- 各品类库存健康度
SELECT
category,
SUM(inventory_value) AS inventory_value,
SUM(last_30d_sales) AS sales_30d,
ROUND(SUM(inventory_value) / NULLIF(SUM(last_30d_sales) / 30, 0), 1) AS turnover_days,
-- 滞销比例(90 天未动销)
ROUND(SUM(CASE WHEN last_sale_date < DATE_SUB(CURDATE(), INTERVAL 90 DAY) THEN inventory_value ELSE 0 END) /
SUM(inventory_value) * 100, 1) AS dead_stock_pct,
-- 缺货率
ROUND(SUM(CASE WHEN stock_qty = 0 THEN 1.0 ELSE 0 END) / COUNT(*) * 100, 1) AS stockout_rate
FROM inventory_snapshot
GROUP BY category
ORDER BY turnover_days DESC;
| 品类 | 库存(万) | 周转天数 | 滞销率 | 缺货率 |
|---|---|---|---|---|
| 服装 | 3000 | 65 | 35% | 5% |
| 电子 | 2000 | 25 | 8% | 3% |
| 食品 | 1000 | 12 | 3% | 8% |
| 家居 | 1500 | 50 | 28% | 2% |
关键发现
服装品类周转天数 65 天,滞销率 35%,是拉高整体库存周转的主要原因。
第二步:供需匹配分析
-- 需求预测准确率
SELECT
category,
sku_id,
forecast_qty,
actual_qty,
ROUND(ABS(forecast_qty - actual_qty) / NULLIF(actual_qty, 0) * 100, 1) AS mape,
CASE
WHEN forecast_qty > actual_qty * 1.3 THEN '预测过高'
WHEN forecast_qty < actual_qty * 0.7 THEN '预测过低'
ELSE '预测准确'
END AS forecast_status
FROM demand_forecast
WHERE month = '2024-01';
-- 按品类汇总预测偏差
SELECT
category,
ROUND(AVG(ABS(forecast_qty - actual_qty) / NULLIF(actual_qty, 0)) * 100, 1) AS avg_mape,
SUM(CASE WHEN forecast_qty > actual_qty * 1.3 THEN 1 ELSE 0 END) AS over_forecast_skus,
SUM(CASE WHEN forecast_qty < actual_qty * 0.7 THEN 1 ELSE 0 END) AS under_forecast_skus
FROM demand_forecast
WHERE month = '2024-01'
GROUP BY category;
第三步:ABC-XYZ 分类
| X(需求稳定) | Y(需求波动中) | Z(需求剧烈波动) | |
|---|---|---|---|
| A(高价值) | 安全库存+定期补货 | 动态安全库存 | 按需采购 |
| B(中价值) | 定期补货 | 需求预测+安全库存 | 减少 SKU |
| C(低价值) | 大批量低频补货 | 评估是否淘汰 | 淘汰/清仓 |
-- ABC 分类(按销售额累计占比)
WITH sku_ranking AS (
SELECT
sku_id,
total_sales,
SUM(total_sales) OVER (ORDER BY total_sales DESC) AS cumulative_sales,
SUM(total_sales) OVER () AS grand_total
FROM sku_sales_summary
)
SELECT
sku_id,
total_sales,
CASE
WHEN cumulative_sales / grand_total <= 0.8 THEN 'A'
WHEN cumulative_sales / grand_total <= 0.95 THEN 'B'
ELSE 'C'
END AS abc_class
FROM sku_ranking;
第四步:优化建议
| 措施 | 目标 | 实施方案 | 预期效果 |
|---|---|---|---|
| 滞销清理 | 降低滞销率 | 服装品类 90 天未动销 SKU 打折清仓 | 释放库存金额 1000 万 |
| 补货优化 | 降低周转天数 | 引入 ABC-XYZ 分类补货策略 | 周转天数 → 35 天 |
| 预测升级 | 提升预测准确率 | 服装品类引入机器学习预测模型 | MAPE 降低 10pp |
| SKU 精简 | 减少长尾 SKU | 淘汰 C-Z 类 SKU(低价值+高波动) | 管理 SKU 减少 30% |
面试应答要点
供应链分析核心
- 库存不是越少越好:要平衡周转效率和缺货风险
- 分品类、分 SKU 看:不同品类策略不同
- ABC-XYZ 分类是通用分析框架
- 预测准确率是供应链优化的起点