关于 demand-forecasting
面向商家的库存需求预测指南,利用销售历史、季节性和供应商交期规划补货。内容涵盖平台工具选择,也介绍基本计算方法。
主要功能
- 01按电商平台选择工具
- 02整理销售历史数据
- 03设置再订货点与安全库存
- 04规划季节性需求
- 05审核补货建议与采购订单
适用场景
- 01排查反复缺货或库存过剩
- 02为季节高峰规划库存
- 03自动生成补货建议
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ finsilabs/ awesome-ecommerce-skills --skill demand-forecasting安装后在 Claude Code 中输入/demand-forecasting确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
tile.jsonevals/database-schema-new-product-fallback-and/criteria.jsontask.mdevals/demand-decomposition-and-time-series-for/criteria.jsontask.mdevals/reorder-point-and-safety-stock-calculati/criteria.jsontask.md详细介绍
需求预测
概述
需求预测利用历史销售数据、季节性模式和交货周期,预测所需库存数量及补货时间。长期缺货或库存过剩通常表明,补货点是凭直觉而非数据设定的。对于大多数商家,专用库存规划工具都能处理这些问题;只有在有独特运营需求时,才需要编写自定义预测代码。
何时使用此技能
- 长期缺货或库存过剩表明当前补货点设置不当时
- 构建自动补货建议,以减少人工库存审核时
- 为季节性销售高峰(黑色星期五、返校季、节日季)规划库存时
- 拥有 12 个月以上的销售历史数据,并希望从中提取有意义的需求模式时
- 集成供应商交货周期和采购订单工作流,实现端到端补货时
核心说明
第 1 步:确定平台并选择合适的预测工具
| 平台 | 推荐工具 | 原因 |
|---|---|---|
| Shopify | Inventory Planner(Shopify App Store)或 Cogsy | Inventory Planner 可直接连接 Shopify,分析 12 个月以上的销售历史数据,计算补货点并生成采购订单 |
| WooCommerce | ATUM Inventory Management(免费版/高级版)或 Inventory Planner | ATUM 在 WooCommerce 中原生提供补货点管理;Inventory Planner 提供 WooCommerce 连接器,可进行高级预测 |
| BigCommerce | Inventory Planner 或 Linnworks | 两者都提供 BigCommerce 原生集成,并支持多地点库存预测 |
| 多渠道 | Skubana(现为 Extensiv)或 Linnworks | 可通过单一仪表板处理 Shopify、WooCommerce、Amazon 和 eBay 的库存预测 |
| 自定义 / 无头架构 | 在订单数据库上构建时间序列分析层 | 根据历史销售数据使用移动平均、季节性分解和安全库存公式 |
第 2 步:设置销售历史数据采集
准确的预测需要干净的历史数据。运行任何预测之前:
- 确保销售总额中不包含已取消和已退款的订单——连接到平台后,大多数预测工具会自动处理
- 标记促销时段——闪购、节日销量激增和网红带来的需求应标记为异常;若不加甄别地纳入,这些数据会推高基准需求估算
- 基本的季节性模式检测至少需要 6 个月的历史数据;要查看同比趋势,则需要 12 个月以上
Shopify
使用 Inventory Planner:
- 从 Shopify App Store 安装 Inventory Planner(提供 14 天免费试用,之后每月收费 $99+)
- 连接后,Inventory Planner 会自动导入完整的 Shopify 销售历史数据
- 在 Inventory Planner → Suppliers 中添加供应商及其交货周期(例如,Supplier A = 14 天,Supplier B = 7 天)
- 在 Settings → Forecasting 中设置所需的服务水平(例如,95%——表示希望在 95% 的需求场景中都有库存)
- Inventory Planner 会计算每个 SKU 的补货点和建议订购数量,并每日更新
Shopify Analytics(内置功能,无需应用即可查看基本趋势):
- 前往 Analytics → Reports → Inventory
- “Days of inventory remaining” 报告会显示按当前售罄速度计算的库存可维持天数
- 前往 Analytics → Reports → Sales over time → 按产品分组,查看每月销售趋势
- 如果不想付费使用预测应用,可将这些数据用于手动补货决策
WooCommerce
使用 ATUM Inventory Management(提供免费层级):
- 从 WordPress.org 安装 ATUM Inventory Management for WooCommerce(免费),或购买高级版
- ATUM 会添加主库存列表视图,显示实时库存水平、每日销量和低库存提醒
- 在 ATUM → Settings → Reorder Points 中,按 SKU 配置补货点和安全库存
- ATUM 的高级版 Purchase Orders 模块会在库存达到补货点时自动生成 PO
使用 Inventory Planner for WooCommerce:
- 通过其原生 API 连接器将 Inventory Planner 连接到 WooCommerce
- 工作流与 Shopify 相同——Inventory Planner 会分析你的 WooCommerce 销售历史并生成预测
BigCommerce
使用 Inventory Planner:
- 通过 BigCommerce API 连接 Inventory Planner(Inventory Planner → Settings → Connect Store)
- Inventory Planner 会从 BigCommerce 获取销售历史并生成补货建议
BigCommerce 内置的低库存提醒:
- 前往 Products → [Product] → Inventory
- 为每件商品设置“Low stock level”——库存低于此阈值时,BigCommerce 会向你发送电子邮件
- 这只是简单提醒,并非预测——在设置好合适的预测工具之前,可将其用作后备方案
步骤 3:配置补货点和安全库存
补货点 = 交货周期内的需求量 + 安全库存缓冲。
在 Inventory Planner 中:
- Inventory Planner 会根据你的销售历史和供应商交货周期自动计算
- 在 Inventory Planner → Replenishment 中查看建议——商品按紧急程度排序(剩余库存天数与交货周期对比)
- 创建采购订单前手动调整建议(例如,如果你知道某个供应商对特定商品需要更长的交货周期)
- 直接从 Inventory Planner 导出采购订单,并通过电子邮件发送给供应商
手动计算(未使用预测工具时):
- 日均需求量 = 过去 30 天的总销量 / 30
- 安全库存 =(每日最大需求量 – 日均需求量)× 交货周期(天)
- 补货点 =(日均需求量 × 交货周期(天))+ 安全库存
- 示例: 日均需求量 = 5 件,交货周期 = 14 天,每日最大需求量 = 8 件
- 安全库存 =(8–5)× 14 = 42 件
- 补货点 =(5 × 14)+ 42 = 112 件
步骤 4:规划季节性需求
季节性是造成预测误差的最大原因。请明确做好规划。
在 Inventory Planner 中:
- 前往 Inventory Planner → Settings → Seasonality
- Inventory Planner 会根据你的销售历史自动检测季节性模式
- 对于首年经营的商家(没有往年数据):手动设置季节性乘数——例如,节日商品的 12 月需求量 = 正常需求量的 3 倍
手动创建季节日历:
- 从 Shopify Reports / WooCommerce / BigCommerce 导出过去 2 年以上的月度销售数据
- 计算每个月销售额与年度平均值的比率(12 月销售额 / 月均销售额 = 季节性指数)
- 为即将到来的旺季下单时,将季节性指数应用于日需求量预测
促销日历:
- 在预测工具中标记计划中的促销活动(限时抢购、网红营销活动)
- 大多数预测工具都允许针对特定日期范围手动调整需求量
- 对于黑色星期五/网络星期一:按历史 BFCM 拉升比例提高预测值(电商通常为 3–8 倍)
步骤 5:生成并批准补货建议
在 Inventory Planner 中:
- 前往 Inventory Planner → Replenishment → Review recommendations
- 按“Critical”(缺货时间少于交货提前期)和“Warning”(将在 2 倍交货提前期内缺货)筛选
- 如果你掌握模型未知的市场信息(计划销售、预期供应问题),请调整数量
- 点击“Create Purchase Order”——Inventory Planner 会生成要发送给供应商的 PO
- 在 Inventory Planner → Purchase Orders 中跟踪 PO 状态;收到货物后,更新实际收货日期,以改进未来的交货提前期估算
步骤 6:自定义 / 无头模式——根据销售数据预测需求
// Compute average daily demand from your order database
async function computeAverageDailyDemand(
productId: string,
lookbackDays: number = 30
): Promise<number> {
const since = new Date();
since.setDate(since.getDate() - lookbackDays);
const result = await db.raw(`
SELECT COALESCE(SUM(ol.quantity), 0) AS total_units
FROM order_lines ol
JOIN orders o ON o.id = ol.order_id
WHERE ol.product_id = ?
AND o.status NOT IN ('cancelled', 'refunded')
AND o.created_at >= ?
`, [productId, since]);
return result.rows[0].total_units / lookbackDays;
}
// Calculate reorder point with safety stock
function calculateReorderPoint(params: {
avgDailyDemand: number;
maxDailyDemand: number; // observed peak daily demand
leadTimeDays: number;
}): number {
const safetyStock = (params.maxDailyDemand - params.avgDailyDemand) * params.leadTimeDays;
return Math.ceil(params.avgDailyDemand * params.leadTimeDays + safetyStock);
}
// Generate replenishment recommendations for all active products
async function generateReplenishmentReport(): Promise<{
productId: string;
sku: string;
currentStock: number;
reorderPoint: number;
daysOfSupply: number;
urgency: 'critical' | 'warning' | 'ok';
}[]> {
const products = await db.products.findAll({ is_active: true, track_inventory: true });
const recommendations = [];
for (const product of products) {
const inventory = await db.inventory.findByProductId(product.id);
const avgDemand = await computeAverageDailyDemand(product.id, 30);
const maxDemand = await computeAverageDailyDemand(product.id, 7); // shorter window = more volatile
const leadTimeDays = product.supplier_lead_time_days ?? 14;
const reorderPoint = calculateReorderPoint({ avgDailyDemand: avgDemand, maxDailyDemand: maxDemand, leadTimeDays });
const daysOfSupply = avgDemand > 0 ? Math.floor(inventory.quantity_on_hand / avgDemand) : 999;
const urgency = daysOfSupply < leadTimeDays ? 'critical' : daysOfSupply < leadTimeDays * 2 ? 'warning' : 'ok';
if (urgency !== 'ok') {
recommendations.push({ productId: product.id, sku: product.sku, currentStock: inventory.quantity_on_hand, reorderPoint, daysOfSupply, urgency });
}
}
return recommendations.sort((a, b) => a.daysOfSupply - b.daysOfSupply);
}
最佳实践
- 在构建自定义预测之前,先使用 Inventory Planner 这类工具——每月 $100–$300 远低于工程开发成本,而且其模型比手动编写的移动平均模型更准确
- 至少积累 6 个月的销售历史数据,再相信任何预测;对于新产品,可使用品类平均需求率作为参考值
- 根据已知事件调整预测——计划中的促销、季节性活动和供应链中断都应作为手动覆盖值输入预测工具
- 每月跟踪预测准确度——将预测销量与实际销量进行比较;如果持续偏差超过 25%,请重新校准假设,或检查需求模式是否发生结构性变化
- 考虑待处理的采购订单——下新 PO 前,从建议补货数量中减去已订购数量;重复下单是常见且代价高昂的错误
常见问题
| 问题 | 解决方案 |
|---|---|
| 新产品没有可用于预测的历史数据 | 前 90 天使用品类平均需求率;Inventory Planner 提供了可对此进行调整的“new product”模式 |
| 预测未考虑供应商缺货 | 在供应商管理系统中跟踪供应商的订单满足率;如果某供应商的发货量始终只有订购数量的 80%,则多订 25% 作为补偿 |
| 安全库存过低,仍然发生缺货 | 对于高周转 SKU,将 Inventory Planner 中的服务水平设置从 90% 提高到 95–98% |
| 补货建议忽略未完成的 PO | 创建新 PO 前,务必检查“quantity on order”;Inventory Planner 会自动显示此项,但手动计算时经常会漏掉 |
相关技能
- @order-management-system
- @vendor-management
- @multi-channel-selling
评论
支持 Markdown