P paper2skillsPlaybook
AI 路线图 →

售罄率精细化KPI体系 — 大促/新品/季节性多口径售罄率计算与库存水位判断

Skill-Sell-Through-Rate-Promo-Inventory · 04-供应链

causalexperimentoptimization供应链与补货WF-A 智能补货WF-D 选品扫描WF-G Listing内容优化
年化 ROI20-40万元
实现难度⭐⭐☆☆☆
业务视角
适用角色供应链负责人 · 采购负责人 · CEO / 运营 VP
适用平台Amazon FBA · 海外仓 · 多国仓位(美/欧/日)
什么情况下用库存周转率低,资金压在海外仓出不来;SKU 断货紧急空运,物流成本吃掉毛利;多仓库存分布不均
成功是什么样的库存周转天数从 90 天降到 60 天,断货率 <3%,海外仓综合成本降低 15-25%
业务痛点
库存周转天数太长资金压死了断货了只能空运救急成本爆了多市场库存分配不均

1. 解决的问题

大促运营面临"不知道备货成不成功"——跨境售罄率50-60%目标+有无预售两种口径,精确复盘指导下次减少滞销损失20-40万元

2. 核心算法逻辑

售罄率(SellThrough Rate, STR) 是陈凤霞书中评价备货质量和库存计划准确性的综合检验指标。售罄率不是一个单一数字,需要按场景精确区分口径:

3. 业务应用场景

场景A:Black Friday吸奶器备货回顾 - 业务问题:Black Friday结束,仓库剩余大量库存,但不知道卖了多少算"成功" - 数据要求:BF前可售良品库存(按SKU)+ BF期间实际销售量 + 有无预售订单 - 预期产出: - 旗舰款STR = 72%(✅ 跨境50-60%目标之上,偏高) - 配件套装STR = 38%(⚠️ 严重积压,需双12加大促销力度) - A2奶粉STR = 55%(✅ 正常,双12继续销售) - 整体备货评价:旗舰款备货稍少,配件备多了 - 业务价值:复盘指导下次大促备货策略,减少滞销金额约20万元

**场景B:新品辅食机首单售罄率追踪** - **业务问题**:新品辅食机首批500台,3个月后评估是否追单,需要量化"首单是否成功" - **数据要求**:首批到货时间 + 3个月内累计销售量 - **预期产出**:3个月STR = 52%(低于60%目标)→ 建议谨慎追单,先优化Listing提升转化率 - **业务价值**:避免新品失败追单导致更大库存积压,按案例节省约15万元滞销损失

4. 输入数据要求

请查看原始代码模板获取输入规格。

5. 输出结果

请查看原始代码模板获取输出规格。

6. 业务价值 / ROI

  • ROI预估:精确追踪售罄率后,下次大促备货精准度提升15%,年化减少积压滞销损失约20-40万元;新品首单STR管控减少失败新品追单损失约10-15万元
  • 实施难度:⭐⭐☆☆☆(计算简单,关键是口径统一:有无预售必须分开处理)
  • 优先级评分:⭐⭐⭐⭐⭐(陈凤霞:"售罄率是采购和库存计划质量的综合检验,比任何单一KPI都更直接")
  • 评估依据:跨境目标50-60%(陈凤霞书)vs 国内60-80%,差异来源于跨境大促后续销售机会更多

7. 代码模板

代码块数量:1 · 路径:未检测到

"""
售罄率精细化 KPI 体系
功能:大促STR / 新品STR / 季节性STR / 有无预售两种口径 / 行业对标 / 库存行动建议
输入:备货量 + 销售量 + 预售数量
输出:STR KPI报告 + 库存诊断 + 下次备货建议
"""
import numpy as np
import pandas as pd
import warnings
warnings.filterwarnings('ignore')


def generate_promo_inventory_data(n_skus=30, seed=42):
    """生成模拟大促库存与销售数据"""
    np.random.seed(seed)
    
    categories = ['吸奶器旗舰', '吸奶器入门', '吸奶器配件', 'A2奶粉900g', '辅食机', '婴儿湿巾100片']
    
    records = []
    for i in range(n_skus):
        cat = np.random.choice(categories)
        
        # 备货量(基于销售计划)
        base_stock = np.random.randint(100, 2000)
        has_presale = np.random.random() < 0.3  # 30%有预售
        presale_qty = int(base_stock * np.random.uniform(0.05, 0.20)) if has_presale else 0
        available_stock = base_stock - presale_qty
        
        # 模拟真实STR(不同品类不同水平)
        true_str = {
            '吸奶器旗舰': np.random.uniform(0.55, 0.80),
            '吸奶器入门': np.random.uniform(0.45, 0.65),
            '吸奶器配件': np.random.uniform(0.25, 0.55),
            'A2奶粉900g': np.random.uniform(0.48, 0.65),
            '辅食机': np.random.uniform(0.35, 0.70),
            '婴儿湿巾100片': np.random.uniform(0.55, 0.80),
        }[cat]
        
        actual_sales = round(available_stock * true_str)
        remaining = available_stock - actual_sales + presale_qty  # 大促后剩余(含预售出货后回库)
        
        records.append({
            'sku_id': f'SKU-{i+1:03d}',
            'category': cat,
            'stock_before_promo': base_stock,
            'presale_qty': presale_qty,
            'available_stock': available_stock,  # 可用于STR计算的分母
            'actual_sales': actual_sales,
            'remaining_stock': max(0, base_stock - actual_sales),
            'str_raw': actual_sales / max(1, available_stock),
            'has_presale': has_presale,
        })
    
    return pd.DataFrame(records)


def compute_sell_through_rates(df, promo_type='大促(跨境)', channel='cross_border'):
    """计算各口径售罄率"""
    print("=" * 65)
    print(f"【售罄率 KPI 分析 — {promo_type}】")

8. 论文来源

  • 2310.09234