预测模型与算法治理
算法注册 → 启停 → 热切换 → 灰度 → 效果自动切换 → 回滚,六个动作全部在界面上完成,且每一步留痕。模型不是黑盒,切换不是发版。
在册算法
6个
4 启用 / 1 灰度 / 1 已停用
当前生效版本
v3.2
2025-10-15 发布,生效 6 天
灰度比例
15%
按门店哈希分桶,非随机抽样
自动切换阈值
±3pp
灰度与主版本 MAPE 差异超阈值才建议切换
可回滚点
5个
保留最近 5 个版本,回滚耗时 < 2 分钟
昨日切换次数
0次
近 30 天共 3 次,均自动记录
算法注册表(X7)
热切换指不重启批次、不改配置文件,下一个取数窗口即生效| 优先级 | 算法 | 方法族 | 适用场景 | 版本 | 承载占比 | MAPE | 灰度 | 启用 | 操作 |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 加权移动平均(近7/近7-14) | 加权 MA | 有稳定近两周销量的常规款 | v3.2 | 46% | 17.2% | — | 编辑删除 | |
| 2 | Holt-Winters(阻尼·乘性季节) | 指数平滑 ETS | 季节性强、历史 ≥ 52 周 | v2.8 | 22% | 19.4% | — | 编辑删除 | |
| 3 | LightGBM 分位数回归 | 梯度提升树 | 含促销/价格/天气特征宽表 | v3.2 | 24% | 15.8% | 15% 门店 | 编辑删除 | |
| 4 | N-BEATS(残差全连接堆叠) | 深度模型 | 大店、长序列、可接受算力成本 | v0.9 | — | 15.1% | 试点 8 家店 | 编辑删除 | |
| 5 | Croston(需求量+间隔双 SES) | 间歇需求 | 近 14 天零销或销 1 件款 | v1.4 | 6% | 31.5% | — | 编辑删除 | |
| 6 | 相似款迁移(属性近邻) | 类比法 | 无历史新品冷启动 | v1.1 | 2% | 24.7% | — | 编辑删除 |
共 6 个注册算法 · 承载占比按 SKC-店组合数统计每页
热切换流程(4 步,预计 2 分钟生效)
X7 灰度与回滚STEP 1
提交
选择目标算法与版本
STEP 2
预演
用昨日快照复算对比
STEP 3
灰度 15%
按门店哈希分桶
STEP 4
全量生效
写回算法注册表
10-21 02:40
LightGBM v3.2 灰度 15%(按门店编码哈希取模,固定分桶,可复现)
10-21 02:41
预演结果:灰度组 MAPE 15.8% vs 主版本 17.2%,方向性偏差 +1.1%
10-22 02:40
待观察第二个决策日,若连续 2 日 MAPE 不劣于主版本则提升至 50%
10-24 02:40
计划全量生效,保留 v3.1 / v3.0 两个回滚点
效果自动切换判据
- 主指标
- 加权 MAPE(按行销量加权,不是简单平均)
- 副指标
- 偏差率 |bias| ≤ 5%(方向性,正=高估)
- 切换阈值
- 灰度组 MAPE 优于主版本 ≥ 3pp,且连续 2 个决策日成立
- 否决条件
- 任一品类 MAPE 恶化 > 2pp → 自动暂停灰度并告警
- 样本量要求
- 灰度组有效行 ≥ 500 行,否则不触发自动判定
- 回滚触发
- 生产 MAPE 连续 3 日超阈值 25% → 自动回滚至上一版本
- 人工闸门
- 全量生效必须人工点击,自动策略只产出"建议切换"
灰度组 vs 对照组 MAPE 走势
灰度组 MAPE(%)第 8 天起灰度组稳定低于对照组
版本与回滚点
| 版本 | 发布 | 变更 | MAPE | 状态 |
|---|---|---|---|---|
| v3.2 | 2025-10-15 | 新增天气因子与分位数输出 | 15.8% | 生效中 |
| v3.1 | 2025-09-28 | 修正节假日倍率口径 | 17.2% | 回滚点 |
| v3.0 | 2025-09-10 | 引入 MinT 层级调和 | 18.1% | 回滚点 |
| v2.8 | 2025-08-12 | Holt-Winters 参数分组 | 19.4% | 归档 |
模型管理参数
层级调和说明(MinT)
本轮决策日实测为什么必须调和
品类、SKC、门店×SKC、SKU 四级各自独立预测时,下级加总通常不等于上级(不满足 SGS=S),自上而下拆解又会低估波动。MinT 取 G=(S′W⁻¹S)⁻¹S′W⁻¹,把层级全部信息用上,W 用收缩协方差 mint_shrink 估计,规避样本协方差在小样本下不可逆的问题。
i治理红线:热切换只改算法选择,不改历史结果。已生成的决策行必须与当时的算法版本绑定(决策行上带 algo_version 字段),否则回溯复盘时无法解释"同一行昨天和今天的建议为什么不一样"。