Abacus提出用“事件频率分布”做自监督预训练。本文把它迁移到零售补货与供应链:让需求预测更稳、更快收敛,并给出可落地MVP方案。
用“事件计数预训练”把零售需求预测做稳:从Abacus到供应链
年底最怕的不是忙,是“忙错”。双旦、年货季叠加,门店补货、仓内拣配、干线调拨都在抢时间,而需求端却像开盲盒:有些SKU突然爆发,有些品类长尾波动,更多时候是“买的人很少,但一来就集中”。数据稀疏、正样本极少、时间间隔不规律——这类难题不只出现在零售,也出现在广告系统的用户购买预测里。
最近一篇研究提出了一个很实用的思路:与其只盯着“下一次会不会发生”,不如先学会“在一段时间里大概会发生多少次,以及频率分布长什么样”。论文把这个方法叫做 Abacus:一种面向序列建模的自监督事件计数对齐的分布式预训练。它本来服务于展示广告中的购买行为预测,但我更看重的是它对我们这条系列——“人工智能在零售连锁与商超”——的启发:用事件频率分布做自监督预训练,可以把需求预测、补货决策、履约节奏预测做得更稳、更快收敛、更抗噪。
Abacus解决的核心问题:稀疏事件下,序列模型“只看到了浪花”
答案先说清楚:Abacus用“事件频率分布预测”替代单点标签,给序列模型提供更稳定的学习信号。
在用户购买预测里,正样本(购买)很少,且购买间隔不均匀。传统做法常依赖手工“计数器特征”(例如近7天购买次数、近30天点击次数),优点是稳定,但缺点也明显:
- 计数聚合后,丢掉了意图随时间变化的细节(比如近3天突然升温)。
- 手工特征容易堆叠,跨场景迁移困难。
而纯序列模型(RNN/Transformer等)擅长捕捉顺序信号,但面对稀疏事件时,监督信号太弱、噪声太大,训练很容易“学偏”。Abacus的切入点很直接:
与其逼模型从稀少的正样本里硬学,不如先让它学会“事件在一段窗口内的经验频率分布”。
论文里还提出了一个混合目标(hybrid objective):把Abacus这种“统计稳定性”与序列目标的“敏感性”结合。据论文描述,混合方法相对基线最高带来 +6.1% AUC 的提升,并且能加速下游任务收敛。
把Abacus翻译成零售语言:从“用户事件”到“订单/履约事件”
答案先说清楚:在零售与供应链中,事件可以是下单、到店自提、缺货、退货、补货到仓、门店出库等;Abacus学的是这些事件的“频率分布”,不是单次发生与否。
把广告里的“购买事件”换成零售的“业务事件”,你会发现几乎一一对应:
- 需求侧事件:门店POS成交、线上下单、加购、到店核销。
- 供给侧事件:缺货、替代购买、取消、退货。
- 履约侧事件:仓内波次完成、出库、干线到达、门店签收。
这些事件同样具备三个特点:
- 稀疏:很多长尾SKU一天都未必卖出一单。
- 不规律:促销、天气、社区团购团期、短视频带货都能改变节奏。
- 强不平衡:缺货、异常延迟、爆单等是“小概率大影响”。
在我见过的项目里,团队往往在两条路中二选一:要么靠一堆近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不够。更贴近零售供应链的评估方式是:
- WAPE/SMAPE:需求预测误差(按门店、品类、SKU分层)。
- 缺货率与替代率:预测驱动补货后是否减少缺货。
- 库存周转天数:稳定期是否减少资金占用。
如果你只能选一个“业务先验”的门槛:我倾向于先跑通“缺货率下降 + 周转不变/略降”,比追求预测误差的小幅改善更有说服力。
常见追问:数据、冷启动、以及“会不会把促销学歪”
答案先说清楚:Abacus思路对冷启动友好,但必须把促销与异常作为显式事件或上下文特征,否则频率分布会被混淆。
Q1:长尾SKU几乎没销量,分布标签会不会全是0?
会,但这不代表没价值。全0的样本依然让模型学到“在什么上下文下会持续为0”,并在少量正例出现时更快适配。你还可以:
- 以品类/价格带做多任务共享表示
- 合并更长窗口(14天/28天)提高信号密度
Q2:促销、节假日会让频率分布失真吗?
会,所以要把它“讲清楚”。两种做法:
- 把促销作为上下文特征(折扣、活动类型、投放强度)
- 把“促销开始/结束”作为事件纳入序列
我更推荐第二种:事件化后,模型更容易学习“活动触发→频率抬升→活动结束回落”的模式。
Q3:对供应链履约也能用吗?
能。把事件换成“波次完成、出库、到达、签收、异常延迟”,预测未来窗口内的完成次数或延迟次数分布,就能做:
- 产能预估(仓内人效与波次容量)
- 干线班次与到达节奏预测
- 异常风险提前预警
给想要线索转化的团队:从一个门店群试点开始
零售连锁做AI,最忌讳“上来就全网铺开”。我建议的试点方式很具体:
- 选 30-100 家门店(含高低客流、城市层级差异)
- 选 2-3 个品类(高周转 + 长尾明显 + 促销频繁)
- 先做“7天频率分布预训练 + 缺货风险微调”
- 用缺货率、替代率、周转天数做四周对照
如果这条链路跑通,你就会发现:模型不是“更聪明”那么简单,而是更像一个可靠的运营同事——先把大势看稳,再在关键节点提醒你别踩坑。
年底到春节前,是验证“稳与灵”的最好时段。你更关心哪一块:门店补货、仓内产能,还是即时零售的小时级预测?我更愿意从你现有数据结构出发,帮你把“事件定义 + 窗口分布 + 评估口径”一次性定对。