目标库存计算
满足周数分档 + 安全库存,逐「门店×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 件
约束不参与目标库存计算,只影响计算后的库存流向选择。
满足周数系数按场景分档:常规 1 周 / 全国 TOP20 款 1.5 周 / 新品(7 天内到店)1.5 周 / 标杆店 TOP10 款 2 周 / 节假日 TOP20 款 3 周
安全库存 = 预估周销量 × 0.3,上限 3 件
约束不参与目标库存计算,只影响计算后的库存流向选择。
目标库存明细
批次日 2026-09-21 · 按缺口降序 · 共 37890 行| 门店 | SKC | 商品 | 尺码 | 满足周数 | 预估周销 | 安全库存 | 目标 | 可用 | 缺口 |
|---|---|---|---|---|---|---|---|---|---|
| [S003]盐城阜宁店 | K3MSA165-N01 | 简约飘带毛衣 · 杏色 | S | 1.5 | 2.46 | 1 | 5 | 0 | 5 |
| [S009]芜湖新百店 | K3KSA184-Y12 | 简约V领开衫 · 卡其 | L | 1.5 | 3.44 | 1 | 5 | 0 | 5 |
| [S014]仪征解放路店 | K3MSH048-N06 | 后背纽扣小衫 · 燕麦 | S | 1.5 | 2.58 | 1 | 5 | 0 | 5 |
| [S036]南京城北万象汇店 | K3MSA127-G01 | 时尚圆领毛衣 · 绿 | S | 1.5 | 2.33 | 1 | 5 | 0 | 5 |
| [S039]连云港海州万达店 | K3KSA195-C02 | 假两件条纹开衫 · 咖 | S | 1.5 | 2.46 | 1 | 5 | 0 | 5 |
| [S054]镇江苏宁店 | K3KSA046-B11 | 时尚双拉链开衫 · 藏青 | L | 1.5 | 3.72 | 1 | 5 | 0 | 5 |
| [S054]镇江苏宁店 | K3MSD108-W02 | 拼蕾丝V领毛衣 · 米白 | S | 1.5 | 2.33 | 1 | 5 | 0 | 5 |
| [S065]徐州铜山万达店 | K3KSA203-N06 | 海军风开衫 · 燕麦 | S | 1.5 | 2.46 | 1 | 5 | 0 | 5 |
| [S069]无锡滨湖万象汇店 | K3MSH048-N06 | 后背纽扣小衫 · 燕麦 | S | 1.5 | 2.33 | 1 | 5 | 0 | 5 |
| [S012]宿迁大润发店 | K3KSA203-N06 | 海军风开衫 · 燕麦 | S | 1.5 | 2.03 | 1 | 4 | 0 | 4 |
| [S024]南京仙林金鹰店 | K3SKC001-C02 | 百搭直筒裤 · 咖 | XL | 1.5 | 2.83 | 1 | 4 | 0 | 4 |
| [S032]南京仙林万达茂店 | K3CSG021-G01 | 时尚衬衫 · 绿 | XL | 1.5 | 3.81 | 1 | 4 | 0 | 4 |
| [S039]连云港海州万达店 | K3KSA203-N06 | 海军风开衫 · 燕麦 | S | 1.5 | 2.21 | 1 | 4 | 0 | 4 |
| [S039]连云港海州万达店 | K3MSA116-G10 | 一字领斜挎包毛衣 · 墨绿 | S | 1.5 | 2.09 | 1 | 4 | 0 | 4 |
| [S048]芜湖苏宁店 | K3NKC134-B01 | 时尚弯刀牛仔裤 · 蓝 | XL | 1.5 | 2.95 | 1 | 4 | 0 | 4 |
| [S052]淮安华信店 | K3FYA153-Y12 | 拼豹纹抽绳风衣 · 卡其 | S | 1.5 | 2.09 | 1 | 4 | 0 | 4 |
| [S066]南通启东吾悦店 | K3BXA096-C02 | 简约百搭背心 · 咖 | S | 1.5 | 2.09 | 1 | 4 | 0 | 4 |
| [S001]镇江京口吾悦店 | K3MSA116-G10 | 一字领斜挎包毛衣 · 墨绿 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S002]大丰大润发店 | K3XSA167-G01 | 动物印花小衫 · 绿 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S005]高邮世贸金街店 | K1WTD158-B01 | 休闲外套 · 蓝 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S012]宿迁大润发店 | K3MSA116-G10 | 一字领斜挎包毛衣 · 墨绿 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S014]仪征解放路店 | K3KSA046-B11 | 时尚双拉链开衫 · 藏青 | XL | 1.5 | 1.48 | 0 | 3 | 0 | 3 |
| [S016]淮安大润发店 | K3CSG159-C02 | 简约短款衬衫 · 咖 | XL | 1.5 | 1.48 | 0 | 3 | 0 | 3 |
| [S021]扬州江都金鹰店 | K3MSA103-W01 | 系带波浪纹毛衣 · 白 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S021]扬州江都金鹰店 | K3MSA111-G01 | 渐变晕染毛衣 · 绿 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S021]扬州江都金鹰店 | K3SKC001-C02 | 百搭直筒裤 · 咖 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S023]宿迁宿豫万达店 | K3CSG159-C02 | 简约短款衬衫 · 咖 | XL | 1.5 | 1.59 | 0 | 3 | 0 | 3 |
| [S023]宿迁宿豫万达店 | K3MSA116-G10 | 一字领斜挎包毛衣 · 墨绿 | XL | 1.5 | 1.59 | 0 | 3 | 0 | 3 |
| [S023]宿迁宿豫万达店 | K3MSA127-G01 | 时尚圆领毛衣 · 绿 | XL | 1.5 | 1.48 | 0 | 3 | 0 | 3 |
| [S023]宿迁宿豫万达店 | K3SKA133-A04 | 时尚阔腿裤 · 深灰 | F | 1.5 | 3.85 | 1 | 3 | 0 | 3 |
| [S024]南京仙林金鹰店 | K3KSA046-B11 | 时尚双拉链开衫 · 藏青 | XS | 1.5 | 1.97 | 1 | 3 | 0 | 3 |
| [S024]南京仙林金鹰店 | K3XSA164-A01 | 时尚披肩小衫 · 灰 | XS | 1.5 | 1.97 | 1 | 3 | 0 | 3 |
| [S024]南京仙林金鹰店 | K3XSA167-G01 | 动物印花小衫 · 绿 | XL | 1.5 | 1.48 | 0 | 3 | 0 | 3 |
| [S024]南京仙林金鹰店 | K3XSE002-A02 | 简约两件套小衫 · 浅灰 | XL | 1.5 | 1.59 | 0 | 3 | 0 | 3 |
| [S027]南京龙江新城市店 | J3MSD221-G01 | 时尚V领毛衣 · 绿 | XL | 1.5 | 1.48 | 0 | 3 | 0 | 3 |
| [S028]南京江宁万达店 | K3MSA116-G10 | 一字领斜挎包毛衣 · 墨绿 | XL | 1.5 | 1.48 | 0 | 3 | 0 | 3 |
| [S028]南京江宁万达店 | K3MSA165-N01 | 简约飘带毛衣 · 杏色 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S031]蚌埠百大名品中心店 | K3XKD140-Y12 | 时尚阔腿休闲裤 · 卡其 | XL | 1.5 | 2.83 | 1 | 3 | 0 | 3 |
| [S032]南京仙林万达茂店 | K3CSG021-G01 | 时尚衬衫 · 绿 | F | 1.5 | 3.81 | 1 | 3 | 0 | 3 |
| [S032]南京仙林万达茂店 | K3DQD009-C02 | 百搭半截裙 · 咖 | XS | 1.5 | 2.33 | 1 | 3 | 0 | 3 |
| [S032]南京仙林万达茂店 | K3NKC219-C02 | 时尚牛仔阔腿裤 · 咖 | XL | 1.5 | 2.21 | 1 | 3 | 0 | 3 |
| [S033]扬州邗江吾悦店 | K3MSA111-G01 | 渐变晕染毛衣 · 绿 | XL | 1.5 | 1.59 | 0 | 3 | 0 | 3 |
| [S035]泰州海陵万达店 | K3WTD149-A04 | 简约立领外套 · 深灰 | XL | 1.5 | 1.48 | 0 | 3 | 0 | 3 |
| [S035]泰州海陵万达店 | K3XSA196-A02 | 晕染荡领小衫 · 浅灰 | XL | 1.5 | 2.09 | 1 | 3 | 0 | 3 |
| [S036]南京城北万象汇店 | K3KSA172-B11 | 假两件开衫 · 藏青 | XL | 1.5 | 2.21 | 1 | 3 | 0 | 3 |
| [S036]南京城北万象汇店 | K3MSA099-Y12 | 波浪纹一字领毛衣 · 卡其 | XL | 1.5 | 1.59 | 0 | 3 | 0 | 3 |
| [S036]南京城北万象汇店 | K3MSH048-N06 | 后背纽扣小衫 · 燕麦 | XL | 1.5 | 1.48 | 0 | 3 | 0 | 3 |
| [S036]南京城北万象汇店 | K3NKC122-B01 | 时尚喇叭牛仔裤 · 蓝 | XS | 1.5 | 3.19 | 1 | 3 | 0 | 3 |
| [S037]南通圆融店 | K3MSA099-Y12 | 波浪纹一字领毛衣 · 卡其 | XL | 1.5 | 1.37 | 0 | 3 | 0 | 3 |
| [S037]南通圆融店 | K3MSA116-G10 | 一字领斜挎包毛衣 · 墨绿 | XL | 1.5 | 1.59 | 0 | 3 | 0 | 3 |
数据流水线(原始销量 → 清洗 → 预测 → 目标库存)
三段依次依赖;每段可单独重跑,重复跑不会产生重复行;都是后台执行 + 进度可见加载中…
为什么会"跑很久":销量涨到几十万行之后,清洗一段就要 约 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**,页面不用它。
注意:清洗这一段是同步 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:保护期内不允许调出),不参与这一步。
· 预测只有两个参数(预测模型「预测相关参数」卡片里的 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:保护期内不允许调出),不参与这一步。