Pre-launch new product demand forecasting using Bass model with ML
Skill-New-Product-Inventory-Coldstart · 04-供应链
experimentforecastingpricing供应链与补货推荐与搜索定价与利润WF-A 智能补货WF-D 选品扫描WF-F 动态定价
实现难度⭐⭐⭐☆☆
业务视角
适用角色供应链负责人 · 采购负责人 · CEO / 运营 VP
适用平台Amazon FBA · 海外仓 · 多国仓位(美/欧/日)
什么情况下用库存周转率低,资金压在海外仓出不来;SKU 断货紧急空运,物流成本吃掉毛利;多仓库存分布不均
成功是什么样的库存周转天数从 90 天降到 60 天,断货率 <3%,海外仓综合成本降低 15-25%
业务痛点
1. 解决的问题
核心思想:新品上市前无历史销量,但不是无信息——相似 SKU 的历史数据、产品属性特征、Bass 扩散参数估计三条路径可以构建新品的需求先验分布。上市后用贝叶斯更新快速收敛,并通过「探索加成」(首批量刻意多订一点以加速学习)避免因首批订少而永久缺乏数据的陷阱。
2. 核心算法逻辑
核心思想:新品上市前无历史销量,但不是无信息——相似 SKU 的历史数据、产品属性特征、Bass 扩散参数估计三条路径可以构建新品的需求先验分布。上市后用贝叶斯更新快速收敛,并通过「探索加成」(首批量刻意多订一点以加速学习)避免因首批订少而永久缺乏数据的陷阱。
3. 业务应用场景
场景 A:新款 UV-C 密闭消毒器上市首批备货(强相似 SKU 存在)
- 业务问题:全新 SKU「UV-C Pro X200」即将上市,lead time 6 周(需提前 6 周锁定首批量)。类比品:已有 UV-C Pro X100(上市 8 个月,月均销量 320 件,系数变异 CV=35%)。 - 预期产出: - 业务价值:相比"按均值订320件"的短视策略,贝叶斯策略在高不确定性场景下减少缺货损失约 $8,000-$15,000(前 6 周)
场景 B:全新品类(无历史类比SKU)—— Bass 参数估计
4. 输入数据要求
请查看原始代码模板获取输入规格。
5. 输出结果
请查看原始代码模板获取输出规格。
6. 业务价值 / ROI
- ROI 预估:
- Ban et al. 实证:忽略协变量 → 成本上升 6-15%,换算 $50K 首批采购 = 节省 $3,000-$7,500
- Keskin 探索加成:避免短视策略在高不确定性场景的"任意大损失",实践估算避免缺货损失 $8,000-$15,000
- 年均 3-4 个新品上市:年化价值 $33,000-$90,000
- 实施难度:⭐⭐⭐☆☆(3/5)— 需要历史 SKU 数据整理和相似度建模
- 优先级评分:⭐⭐⭐⭐☆(4/5)— 高风险决策,但频率低于日常补货
7. 代码模板
代码块数量:7 · 路径:paper2skills-code/supply_chain/new_product_inventory_coldstart
"""
Skill-New-Product-Inventory-Coldstart
基于 Ban, Gallien & Mersereau M&SOM 2019 (类比SKU残差树) +
Keskin, Li & Song OR 2023 (Bayesian探索加成) +
Lee et al. TF&SC 2014 (Bass参数ML估计)
母婴跨境 DTC 新品冷启动库存策略
"""
import numpy as np
from dataclasses import dataclass
from scipy import stats
from scipy.optimize import minimize_scalar
@dataclass
class AnalogSKU:
sku_id: str
monthly_sales: list[float]
unit_price: float
category: str
launch_month: int
price_tier: str
@property
def demand_mean(self) -> float:
return float(np.mean(self.monthly_sales))
@property
def demand_std(self) -> float:
return float(np.std(self.monthly_sales))
@property
def cv(self) -> float:
return self.demand_std / max(self.demand_mean, 1)
@dataclass
class NewProductSpec:
sku_id: str
unit_price: float
category: str
price_tier: str
launch_month: int
lead_time_months: float = 1.5
holding_cost_rate: float = 0.20
stockout_cost_multiplier: float = 2.0
def find_analog_skus(
new_product: NewProductSpec,
catalog: list[AnalogSKU],
n_analogs: int = 3,
) -> list[tuple[AnalogSKU, float]]:
"""
按相似度匹配类比 SKU(Ban et al. 协变量回归的简化版)。
相似度 = 类别匹配 × 价格段距离 × 上市季节对齐
"""
scored = []
for sku in catalog:
sim = 0.0
8. 论文来源
未自动抽取;请查看原始 Skill 卡片。