决策作业/ 目标库存计算
/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商品尺码满足周数预估周销安全库存目标可用缺口
[S003]盐城阜宁店K3MSA165-N01简约飘带毛衣 · 杏色S1.52.461505
[S009]芜湖新百店K3KSA184-Y12简约V领开衫 · 卡其L1.53.441505
[S014]仪征解放路店K3MSH048-N06后背纽扣小衫 · 燕麦S1.52.581505
[S036]南京城北万象汇店K3MSA127-G01时尚圆领毛衣 · 绿S1.52.331505
[S039]连云港海州万达店K3KSA195-C02假两件条纹开衫 · 咖S1.52.461505
[S054]镇江苏宁店K3KSA046-B11时尚双拉链开衫 · 藏青L1.53.721505
[S054]镇江苏宁店K3MSD108-W02拼蕾丝V领毛衣 · 米白S1.52.331505
[S065]徐州铜山万达店K3KSA203-N06海军风开衫 · 燕麦S1.52.461505
[S069]无锡滨湖万象汇店K3MSH048-N06后背纽扣小衫 · 燕麦S1.52.331505
[S012]宿迁大润发店K3KSA203-N06海军风开衫 · 燕麦S1.52.031404
[S024]南京仙林金鹰店K3SKC001-C02百搭直筒裤 · 咖XL1.52.831404
[S032]南京仙林万达茂店K3CSG021-G01时尚衬衫 · 绿XL1.53.811404
[S039]连云港海州万达店K3KSA203-N06海军风开衫 · 燕麦S1.52.211404
[S039]连云港海州万达店K3MSA116-G10一字领斜挎包毛衣 · 墨绿S1.52.091404
[S048]芜湖苏宁店K3NKC134-B01时尚弯刀牛仔裤 · 蓝XL1.52.951404
[S052]淮安华信店K3FYA153-Y12拼豹纹抽绳风衣 · 卡其S1.52.091404
[S066]南通启东吾悦店K3BXA096-C02简约百搭背心 · 咖S1.52.091404
[S001]镇江京口吾悦店K3MSA116-G10一字领斜挎包毛衣 · 墨绿XL1.51.370303
[S002]大丰大润发店K3XSA167-G01动物印花小衫 · 绿XL1.51.370303
[S005]高邮世贸金街店K1WTD158-B01休闲外套 · 蓝XL1.51.370303
[S012]宿迁大润发店K3MSA116-G10一字领斜挎包毛衣 · 墨绿XL1.51.370303
[S014]仪征解放路店K3KSA046-B11时尚双拉链开衫 · 藏青XL1.51.480303
[S016]淮安大润发店K3CSG159-C02简约短款衬衫 · 咖XL1.51.480303
[S021]扬州江都金鹰店K3MSA103-W01系带波浪纹毛衣 · 白XL1.51.370303
[S021]扬州江都金鹰店K3MSA111-G01渐变晕染毛衣 · 绿XL1.51.370303
[S021]扬州江都金鹰店K3SKC001-C02百搭直筒裤 · 咖XL1.51.370303
[S023]宿迁宿豫万达店K3CSG159-C02简约短款衬衫 · 咖XL1.51.590303
[S023]宿迁宿豫万达店K3MSA116-G10一字领斜挎包毛衣 · 墨绿XL1.51.590303
[S023]宿迁宿豫万达店K3MSA127-G01时尚圆领毛衣 · 绿XL1.51.480303
[S023]宿迁宿豫万达店K3SKA133-A04时尚阔腿裤 · 深灰F1.53.851303
[S024]南京仙林金鹰店K3KSA046-B11时尚双拉链开衫 · 藏青XS1.51.971303
[S024]南京仙林金鹰店K3XSA164-A01时尚披肩小衫 · 灰XS1.51.971303
[S024]南京仙林金鹰店K3XSA167-G01动物印花小衫 · 绿XL1.51.480303
[S024]南京仙林金鹰店K3XSE002-A02简约两件套小衫 · 浅灰XL1.51.590303
[S027]南京龙江新城市店J3MSD221-G01时尚V领毛衣 · 绿XL1.51.480303
[S028]南京江宁万达店K3MSA116-G10一字领斜挎包毛衣 · 墨绿XL1.51.480303
[S028]南京江宁万达店K3MSA165-N01简约飘带毛衣 · 杏色XL1.51.370303
[S031]蚌埠百大名品中心店K3XKD140-Y12时尚阔腿休闲裤 · 卡其XL1.52.831303
[S032]南京仙林万达茂店K3CSG021-G01时尚衬衫 · 绿F1.53.811303
[S032]南京仙林万达茂店K3DQD009-C02百搭半截裙 · 咖XS1.52.331303
[S032]南京仙林万达茂店K3NKC219-C02时尚牛仔阔腿裤 · 咖XL1.52.211303
[S033]扬州邗江吾悦店K3MSA111-G01渐变晕染毛衣 · 绿XL1.51.590303
[S035]泰州海陵万达店K3WTD149-A04简约立领外套 · 深灰XL1.51.480303
[S035]泰州海陵万达店K3XSA196-A02晕染荡领小衫 · 浅灰XL1.52.091303
[S036]南京城北万象汇店K3KSA172-B11假两件开衫 · 藏青XL1.52.211303
[S036]南京城北万象汇店K3MSA099-Y12波浪纹一字领毛衣 · 卡其XL1.51.590303
[S036]南京城北万象汇店K3MSH048-N06后背纽扣小衫 · 燕麦XL1.51.480303
[S036]南京城北万象汇店K3NKC122-B01时尚喇叭牛仔裤 · 蓝XS1.53.191303
[S037]南通圆融店K3MSA099-Y12波浪纹一字领毛衣 · 卡其XL1.51.370303
[S037]南通圆融店K3MSA116-G10一字领斜挎包毛衣 · 墨绿XL1.51.590303
上一页 第 1 / 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 天)
逐日库存快照:库存快照与流水 →「逐日快照的覆盖面」卡片 → 「观测快照 / 回推快照 / 键位完整」那几行(当前 52 天快照,其中键位完整可判定 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:保护期内不允许调出),不参与这一步。