用“事件计数预训练”把零售需求预测做稳:从Abacus到供应链

人工智能在零售连锁与商超By 3L3C

Abacus提出用“事件频率分布”做自监督预训练。本文把它迁移到零售补货与供应链:让需求预测更稳、更快收敛,并给出可落地MVP方案。

自监督学习需求预测库存管理序列模型零售数据科学供应链优化
Share:

用“事件计数预训练”把零售需求预测做稳:从Abacus到供应链

年底最怕的不是忙,是“忙错”。双旦、年货季叠加,门店补货、仓内拣配、干线调拨都在抢时间,而需求端却像开盲盒:有些SKU突然爆发,有些品类长尾波动,更多时候是“买的人很少,但一来就集中”。数据稀疏、正样本极少、时间间隔不规律——这类难题不只出现在零售,也出现在广告系统的用户购买预测里。

最近一篇研究提出了一个很实用的思路:与其只盯着“下一次会不会发生”,不如先学会“在一段时间里大概会发生多少次,以及频率分布长什么样”。论文把这个方法叫做 Abacus:一种面向序列建模的自监督事件计数对齐的分布式预训练。它本来服务于展示广告中的购买行为预测,但我更看重的是它对我们这条系列——“人工智能在零售连锁与商超”——的启发:用事件频率分布做自监督预训练,可以把需求预测、补货决策、履约节奏预测做得更稳、更快收敛、更抗噪。

Abacus解决的核心问题:稀疏事件下,序列模型“只看到了浪花”

答案先说清楚:Abacus用“事件频率分布预测”替代单点标签,给序列模型提供更稳定的学习信号。

在用户购买预测里,正样本(购买)很少,且购买间隔不均匀。传统做法常依赖手工“计数器特征”(例如近7天购买次数、近30天点击次数),优点是稳定,但缺点也明显:

  • 计数聚合后,丢掉了意图随时间变化的细节(比如近3天突然升温)。
  • 手工特征容易堆叠,跨场景迁移困难

而纯序列模型(RNN/Transformer等)擅长捕捉顺序信号,但面对稀疏事件时,监督信号太弱、噪声太大,训练很容易“学偏”。Abacus的切入点很直接:

与其逼模型从稀少的正样本里硬学,不如先让它学会“事件在一段窗口内的经验频率分布”。

论文里还提出了一个混合目标(hybrid objective):把Abacus这种“统计稳定性”与序列目标的“敏感性”结合。据论文描述,混合方法相对基线最高带来 +6.1% AUC 的提升,并且能加速下游任务收敛。

把Abacus翻译成零售语言:从“用户事件”到“订单/履约事件”

答案先说清楚:在零售与供应链中,事件可以是下单、到店自提、缺货、退货、补货到仓、门店出库等;Abacus学的是这些事件的“频率分布”,不是单次发生与否。

把广告里的“购买事件”换成零售的“业务事件”,你会发现几乎一一对应:

  • 需求侧事件:门店POS成交、线上下单、加购、到店核销。
  • 供给侧事件:缺货、替代购买、取消、退货。
  • 履约侧事件:仓内波次完成、出库、干线到达、门店签收。

这些事件同样具备三个特点:

  1. 稀疏:很多长尾SKU一天都未必卖出一单。
  2. 不规律:促销、天气、社区团购团期、短视频带货都能改变节奏。
  3. 强不平衡:缺货、异常延迟、爆单等是“小概率大影响”。

在我见过的项目里,团队往往在两条路中二选一:要么靠一堆近N天计数特征求稳,要么用序列模型追细节。Abacus给了一个更务实的折中:先用自监督把“频率分布”学扎实,再用任务目标去学细粒度变化。

为什么“频率分布预训练”对库存与补货更有用

答案先说清楚:频率分布让模型先学到“量级与节奏”,再学“精确时点”,能显著降低稀疏监督导致的波动。

1)把“偶然的1单”变成“窗口内的可学习信号”

对长尾SKU来说,“下一小时是否成交”几乎是随机变量;但如果你换成“未来7天成交次数的分布”,就更稳定、也更接近补货决策所需的信息。

对供应链决策而言,我们通常关心的是:

  • 未来7天/14天要补多少货?
  • 需要提前几天调拨?
  • 安全库存要不要上调?

这些问题本质上不是单点分类,而是对一定周期内的需求频率与强度做判断。

2)把“计数器特征”从手工规则变成模型能力

很多连锁零售的需求预测管道里,计数特征几乎是祖传配方:近7天销量、近28天销量、近3次补货间隔、近5次缺货次数……这些特征有效,但维护成本高。

Abacus式预训练的价值是:让模型学会自己构造“统计稳定”的表示,减少手工堆特征的依赖。你仍然可以保留关键业务特征,但模型不再完全被特征工程牵着走。

