决策作业/ 目标库存计算
/goal/calc 83/83 接口已实现
v0.1.0 覆盖矩阵 报表 问题反馈
鉴权未开启登录改密码

目标库存计算

满足周数分档 + 安全库存,逐「门店×SKC×尺码」计算

批次日
2026-09-21
另有 1 个更早批次日(可切换)
目标库存合计
7845件
现有可用合计
14542件
缺口合计
6180件
覆盖组合
6315个
明细 37890 行
i目标库存**按批次日分批**:跑一次「一键跑完」写一天(预测批次日)。本页默认显示最新批次日 2026-09-21,用下面的日期切换看历史批次;旧批次不会被覆盖(那是历史快照)。

计算口径

目标库存 = 预估周销量 × 满足周数系数 + 安全库存
满足周数系数按场景分档:常规 1 周 / 全国 TOP20 款 1.5 周 / 新品(7 天内到店)1.5 周 / 标杆店 TOP10 款 2 周 / 节假日 TOP20 款 3 周
安全库存 = 预估周销量 × 0.3,上限 3 件
约束不参与目标库存计算,只影响计算后的库存流向选择。

目标库存明细

批次日 2026-09-21 · 按缺口降序 · 共 37890 行
门店SKC商品尺码满足周数预估周销安全库存目标可用缺口
[S037]南通圆融店K3MSH048-N06后背纽扣小衫 · 燕麦L1.52.71303
[S037]南通圆融店K3MSH048-N06后背纽扣小衫 · 燕麦S1.52.71303
[S037]南通圆融店K3XSA144-W02撞色披肩小衫 · 米白XL1.51.480303
[S038]马鞍山金鹰店K3KSA203-N06海军风开衫 · 燕麦XL1.51.370303
[S039]连云港海州万达店K3DQD009-C02百搭半截裙 · 咖XL1.52.211303
[S039]连云港海州万达店K3MSH062-N06喇叭袖针织小衫 · 燕麦XL1.51.590303
[S039]连云港海州万达店K3NKC025-B01时尚牛仔喇叭裤 · 蓝S1.53.691523
[S039]连云港海州万达店K3WTD078-C02时尚短款外套 · 咖XS1.52.331303
[S039]连云港海州万达店K3XSA196-A02晕染荡领小衫 · 浅灰XS1.52.331303
[S039]连云港海州万达店K3XSB131-C01荷叶边宽松小衫 · 咖啡色XL1.51.370303
[S040]南京虹悦城店K3MJG102-C02时尚三角披肩 · 咖XL1.51.480303
[S040]南京虹悦城店K3MSH062-N06喇叭袖针织小衫 · 燕麦XL1.51.370303
[S040]南京虹悦城店K3SKC001-C02百搭直筒裤 · 咖XL1.53.321303
[S044]南通通州万达店K3KSA119-C02时尚开衫两件套 · 咖L1.52.761303
[S044]南通通州万达店K3KSA119-C02时尚开衫两件套 · 咖S1.52.761303
[S048]芜湖苏宁店K3MSH048-N06后背纽扣小衫 · 燕麦XL1.51.480303
[S049]马鞍山星悦店K3BXA096-C02简约百搭背心 · 咖XL1.51.370303
[S053]镇江丹徒宝龙店K3MSH048-N06后背纽扣小衫 · 燕麦XL1.51.370303
[S053]镇江丹徒宝龙店K3MSH062-N06喇叭袖针织小衫 · 燕麦XL1.51.480303
[S054]镇江苏宁店K3DQD006-C09时尚短款半裙 · 棕色XL1.52.331303
[S054]镇江苏宁店K3NKC122-B01时尚喇叭牛仔裤 · 蓝XS1.52.331303
[S054]镇江苏宁店K3WTD078-C02时尚短款外套 · 咖L1.53.071303
[S060]合肥包河万象汇店K3SKC013-A04时尚屁帘直筒裤 · 深灰XL1.52.461303
[S060]合肥包河万象汇店K3TXA045-G01木耳边T恤 · 绿XL1.52.131303
[S062]南京马群大融城店K3NKC219-C02时尚牛仔阔腿裤 · 咖XS1.52.581303
[S062]南京马群大融城店K3XKD140-Y12时尚阔腿休闲裤 · 卡其XS1.52.331303
[S063]南京建邺金陵天地店K3WTD162-C02时尚翻领短外套 · 咖XS1.52.581303
[S063]南京建邺金陵天地店K3XSA167-G01动物印花小衫 · 绿XL1.51.370303
[S064]淮安万象城店K3XKD140-Y12时尚阔腿休闲裤 · 卡其XL1.52.091303
[S064]淮安万象城店K3XSA164-A01时尚披肩小衫 · 灰XS1.52.331303
[S065]徐州铜山万达店K3DQD009-C02百搭半截裙 · 咖XL1.51.971303
[S066]南通启东吾悦店K3XSA196-A02晕染荡领小衫 · 浅灰XL1.52.211303
[S069]无锡滨湖万象汇店K3DQB136-G01时尚百褶半裙 · 绿XL1.51.590303
[S001]镇江京口吾悦店K3SKA133-A04时尚阔腿裤 · 深灰F1.50.80202
[S002]大丰大润发店J3NKC163-J02阔腿喇叭牛仔裤 · 深蓝牛仔色F1.50.680202
[S002]大丰大润发店J4XSA207-C02撞色边小衫 · 咖F1.51.030202
[S002]大丰大润发店K3KSA179-C02撞色条开衫 · 咖XL1.51.971202
[S003]盐城阜宁店K2NKC004-B01休闲弯刀牛仔裤 · 蓝F1.50.80202
[S003]盐城阜宁店K3MSA127-G01时尚圆领毛衣 · 绿F1.51.030202
[S003]盐城阜宁店K3TZA129-A01简约半裙套装 · 灰XL1.51.971202
[S005]高邮世贸金街店K1XKB144-B11腰头撞色休闲裤 · 藏青M1.51.250202
[S005]高邮世贸金街店K2XSA078-B11时尚格纹小衫 · 藏青F1.50.680202
[S005]高邮世贸金街店K3CSB016-W01百搭翻领衬衫 · 白F1.51.250202
[S005]高邮世贸金街店K3CSG021-G01时尚衬衫 · 绿XL1.52.581202
[S005]高邮世贸金街店K3DQD009-C02百搭半截裙 · 咖XS1.51.370202
[S005]高邮世贸金街店K3FYA192-C02领带长款风衣 · 咖F1.51.030202
[S005]高邮世贸金街店K3MSH062-N06喇叭袖针织小衫 · 燕麦S1.51.971202
[S005]高邮世贸金街店K3MSH062-N06喇叭袖针织小衫 · 燕麦XL1.51.971202
[S005]高邮世贸金街店K3SKA189-C02时尚阔腿裤 · 咖XS1.52.091202
[S005]高邮世贸金街店K3TZA129-A01简约半裙套装 · 灰L1.52.091202
上一页 第 2 / 758 页 下一页

