决策作业/ 目标库存计算
/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商品尺码满足周数预估周销安全库存目标可用缺口
[S024]南京仙林金鹰店K3FYA192-C02领带长款风衣 · 咖F1.51.140202
[S024]南京仙林金鹰店K3MSA116-G10一字领斜挎包毛衣 · 墨绿F1.51.310202
[S024]南京仙林金鹰店K3NKC026-W01时尚直筒裤 · 白XS1.51.971202
[S024]南京仙林金鹰店K3SKA169-C02百搭时装裤 · 咖F1.50.680202
[S024]南京仙林金鹰店K3XKC032-Y12设计感弯刀裤 · 卡其XS1.53.071202
[S024]南京仙林金鹰店K3XSA144-W02撞色披肩小衫 · 米白F1.51.030202
[S026]南京马群花园城店K3MSH062-N06喇叭袖针织小衫 · 燕麦F1.51.250202
[S026]南京马群花园城店K3NKC160-B01时尚九分裤 · 蓝F1.50.680202
[S027]南京龙江新城市店J3WTB066-A01简约休闲外套 · 灰F1.51.030202
[S028]南京江宁万达店J3NKC166-J02时尚喇叭裤 · 深蓝牛仔色F1.50.680202
[S028]南京江宁万达店K3MSA127-G01时尚圆领毛衣 · 绿F1.51.030202
[S030]南京江北弘阳店K3DQD009-C02百搭半截裙 · 咖XL1.52.091202
[S030]南京江北弘阳店K3NKC122-B01时尚喇叭牛仔裤 · 蓝F1.51.140202
[S030]南京江北弘阳店K3NKC161-B01时尚牛仔裤 · 蓝F1.50.910202
[S031]蚌埠百大名品中心店K3MSD108-W02拼蕾丝V领毛衣 · 米白F1.51.030202
[S031]蚌埠百大名品中心店K3XKD140-Y12时尚阔腿休闲裤 · 卡其F1.52.831202
[S032]南京仙林万达茂店K3KSA046-B11时尚双拉链开衫 · 藏青F1.54.051202
[S032]南京仙林万达茂店K3MSA099-Y12波浪纹一字领毛衣 · 卡其S1.51.841202
[S032]南京仙林万达茂店K3MSA099-Y12波浪纹一字领毛衣 · 卡其XL1.51.841202
[S032]南京仙林万达茂店K3MSA111-G01渐变晕染毛衣 · 绿S1.51.971202
[S032]南京仙林万达茂店K3MSA111-G01渐变晕染毛衣 · 绿XL1.51.971202
[S032]南京仙林万达茂店K3MSA165-N01简约飘带毛衣 · 杏色F1.51.030202
[S032]南京仙林万达茂店K3XKD052-G05时尚休闲裤 · 豆绿F1.50.80202
[S032]南京仙林万达茂店K3XSA144-W02撞色披肩小衫 · 米白F1.51.140202
[S032]南京仙林万达茂店K3XSE002-A02简约两件套小衫 · 浅灰F1.51.140202
[S033]扬州邗江吾悦店K3MSA103-W01系带波浪纹毛衣 · 白F1.51.250202
[S033]扬州邗江吾悦店K3MSA165-N01简约飘带毛衣 · 杏色S1.51.891202
[S033]扬州邗江吾悦店K3MSA165-N01简约飘带毛衣 · 杏色XL1.51.891202
[S033]扬州邗江吾悦店K3WTD078-C02时尚短款外套 · 咖F1.51.540202
[S034]南京溧水万达店K3MSA099-Y12波浪纹一字领毛衣 · 卡其F1.51.030202
[S034]南京溧水万达店K3MSA103-W01系带波浪纹毛衣 · 白F1.51.030202
[S034]南京溧水万达店K3MSD108-W02拼蕾丝V领毛衣 · 米白F1.51.140202
[S034]南京溧水万达店K3NKC075-K01原色牛仔阔腿裤 · 黑F1.50.910202
[S034]南京溧水万达店K3SKC001-C02百搭直筒裤 · 咖F1.50.680202
[S035]泰州海陵万达店K1NKC095-B09九分直筒牛仔裤 · 深蓝F1.50.680202
[S035]泰州海陵万达店K3MSA165-N01简约飘带毛衣 · 杏色F1.51.030202
[S035]泰州海陵万达店K3NKC160-B01时尚九分裤 · 蓝F1.50.80202
[S035]泰州海陵万达店K3XSE002-A02简约两件套小衫 · 浅灰F1.51.030202
[S036]南京城北万象汇店J3DDC114-N01简约打底衫 · 杏色F1.50.680202
[S036]南京城北万象汇店J3WTE107-C02抽绳灯笼袖外套 · 咖F1.50.680202
[S036]南京城北万象汇店K2DQB074-W01百搭半截裙 · 白F1.50.680202
[S036]南京城北万象汇店K2NKC090-B01亮钻牛仔喇叭裤 · 蓝F1.50.680202
[S036]南京城北万象汇店K3FYA192-C02领带长款风衣 · 咖F1.51.030202
[S036]南京城北万象汇店K3FYC085-A04时尚长风衣 · 深灰XL1.52.951202
[S036]南京城北万象汇店K3FYC085-A04时尚长风衣 · 深灰XS1.52.951202
[S036]南京城北万象汇店K3KSA203-N06海军风开衫 · 燕麦F1.51.140202
[S036]南京城北万象汇店K3MSA116-G10一字领斜挎包毛衣 · 墨绿F1.51.140202
[S036]南京城北万象汇店K3TZA215-N02时尚两件套装 · 米M1.51.030202
[S036]南京城北万象汇店K3XSA071-C02时尚小衫 · 咖M1.50.80202
[S036]南京城北万象汇店K3XSA196-A02晕染荡领小衫 · 浅灰F1.51.841202
上一页 第 4 / 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 天)
逐日库存快照:库存快照与流水 →「逐日快照的覆盖面」卡片 → 「观测快照 / 回推快照 / 键位完整」那几行(当前 55 天快照,其中键位完整可判定 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:保护期内不允许调出),不参与这一步。