mcpField
D
demand-forecasting

demand-forecasting

github.com/finsilabs数据与数据库60136 次安装5 天前更新
代码仓库

关于 demand-forecasting

面向商家的库存需求预测指南,利用销售历史、季节性和供应商交期规划补货。内容涵盖平台工具选择,也介绍基本计算方法。

主要功能

  1. 01按电商平台选择工具
  2. 02整理销售历史数据
  3. 03设置再订货点与安全库存
  4. 04规划季节性需求
  5. 05审核补货建议与采购订单

适用场景

  1. 01排查反复缺货或库存过剩
  2. 02为季节高峰规划库存
  3. 03自动生成补货建议

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/finsilabs/awesome-ecommerce-skills --skill demand-forecasting

安装后在 Claude Code 中输入/demand-forecasting确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

tile.json
evals/database-schema-new-product-fallback-and/
criteria.json
task.md
evals/demand-decomposition-and-time-series-for/
criteria.json
task.md
evals/reorder-point-and-safety-stock-calculati/
criteria.json
task.md

详细介绍

需求预测

概述

需求预测利用历史销售数据、季节性模式和交货周期,预测所需库存数量及补货时间。长期缺货或库存过剩通常表明,补货点是凭直觉而非数据设定的。对于大多数商家,专用库存规划工具都能处理这些问题;只有在有独特运营需求时,才需要编写自定义预测代码。

何时使用此技能

  • 长期缺货或库存过剩表明当前补货点设置不当时
  • 构建自动补货建议,以减少人工库存审核时
  • 为季节性销售高峰(黑色星期五、返校季、节日季)规划库存时
  • 拥有 12 个月以上的销售历史数据,并希望从中提取有意义的需求模式时
  • 集成供应商交货周期和采购订单工作流,实现端到端补货时

核心说明

第 1 步:确定平台并选择合适的预测工具
平台推荐工具原因
ShopifyInventory Planner(Shopify App Store)或 CogsyInventory Planner 可直接连接 Shopify,分析 12 个月以上的销售历史数据,计算补货点并生成采购订单
WooCommerceATUM Inventory Management(免费版/高级版)或 Inventory PlannerATUM 在 WooCommerce 中原生提供补货点管理;Inventory Planner 提供 WooCommerce 连接器,可进行高级预测
BigCommerceInventory Planner 或 Linnworks两者都提供 BigCommerce 原生集成,并支持多地点库存预测
多渠道Skubana(现为 Extensiv)或 Linnworks可通过单一仪表板处理 Shopify、WooCommerce、Amazon 和 eBay 的库存预测
自定义 / 无头架构在订单数据库上构建时间序列分析层根据历史销售数据使用移动平均、季节性分解和安全库存公式
第 2 步:设置销售历史数据采集

准确的预测需要干净的历史数据。运行任何预测之前:

  1. 确保销售总额中不包含已取消和已退款的订单——连接到平台后,大多数预测工具会自动处理
  2. 标记促销时段——闪购、节日销量激增和网红带来的需求应标记为异常;若不加甄别地纳入,这些数据会推高基准需求估算
  3. 基本的季节性模式检测至少需要 6 个月的历史数据;要查看同比趋势,则需要 12 个月以上
Shopify

使用 Inventory Planner:

  1. 从 Shopify App Store 安装 Inventory Planner(提供 14 天免费试用,之后每月收费 $99+)
  2. 连接后,Inventory Planner 会自动导入完整的 Shopify 销售历史数据
  3. 在 Inventory Planner → Suppliers 中添加供应商及其交货周期(例如,Supplier A = 14 天,Supplier B = 7 天)
  4. 在 Settings → Forecasting 中设置所需的服务水平(例如,95%——表示希望在 95% 的需求场景中都有库存)
  5. Inventory Planner 会计算每个 SKU 的补货点和建议订购数量,并每日更新

Shopify Analytics(内置功能,无需应用即可查看基本趋势):

  1. 前往 Analytics → Reports → Inventory
  2. “Days of inventory remaining” 报告会显示按当前售罄速度计算的库存可维持天数
  3. 前往 Analytics → Reports → Sales over time → 按产品分组,查看每月销售趋势
  4. 如果不想付费使用预测应用,可将这些数据用于手动补货决策