数据流水线(原始销量 → 清洗 → 预测 → 目标库存)

三段依次依赖;每段可单独重跑,重复跑不会产生重复行;都是后台执行 + 进度可见
加载中…
为什么会"跑很久":销量涨到几十万行之后,清洗一段就要 约 1 分钟(生产实测 53.7 万行 / 55 秒)—— 所以这些按钮走的是后台任务 + 进度(POST /api/data-pipeline/start + GET /api/data-pipeline/progress/:token 轮询,不是同步等结果):关掉窗口也会继续跑, 刷新页面回来还能看到(进度会存下来,服务重启后也能看到上次跑到哪一段、每段多少行)。
注意:清洗这一段是同步 SQLite 计算,跑的时候进度条不会跳动、页面其它请求也会变慢几十秒; 一段跑完就立刻更新,进度里能看到每段的行数与耗时。
同步接口 POST /api/data-pipeline/run-all 仍保留(脚本用;要后台跑传 background:true),但它在大库上**会被代理的 60s 读超时切成 504**,页面不用它。

这三步各自用到了什么(当前生效的参数与口径)

避免"改了参数不知道哪一步受影响"
步骤这一步的输入用到的记录:去哪个页面 → 哪张卡片 → 哪一条(含当前值)产出(去哪看)口径
① 清洗① 原始销量明细(门店 × 款色 × 尺码,POS 来的) ② 节假日/活动倍率 ③ 逐日库存快照原始销量:取数作业 →「取数作业」卡片 → 销售流水(#28)那一条作业取回来的数据(当前 537731 行,2024-09-24 ~ 2026-09-21)
节假日 / 活动备货倍率:节假日与活动 →「节假日与活动日历」卡片 → 每个日期那一行的「备货倍率」「提前天数」两列(共 5 条,命中本次销量窗口 15 天)
逐日库存快照:库存快照与流水 →「逐日快照的覆盖面」卡片 → 「观测快照 / 回推快照 / 键位完整」那几行(当前 53 天快照,其中键位完整可判定 14 天)
这一步不读任何模型参数:去 模型参数 →「模型约束参数」卡片改值不会改变清洗结果
销量清洗与还原 →「清洗明细」卡片
当前 516988 行
清洗值 = 原始 ÷ 备货倍率(倍率 <1 不放大);断货日 = max(原值, 窗口内「有货且 >0」的日均);快照缺键的天一律不改动
② 预测① 清洗后的销量(516988 行)近 7 天 / 近 7-14 天权重:预测模型 →「预测相关参数」卡片 → 参数键 sale_weight.recent7(= 0.4)与 sale_weight.recent714(= 0.6)那两行 (同一对参数在 模型参数 →「模型约束参数」卡片里也有,改哪边都一样)
分档校准系数:准确度回溯 →「① 零膨胀校准(按预测档学系数与区间)」卡片 → 该卡片的拟合日期 / 硬零阈值 / 各档 k(拟合于 2026-09-25,硬零阈值 5%,3 档有分位区间)
这一步能不能跑(门禁):算法治理 →「算法登记册」卡片 → 编号 ALGO-FC-01「需求预测」那一行的「状态」(显示「停用」时这一步会直接拒绝执行)
准确度回溯 的回测对照
当前 6407 行预测
预估周销 = 近7天 × 0.4 + 近7-14天 × 0.6;再按预测档 ×k、区间 = 校准后值 × q10/q90
③ 目标库存② 的预测值(6407 行)满足周数 5 档:模型参数 →「模型约束参数」卡片 → 参数键 weeks_supply.normal(= 1.5)、.top20(= 1.5)、.benchmark_store(= 2)、.new_item(= 1.5)、.holiday_top20(= 3)那 5 行
安全库存基数:同一张卡片 → 参数键 safety_stock.base 那一行(当前 0~3,取上界)
门店等级 / 库容 / 陈列容量:门店档案 →「门店档案」卡片 → 该门店那一行的这几列
吊牌价 / 上市日:商品档案 →「商品档案」卡片 → 该 SKC 那一行的这几列
尺码组 / 主码:尺码组 →「尺码组」卡片 → 该款所属那一条
门店在库 / 可用:门店库存 →「门店库存」卡片 → 该门店那一行的「在库 / 可用」两列
这一天算不算节假日档:节假日与活动 →「节假日与活动日历」卡片 → 覆盖该日期的那一条记录(它决定取哪一档满足周数)
这一步能不能跑(门禁):算法治理 →「算法登记册」卡片 → ALGO-GI-01「目标库存」那一行的「状态」
目标库存计算 →「目标库存明细」卡片目标库存 = 预估周销 × 满足周数 + min(安全库存基数, 预估周销 × 0.3);缺口 = ⌈目标 − 门店可用⌉(差 0.1 件也补 1 件)
· 清洗只吃三样东西:取数作业取回的原始销量、节假日与活动「节假日与活动日历」卡片里的倍率、 库存快照与流水「逐日快照的覆盖面」卡片里的逐日快照,不读任何模型参数 —— 所以改参数不会改变清洗结果; 断货还原的"基准日均"取的是**本次清洗窗口**内该店该款「有货且清洗值>0」的天,窗口变了基准就变(这也是我们不按日期分块跑的原因)。
· 预测只有两个参数(预测模型「预测相关参数」卡片里的 sale_weight 那两行)+ 一套校准系数(准确度回溯「① 零膨胀校准」卡片); 节假日/活动倍率**不由预测直接乘**,它已经在①里折进清洗值,再通过满足周数档影响③。
· 目标库存用 5 个满足周数档 + 1 个安全库存基数(都在 模型参数「模型约束参数」卡片里逐行可见、可改); 陈列/库容约束不在这一步 —— 它配在 模型参数「陈列与库容约束」卡片,判定发生在决策批次, 所以这里算出的目标库存可能高于门店陈列上限 —— 超出部分会在决策阶段被"不允许补货入"拦掉。
· 别把两个"新品窗口"搞混:这一步判定"新品档"用的是代码常量 7 天(对应参数名里的「7 天内到店」, 用于取 模型参数「模型约束参数」卡片里 weeks_supply.new_item 那一行); 而同一张卡片里的 protect.new_item_days(当前 10 天)、 protect.new_store_days(10 天)、protect.transfer_days(10 天) 是决策阶段的保护期参数(约束 C-01/C-02/C-03:保护期内不允许调出),不参与这一步。