天虹超市 · POC 2025 · 门店 常兴天虹00110

SKU 级
需求智能预测

基于 XGBoost、LightGBM 与随机森林的集成模型,预测 5 个经营中类、 20,000+ 个 SKU 的每日销量;以 2 年以上交易历史训练,包含促销在内共 24 个基础特征(+6 个自动发现特征)。

查看预测 → 评估精度
20,372
有效 SKU 数
5
经营中类
46
预测天数
30
特征 (24+6 自动)

预测模型

三个机器学习模型——两个梯度提升、一个 Bagging 集成——加上一个季节性朴素基准。 树模型共享 24 个基础特征 + 6 个自动发现特征,采用递归多步预测覆盖 46 天预测窗口; 最终提交取三个树模型的均值。

LightGBM 全局 · 全部 SKU

梯度提升决策树,采用 Leaf-wise 生长与 GOSS 采样。每一轮新树拟合残差梯度, 迭代修正此前误差,在大规模稀疏特征上训练高效。

ŷ = Σk η · fk(x)  (η=0.05, K=200)
增益 = ½[GL²/(HL+λ) + GR²/(HR+λ) − (GL+GR)²/(HL+HR+λ)] − γ
200 棵树 深度 6 63 叶子 GOSS 采样
XGBoost 全局 · 全部 SKU

梯度提升决策树,采用 Level-wise 生长与损失函数的二阶泰勒展开。 通过对叶子权重施加 L1/L2 正则,抑制 SKU 级噪声信号上的过拟合。

obj = Σi[gif(xi) + ½hif(xi)²] + Ω(f)
Ω(f) = γT + ½λ‖w‖²  (叶权 L2 正则)
200 棵树 深度 6 行采样 0.8 hist 算法
随机森林 全局 · 全部 SKU

Bagging 集成:每棵树在自助采样与随机特征子集上训练,再对预测取平均。 各树误差互不相关,方差以 1/B 速率下降。

ŷ = 1/B Σb Tb(x)  (B=100)
Var(ŷ) = ρσ² + 1−ρ/Bσ²
ρ 为树间相关性,B → ∞ 时趋于 0
100 棵树 深度 10 行采样 50% 列采样 70%
季节性朴素 基准 · 时间序列

快速的星期基准。对每个预测日,融合该星期几的最近一次取值与过去 4 周 同星期几均值——零训练即可捕捉周内季节性,作为所有模型的对照基准。

ŷt = ½ · y最近(星期) + ½ · 均值4周(星期)
星期 = 目标日期 t 的星期几
在过去 28 天窗口内统计
周期 m = 7 无需训练 基准对照
集成模型 LGB + XGB + RF

对三个树模型(LightGBM、XGBoost、随机森林)取简单平均。两种提升变体 与 Bagging 混合,误差来源多样化——误差不相关时,集成方差正比于 1/K。

ŷ集成 = ⅓(ŷLGB + ŷXGB + ŷRF)
Var(ŷ集成) ≈ 1/K · σ² (K=3)
误差互不相关时成立
简单平均 K = 3 模型 POC 提交

各模型特征输入

树模型使用 24 个人工基础特征 + 6 个自动发现特征 (来自 10,000 维 FunSearch 候选库)= 30 个。 季节性朴素基准仅使用原始时间序列。

特征组 LightGBM XGBoost 随机森林 季节性朴素
滞后特征 (lag_1–28) · 7
滚动均值 (roll7/14/28) · 3
日历 (星期/日/月) · 3 隐式
促销标志 · 8
品类信号 (cat_lag1/roll7) · 2
SKU 标识 (sku_id) · 1
自动发现特征 (FunSearch) · 6  来自 10,000 候选
特征总数 30 30 30 1(序列)

24 个人工基础特征

滞后 · 7
lag_1 lag_2 lag_3
lag_7 lag_14 lag_21 lag_28
滚动 · 3
roll7 · roll14 · roll28
(滞后 1 天,防泄漏)
日历 · 3 + 标识
day_of_week · day_of_month
month · sku_id
促销 · 8 + 品类 · 2
is_promo · discount_depth
is_bundle · is_threshold
is_warehouse · is_online
days_since_promo · roll_promo_7
cat_lag1 · cat_roll7

+ 6 个自动发现特征 (FunSearch / LLM)

roll7−roll28  ·  lag7−cat_lag1  ·  roll7−cat_roll7  ·  lag1/std(lags)  ·  lag7/lag28  ·  roll7/lag1 由遗传搜索、Kimi LLM 与特征级遗传程序从 10,000 维候选库中选出

FunSearch · 2000 SKU 研究

🤖 LLM 自动特征工程

机器能否发现比人工 24 维更好的特征?我们在 2000 个 SKU 样本上运行 FunSearch 循环: 候选库最多含 10,000 个自动生成的特征,以三种方式搜索:基于特征组合的遗传算法、LLM 采样器(Kimi),以及特征级遗传程序(淘汰弱特征,对幸存者做交叉与变异)。

