决策作业/ 目标库存计算
/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商品尺码满足周数预估周销安全库存目标可用缺口
[S005]高邮世贸金街店K3TZA129-A01简约半裙套装 · 灰XS1.52.091202
[S005]高邮世贸金街店K3XKD140-Y12时尚阔腿休闲裤 · 卡其F1.53.071202
[S005]高邮世贸金街店K3XKD140-Y12时尚阔腿休闲裤 · 卡其XL1.53.071202
[S005]高邮世贸金街店K3XSA196-A02晕染荡领小衫 · 浅灰F1.51.841202
[S005]高邮世贸金街店K3XSE002-A02简约两件套小衫 · 浅灰F1.51.250202
[S009]芜湖新百店K3KSA184-Y12简约V领开衫 · 卡其S1.53.441202
[S009]芜湖新百店K3MSA099-Y12波浪纹一字领毛衣 · 卡其S1.51.841202
[S009]芜湖新百店K3MSA099-Y12波浪纹一字领毛衣 · 卡其XL1.51.841202
[S009]芜湖新百店K3MSA116-G10一字领斜挎包毛衣 · 墨绿F1.51.030202
[S009]芜湖新百店K3MSA127-G01时尚圆领毛衣 · 绿F1.51.030202
[S009]芜湖新百店K3TZA129-A01简约半裙套装 · 灰F1.50.80202
[S009]芜湖新百店K3XKC032-Y12设计感弯刀裤 · 卡其XL1.51.971312
[S011]宿迁宿城吾悦店K2NKC004-B01休闲弯刀牛仔裤 · 蓝F1.50.680202
[S011]宿迁宿城吾悦店K3DQB136-G01时尚百褶半裙 · 绿F1.51.250202
[S011]宿迁宿城吾悦店K3DQD009-C02百搭半截裙 · 咖XS1.52.581202
[S011]宿迁宿城吾悦店K3FYA152-G10抽绳丝巾短风衣 · 墨绿F1.51.030202
[S011]宿迁宿城吾悦店K3KSA202-N02撞色边开衫 · 米F1.51.030202
[S011]宿迁宿城吾悦店K3MSH048-N06后背纽扣小衫 · 燕麦F1.51.030202
[S011]宿迁宿城吾悦店K3SKC001-C02百搭直筒裤 · 咖XL1.51.971202
[S011]宿迁宿城吾悦店K3WTD149-A04简约立领外套 · 深灰F1.51.030202
[S012]宿迁大润发店J3XSE078-A04撞色两件套小衫 · 深灰S1.51.841202
[S012]宿迁大润发店J3XSE078-A04撞色两件套小衫 · 深灰XL1.51.841202
[S012]宿迁大润发店K3DQD009-C02百搭半截裙 · 咖F1.50.680202
[S012]宿迁大润发店K3MSH048-N06后背纽扣小衫 · 燕麦F1.51.140202
[S013]通州大润发店K2XKC161-N01抽绳百搭休闲裤 · 杏色F1.50.680202
[S013]通州大润发店K3XKD140-Y12时尚阔腿休闲裤 · 卡其XL1.52.71202
[S013]通州大润发店K3XKD140-Y12时尚阔腿休闲裤 · 卡其XS1.52.71202
[S014]仪征解放路店J4KSA138-B11假两件开衫 · 藏青F1.51.140202
[S014]仪征解放路店K3DQD186-C02优雅半截裙 · 咖F1.51.030202
[S014]仪征解放路店K3MSA116-G10一字领斜挎包毛衣 · 墨绿F1.51.140202
[S014]仪征解放路店K3XSA196-A02晕染荡领小衫 · 浅灰XL1.51.841202
[S015]镇江万达店K3SKA133-A04时尚阔腿裤 · 深灰F1.50.80202
[S016]淮安大润发店J3NKC131-B01裤脚磨边牛仔裤 · 蓝M1.51.140202
[S016]淮安大润发店J3NKC166-J02时尚喇叭裤 · 深蓝牛仔色F1.50.680202
[S016]淮安大润发店K3KSA172-B11假两件开衫 · 藏青XL1.51.480202
[S016]淮安大润发店K3MSA111-G01渐变晕染毛衣 · 绿F1.51.140202
[S016]淮安大润发店K3MSH069-N06优雅针织小衫 · 燕麦F1.51.140202
[S016]淮安大润发店K3WTD107-C01简约休闲外套 · 咖啡色F1.51.590202
[S016]淮安大润发店K3WTD149-A04简约立领外套 · 深灰F1.51.140202
[S019]南京江北大洋店K3MSH069-N06优雅针织小衫 · 燕麦F1.51.030202
[S021]扬州江都金鹰店K3DQD009-C02百搭半截裙 · 咖XS1.51.590202
[S021]扬州江都金鹰店K3MJG102-C02时尚三角披肩 · 咖F1.51.030202
[S023]宿迁宿豫万达店K3DQD009-C02百搭半截裙 · 咖XL1.52.211202
[S023]宿迁宿豫万达店K3DQD072-G01时尚格纹半截裙 · 绿F1.50.910202
[S023]宿迁宿豫万达店K3FYA197-Y12翻袖中长款风衣 · 卡其F1.51.310202
[S023]宿迁宿豫万达店K3KSA204-N06简约圆领开衫 · 燕麦F1.51.250202
[S023]宿迁宿豫万达店K3MSH048-N06后背纽扣小衫 · 燕麦F1.51.250202
[S023]宿迁宿豫万达店K3SKA169-C02百搭时装裤 · 咖XS1.52.331202
[S024]南京仙林金鹰店K2NKC090-B01亮钻牛仔喇叭裤 · 蓝F1.50.680202
[S024]南京仙林金鹰店K2PSPA04-W01百搭背心 · 白F1.50.680202
上一页 第 3 / 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:保护期内不允许调出),不参与这一步。