3)用混合目标同时照顾“稳”和“灵”

零售最难的是两头都要:

  • 平时要稳:别天天跟着噪声调参数、调安全库存。
  • 节日要灵:双旦、年货季、春节返乡、年终聚餐,需求结构变化很快。

混合目标的直觉很像业务上“基准预测 + 促销修正”:

  • 分布/计数目标提供基准盘(稳定)。
  • 序列目标提供变化盘(敏感)。

落地怎么做:用Abacus思路搭一个“需求序列预训练”最小可行方案

答案先说清楚:先定义事件与时间窗→构造经验频率分布标签(自监督)→预训练序列编码器→再微调用于需求预测/缺货预测/到货预测。

下面给一个偏工程的MVP路线,适合连锁零售与商超数据团队试水:

1)定义事件与粒度:从“能稳定采集”开始

优先选择数据质量高、闭环完整的事件:

  • sale:POS成交/线上支付成功(按SKU-门店-天或小时)
  • oos:缺货标记(货架缺货/系统缺货)
  • replenish:补货到店/到仓(带数量)

粒度建议:门店-天是最稳的起点;对即时零售可尝试门店-小时。

2)构造“经验频率分布”:别只做一个计数

Abacus的关键不是“预测次数”,而是预测“次数的分布”。在零售里可以这样做:

  • 选一个窗口长度(例如未来7天)。
  • 对每个样本,计算该窗口内事件次数 k
  • k 映射到若干桶(0次、1次、2-3次、4-7次、8次以上),形成离散分布标签。

这样模型学到的不是一个点,而是需求强度的分段概率。对业务方也更好解释:

“这个SKU在这家店未来一周出现0次/低频/中频/高频的概率分别是多少。”

3)预训练目标 + 下游任务:用混合方式更划算

你可以把预训练拆成两层:

  • 自监督预训练:用历史序列去预测未来窗口的频率分布(不用人工标注)。
  • 下游微调
    • 需求预测(回归/分位数预测)
    • 缺货风险预测(分类)
    • 补货建议(优化或策略模型)

混合训练的实操建议:在微调阶段保留一部分分布目标作为正则,让模型别被短期噪声拉偏。

4)三条评估指标,直接对齐供应链KPI

仅看AUC不够。更贴近零售供应链的评估方式是:

  1. WAPE/SMAPE:需求预测误差(按门店、品类、SKU分层)。
  2. 缺货率与替代率:预测驱动补货后是否减少缺货。
  3. 库存周转天数:稳定期是否减少资金占用。

如果你只能选一个“业务先验”的门槛:我倾向于先跑通“缺货率下降 + 周转不变/略降”,比追求预测误差的小幅改善更有说服力。

常见追问:数据、冷启动、以及“会不会把促销学歪”

答案先说清楚:Abacus思路对冷启动友好,但必须把促销与异常作为显式事件或上下文特征,否则频率分布会被混淆。

Q1:长尾SKU几乎没销量,分布标签会不会全是0?

会,但这不代表没价值。全0的样本依然让模型学到“在什么上下文下会持续为0”,并在少量正例出现时更快适配。你还可以:

  • 以品类/价格带做多任务共享表示
  • 合并更长窗口(14天/28天)提高信号密度

Q2:促销、节假日会让频率分布失真吗?

会,所以要把它“讲清楚”。两种做法:

  • 把促销作为上下文特征(折扣、活动类型、投放强度)
  • 把“促销开始/结束”作为事件纳入序列

我更推荐第二种:事件化后,模型更容易学习“活动触发→频率抬升→活动结束回落”的模式。

Q3:对供应链履约也能用吗?

能。把事件换成“波次完成、出库、到达、签收、异常延迟”,预测未来窗口内的完成次数或延迟次数分布,就能做:

  • 产能预估(仓内人效与波次容量)
  • 干线班次与到达节奏预测
  • 异常风险提前预警

给想要线索转化的团队:从一个门店群试点开始

零售连锁做AI,最忌讳“上来就全网铺开”。我建议的试点方式很具体:

  • 选 30-100 家门店(含高低客流、城市层级差异)
  • 选 2-3 个品类(高周转 + 长尾明显 + 促销频繁)
  • 先做“7天频率分布预训练 + 缺货风险微调”
  • 用缺货率、替代率、周转天数做四周对照

如果这条链路跑通,你就会发现:模型不是“更聪明”那么简单,而是更像一个可靠的运营同事——先把大势看稳,再在关键节点提醒你别踩坑。

年底到春节前,是验证“稳与灵”的最好时段。你更关心哪一块:门店补货、仓内产能,还是即时零售的小时级预测?我更愿意从你现有数据结构出发,帮你把“事件定义 + 窗口分布 + 评估口径”一次性定对。