WooCommerce

使用 ATUM Inventory Management(提供免费层级):

  1. 从 WordPress.org 安装 ATUM Inventory Management for WooCommerce(免费),或购买高级版
  2. ATUM 会添加主库存列表视图,显示实时库存水平、每日销量和低库存提醒
  3. 在 ATUM → Settings → Reorder Points 中,按 SKU 配置补货点和安全库存
  4. ATUM 的高级版 Purchase Orders 模块会在库存达到补货点时自动生成 PO

使用 Inventory Planner for WooCommerce:

  1. 通过其原生 API 连接器将 Inventory Planner 连接到 WooCommerce
  2. 工作流与 Shopify 相同——Inventory Planner 会分析你的 WooCommerce 销售历史并生成预测
BigCommerce

使用 Inventory Planner:

  1. 通过 BigCommerce API 连接 Inventory Planner(Inventory Planner → Settings → Connect Store)
  2. Inventory Planner 会从 BigCommerce 获取销售历史并生成补货建议

BigCommerce 内置的低库存提醒:

  1. 前往 Products → [Product] → Inventory
  2. 为每件商品设置“Low stock level”——库存低于此阈值时,BigCommerce 会向你发送电子邮件
  3. 这只是简单提醒,并非预测——在设置好合适的预测工具之前,可将其用作后备方案
步骤 3:配置补货点和安全库存

补货点 = 交货周期内的需求量 + 安全库存缓冲。

在 Inventory Planner 中:

  1. Inventory Planner 会根据你的销售历史和供应商交货周期自动计算
  2. 在 Inventory Planner → Replenishment 中查看建议——商品按紧急程度排序(剩余库存天数与交货周期对比)
  3. 创建采购订单前手动调整建议(例如,如果你知道某个供应商对特定商品需要更长的交货周期)
  4. 直接从 Inventory Planner 导出采购订单,并通过电子邮件发送给供应商

手动计算(未使用预测工具时):

  • 日均需求量 = 过去 30 天的总销量 / 30
  • 安全库存 =(每日最大需求量 – 日均需求量)× 交货周期(天)
  • 补货点 =(日均需求量 × 交货周期(天))+ 安全库存
  • 示例: 日均需求量 = 5 件,交货周期 = 14 天,每日最大需求量 = 8 件
    • 安全库存 =(8–5)× 14 = 42 件
    • 补货点 =(5 × 14)+ 42 = 112 件
步骤 4:规划季节性需求

季节性是造成预测误差的最大原因。请明确做好规划。

在 Inventory Planner 中:

  1. 前往 Inventory Planner → Settings → Seasonality
  2. Inventory Planner 会根据你的销售历史自动检测季节性模式
  3. 对于首年经营的商家(没有往年数据):手动设置季节性乘数——例如,节日商品的 12 月需求量 = 正常需求量的 3 倍

手动创建季节日历:

  1. 从 Shopify Reports / WooCommerce / BigCommerce 导出过去 2 年以上的月度销售数据
  2. 计算每个月销售额与年度平均值的比率(12 月销售额 / 月均销售额 = 季节性指数)
  3. 为即将到来的旺季下单时,将季节性指数应用于日需求量预测

促销日历:

  • 在预测工具中标记计划中的促销活动(限时抢购、网红营销活动)
  • 大多数预测工具都允许针对特定日期范围手动调整需求量
  • 对于黑色星期五/网络星期一:按历史 BFCM 拉升比例提高预测值(电商通常为 3–8 倍)
步骤 5:生成并批准补货建议

在 Inventory Planner 中:

  1. 前往 Inventory Planner → Replenishment → Review recommendations
  2. 按“Critical”(缺货时间少于交货提前期)和“Warning”(将在 2 倍交货提前期内缺货)筛选
  3. 如果你掌握模型未知的市场信息(计划销售、预期供应问题),请调整数量
  4. 点击“Create Purchase Order”——Inventory Planner 会生成要发送给供应商的 PO
  5. 在 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