10,000
生成的候选特征
3
搜索方法
(GA · LLM · 特征GP)
+2.5pp
最佳代理 FA 提升
(LightGBM)
≈ 0pp
全量 20k 生产环境
(代理增益未迁移)

LLM 自动特征工程对各 ML 模型的提升 — 周度 FA (2000 SKU)

将 Kimi 发现的同一组 6 维特征加到 base-24,在每个模型上评估 · 各品类与整体 FA · 4 个验证周(2025-06-03 → 06-30),训练截止 2025-06-02
8802 品类A · 8803 品类B · 8804 品类C · 8805 最难 · 8807 品类E · 整体 = 五类按销量加权

模型 8802 8803 8804 8805 8807 整体 提升
LightGBM 79.1%81.4%62.0%47.0%63.8% 67.25% +1.72 pp
XGBoost 74.1%78.7%58.5%45.0%60.5% 63.62% +0.71 pp
随机森林 77.8%78.6%55.5%40.1%61.9% 63.25% +0.16 pp
OLS (Ridge) 45.3%45.4%44.7%27.0%44.3% 42.54% +26.70 pp

LLM 编写的最佳特征集

Kimi · +1.72 pp

LLM 采样器(Kimi,30 轮迭代)在最佳轮次自动生成的 add_features()——它自行发现的 动量 + 品类相对 + 波动率组合:

feat_weekly_speed  = roll7 − roll28
feat_cat_momentum  = lag7 − cat_lag1
feat_cat_roll_momentum = roll7 − cat_roll7
feat_lag1_over_vol  = lag1 / std(lags)
feat_lag7_over_lag28  = lag7 / lag28
feat_rollmean_over_lag1 = roll7 / lag1

独立的遗传搜索以相同的特征族(离散度 · 近期性 · 趋势) 达到相当的 +2.46 pp——两种方法收敛到 相同上限,印证瓶颈在问题本身而非搜索方法。

我们学到了什么

  • 代理增益(2000 SKU、teacher-forced +2.5 pp)未能迁移:整合进全量 20,372 SKU 递归生产 CV 后,这 6 个特征≈ 中性(LightGBM +0.1,随机森林 −0.4 pp)。
  • 更大的库(40 → 946 → 10,000)并未抬高树模型上限—— 三种搜索均在第 3–8 代即收敛。
  • 特征级遗传程序(淘汰弱特征→对幸存者交叉/变异) 培育出越来越复杂的组合特征——到第 15 代精英 150 个中有 120 个是培育后代—— 但仍停在相同上限(+1.4 pp)。
  • 真正受益的是弱/线性模型:OLS 用同一组特征提升达 +26.7 pp,因为它无法自行构造交互特征。
  • 递归提升集中在最难的品类—— 8804(+1.2 pp)与 8805(+3.2 pp)。

上限洞察:间歇性零售需求上的对称周度 FA 主要由基础滞后项已捕捉的周季节性主导, 因而限制了特征工程的提升空间。


📐 POC 精度指标 — FA 公式

FA  =  1 − 2|F − A| / (F + A)

F = 每周预测合计  ·  A = 每周实际合计(按单店单 SKU)

示例:F = 99, A = 83
FA = 1 − 2×|99−83| / (99+83)
= 1 − 2×16 / 182
= 1 − 0.176 = 82.4% ✓
若 F 或 A < 0 → 置为 0
若 F = A = 0 → FA = 100%
FA 截断到 [0%, 100%]
为何这样设计?  改写为 1 − |F−A| / ((F+A)/2),分母为预测与实际的中点, 因此误差项是对称相对偏差。与普通 MAPE 不同,它对高估和低估施以同等惩罚, 并给出完整的 [0, 1] 范围——0 表示严重失准。

加权汇聚(3 步):

1. 将每日预测与实际汇总到每周合计(每个 SKU) (周:7月1–7、8–14、15–21、22–28)
2. 每个 (SKU, 周) 的权重 = 前 28 天实际销量 (截至评估周开始前一天)
3. 加权平均 FA → 按品类(8802–8807)→ 整体
汇聚 FA = Σ(FAsku,周 × wsku,周) / Σwsku,周

wsku,周 = 该周开始前 28 天的 SKU 销量

POC 经营中类(门店 常兴天虹00110)

8802
中类 A
8803
最易
8804
中类 C
8805
最难
8807
中类 E

预测查询

上传预测提交文件或加载演示数据,可视化各模型在 SKU 级别的每日预测。

正在检测本地服务…
运行 uvicorn api_server:app --port 8000 以启用实时多模型预测

1 加载预测数据 (上传 XLSX/CSV 或使用演示)


精度评估

上传实际销量文件,浏览器内按 POC 公式计算 FA 指标——数据不离开本机。

⚠️ 请先在预测查询中加载预测数据。