P paper2skillsPlaybook
AI 路线图 →

库龄分段管理与资金成本化 — 库存账龄结构诊断、持有成本精算与阶梯清仓触发

Skill-Inventory-Aging-Cost-Management · 04-供应链

causalexperimentforecastingoptimizationragfraud_detectionpricing广告与投放供应链与补货知识图谱与RAG定价与利润风控与合规WF-A 智能补货WF-B 广告优化WF-D 选品扫描WF-F 动态定价WF-I 智能体工程WF-K 全域风险防御WF-L 内容营销增长
实现难度⭐⭐☆☆☆
业务优先级⭐⭐⭐⭐⭐
业务视角
适用角色供应链负责人 · 采购负责人 · CEO / 运营 VP
适用平台Amazon FBA · 海外仓 · 多国仓位(美/欧/日)
什么情况下用库存周转率低,资金压在海外仓出不来;SKU 断货紧急空运,物流成本吃掉毛利;多仓库存分布不均
成功是什么样的库存周转天数从 90 天降到 60 天,断货率 <3%,海外仓综合成本降低 15-25%
业务痛点
库存周转天数太长资金压死了断货了只能空运救急成本爆了多市场库存分配不均

1. 解决的问题

卖家只看"总库存量"不知道其中多少是"时间炸弹"——四段库龄成本精算将90天+高危库存年额外持有成本$9.2/件可视化,主动清仓比被动等待多回收$4250/批(250件规模)

2. 核心算法逻辑

业务背景(陈凤霞实战经验):书中第7章专节阐述健康库存系统的核心要素:库存可视层必须包含"库龄明细",将库存按入库时间分段(030天、3160天、6190天、91180天、180天+),每一段对应不同的风险等级和处置优先级。书中强调:库龄不是一个数字,而是一面镜子——照出选品决策、补货计划、促销执行的真实质量。

3. 业务应用场景

场景A:FBA库存库龄结构诊断与清仓优先级规划

- 业务问题:某母婴卖家FBA有2000件存货,感觉库存"挺多的",但月销只有400件。不知道哪些是新货、哪些是老货,也不知道清哪些能最快释放资金 - 数据要求:FBA库龄报告(Amazon后台可下载,字段:ASIN/FNSKU/库龄区间/数量)、SKU采购成本、历史销量 - 算法应用: 1. 拉取FBA库龄报告,按四段分类:0-30天=800件(40%),31-60天=600件(30%),61-90天=350件(17.5%),90天+=250件(12.5%) 2. 精算各段持有成本:以吸奶器为例,61-90天段已累计持有成本$4.5/件,90天+累计$9.2/件 3. 风险评分:250件90

场景B:季节性品类库龄主动管理(婴儿防晒)

4. 输入数据要求

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

5. 输出结果

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

6. 业务价值 / ROI

  • ROI 预估:100件91-180天高危库存(采购成本$38/件),提前60天清仓vs自然到期处置,每件多回收约$12,总多回收$1200;每月处理2-3批这样的批次,年化额外回收$30000+;系统建设成本$2万,ROI≈150%+(首年),后续年ROI远高于此
  • 实施难度:⭐⭐☆☆☆(Amazon FBA库龄报告直接可下载,数据基础完善;主要工作是建立触发规则和自动提醒机制)
  • 优先级:⭐⭐⭐⭐⭐(所有有FBA库存的卖家必备,Amazon已提供库龄报告,但绝大多数卖家没有系统化行动机制)
  • 适用规模:FBA在架SKU>20个的卖家,所有规模均适用
  • 数据依赖:Amazon FBA库龄报告(Seller Central > Inventory > FBA Inventory Age)、SKU采购成本、历史日销量

7. 代码模板

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

"""
库龄分段管理与资金成本化系统
功能:四段库龄分析 + 持有成本精算 + 风险评分 + 阶梯清仓触发
"""
import numpy as np
import pandas as pd
from dataclasses import dataclass, field
from typing import List, Dict, Tuple, Optional
from datetime import datetime, timedelta
import warnings
warnings.filterwarnings('ignore')


# ─── 库龄分段标准 ───────────────────────────────────────────────
AGING_SEGMENTS = {
    'FRESH':    (0,  30,  '🟢新鲜',   0.0,  '正常流通,无需干预'),
    'WATCH':    (31, 60,  '🔵观察',   0.30, '销速低于50%时检查竞品价格'),
    'ALERT':    (61, 90,  '🟡预警',   0.60, '触发优惠券-15% + 广告加投'),
    'DANGER':   (91, 180, '🟠高危',   0.80, '折扣-30%~40% + Deal申请'),
    'DEAD':     (181, 999,'🔴死库',   1.00, '批量出售/销毁/捐赠非常规处置'),
}

# 清仓行动规则
CLEARANCE_RULES = {
    'WATCH':  {'discount': 0.05, 'action': '小幅降价5%,增加SP广告'},
    'ALERT':  {'discount': 0.15, 'action': '优惠券-15% + 站内促销'},
    'DANGER': {'discount': 0.35, 'action': '大折扣+Deal申请+Bundle打包'},
    'DEAD':   {'discount': 0.55, 'action': '批量出售清仓商或销毁申报'},
}


@dataclass
class AgingBatch:
    """库龄批次"""
    sku_id: str
    batch_id: str
    quantity: int
    inbound_date: datetime
    unit_cost: float            # 采购成本($)
    current_price: float        # 当前售价($)
    daily_storage_fee: float    # 日均仓储费/件($)
    capital_cost_rate_annual: float = 0.20  # 资金年化成本率
    shrinkage_rate_annual: float = 0.008    # 年化损耗率

    @property
    def aging_days(self) -> int:
        return (datetime.now() - self.inbound_date).days

    @property
    def daily_holding_cost(self) -> float:
        capital = self.unit_cost * self.capital_cost_rate_annual / 365
        shrinkage = self.unit_cost * self.shrinkage_rate_annual / 365
        return capital + self.daily_storage_fee + shrinkage

    @property
    def cumulative_holding_cost(self) -> float:
        return self.daily_holding_cost * self.aging_days

    @property
    def net_residual_value(self) -> float:

8. 论文来源

  • 2402.09812