天气预报进入食品库存模型以后,到底应该改变哪些商品的采购量?
以一组模拟数字为例:连续下雨的第三天,某门店的鲜切水果到店少卖了三成,外卖订单却多了四成。如果模型里只有一个“下雨乘 0.9”的系数,这两个相反的变化会被抵成一个中间值,两头都错。有一项 2026 年发表于 ScienceDirect 的研究,把热浪、强降雨和洪水风险放进主动式的需求预测与库存管理;业内文章的看法也相近:气温、降雨、日照对不同品类的影响不同,连续晴天与单个晴天不同,热浪的影响还随季节变化。
六类商品,六种反应
| 品类 | 强度 | 主要驱动 | 可售期 | 采购动作 |
|---|---|---|---|---|
| 冷饮、冰品 | 强 | 升温、本地活动 | 较长 | 升温前 2–3 天提前补货 |
| 外卖订单 | 强 | 降雨、本地活动 | 随商品 | 备货转向配送渠道 |
| 鲜食沙拉 | 中 | 升温 | 1–2 天 | 缩小批量,增加补货频次 |
| 即食热餐、汤品 | 中 | 降雨走强,高温走弱 | 当天 | 降雨前加备,高温日减备 |
| 烘焙 | 中 | 节假日、降雨 | 2–4 天 | 随到店客流减备,假日前加备 |
| 鲜奶乳品 | 弱 | 极端热浪 | 7–15 天 | 多数天气日不改量 |
强度决定建模的优先级:冷饮冰品与外卖订单对天气最敏感,值得单独建模;鲜奶乳品几乎不随天气改量,与冰品共用一个系数只会引入噪声。可售期决定动作的形式:可售期长的品类可整体加量,可售期短的只能缩小批量。每个品类各学各的权重,与按 SKU 选择预测模型是同一个思路。
高温里最先出问题的是可售期
假设一款沙拉平日日销 100 份,每两天订一次;高温日日销升到 130 份,可售期却由 2 天缩到 1 天。把增幅原样加进采购,一次订 260 份,第二天才能卖的 130 份已经过期。应改成每天订一次、每次 130 份:批量缩小,补货频次加倍。
特征设计:用三个量替代“今天多少度”
一、相对同季的偏离
绝对温度没有意义。假设以上海一带为例,近 5 年同周均温在 4 月中旬是 17℃,7 月中旬是 29℃:
示例推演 · 同一个 22℃ 的两种含义
temp_dev = 预报均温 − 近 5 年同周均温 4 月中旬 22 − 17 = +5℃ 高于同季,冰品、饮料上调 7 月中旬 22 − 29 = −7℃ 低于同季,冰品、饮料下调 偏离在 ±3℃ 以内按常规处理,不触发调整
均值取多长的历史窗口,见七天与一年的权重分配。
二、连续天数
单日的雨和连续四天的雨是两件事。系统设计为同时保存连续高温天数 heat_streak 与连续降雨天数 rain_streak,交给模型,让各品类从历史里学出自己的拐点,而不是人工规定“第三天起上调”。
三、预报提前量
采购要在销售之前下单,模型能用的只有下单那一刻已经发布的预报,而不是销售当天的实况。以 2 天提前期为例:
- 周三 09:00下单截止,模型读取此刻发布的周五预报,提前量 2 天,记入特征。
- 周四 06:00货到门店。周五预报已更新,但订货无法再改,只能靠补货或调拨补救。
- 周五销售发生,实况天气写入历史,用于校准,不能替换周三看到的那次预报。
最常见的错误,是用周五的实况天气训练一个上线后只能读到周三预报的模型:离线回测很漂亮,上线后误差变大。做法是保存每次发布的预报快照,训练时按下单时点取值,并把提前量也作为特征,让模型知道预报有多可信。预报有误差,输出应是需求区间,而不是一个点。
星期几、上周同一天、促销标记要先进入模型,解释掉一部分销量,天气只解释剩下的残差,否则周末的客流会被算成好天气的功劳。
示例特征字段
temp_dev_d2 = 预报均温(t+2) − 近 5 年同周均温 heat_streak = 截至 t 的连续高温天数 rain_streak = 截至 t 的连续降雨天数 rain_prob_d3 = 未来 3 天的降雨概率 fcst_lead = 预报提前量(天) holiday_off = 距最近假日的天数,前为负,后为正 sales_lag_7 = 上周同一天的销量
渠道拆分:到店和外卖不共用一个系数
仍用鲜切水果的模拟数字:晴天日销 80 份,到店 60、外卖 20。连续降雨的前三天,两个渠道各走各的(表 2)。若用“整体乘 0.9”,每天备 72 份,第 3 天的实际合计是 70 份,误差只有 2 份,看上去几乎没错。
| 连续降雨 | 到店 | 外卖 | 合计 | 到店多备 | 外卖少备 |
|---|---|---|---|---|---|
| 晴天基线 | 60 | 20 | 80 | — | — |
| 第 1 天 | 51 | 24 | 75 | 3 | 6 |
| 第 2 天 | 45 | 27 | 72 | 9 | 9 |
| 第 3 天 | 42 | 28 | 70 | 12 | 10 |
合计的误差被一多一少抵消了,渠道误差却是 12 份和 10 份。到店多出来的鲜切水果只有一两天可售,下架就是报废;外卖少备的 10 份是直接丢掉的订单,陈列与外卖备货是两个库位时,多的一边补不了缺的一边。做法是拆成两个预测:到店吃客流与天气,外卖吃天气、时段和配送范围,备货时再合并。餐饮的三餐与堂食外卖同理,见早餐、午餐和晚餐的需求预测。
评估怎么做:按天气事件分层回测
接入天气特征后,最容易得到的结论是“全年平均误差几乎没变”:常规天气占绝大多数,天气特征在那些日子无事可做,极端日子被平均掉了。下面用一组模拟数字说明:某冷饮品类 365 天里有 300 个常规天、30 个高温日、25 个连续降雨三天以上的日子和 10 个假日叠加雨天,分别回测有无天气特征的日误差(MAPE)。
| 分层 | 天数 | 无天气特征 | 加天气特征 |
|---|---|---|---|
| 常规天 | 300 | 12.0% | 11.9% |
| 高温日(偏离 ≥ +4℃) | 30 | 21.0% | 13.0% |
| 连续降雨 ≥ 3 天 | 25 | 19.0% | 14.0% |
| 假日叠加雨天 | 10 | 26.0% | 20.0% |
| 全年按天数加权 | 365 | 13.6% | 12.4% |
全年平均只从 13.6% 降到 12.4%,只看最后一行会得出“天气没用”的结论;分层以后,高温日从 21.0% 降到 13.0%,改善集中在只占全年 18% 的极端日子。回测仍用当时发布的预报快照,还要看偏差方向,例如高温日是否系统性偏低。
启用规则(示例阈值)
某品类在任一极端分层里 MAPE 改善不少于 3 个百分点,且常规天没有变差,才启用天气特征;否则关闭,回到星期、促销和近期水平。高温日一年只有几十天,单店样本太少,要把同一气候带的门店合并回测。
何时不该相信天气
先别信天气的情形
- 预报提前量超过 5–7 天,权重降到接近零
- 常温长保品类,提前期长,天气只影响一两天的销量
- 促销、节假日与天气叠加又没有对照日,效应分不开
- 洪水、封路等极端事件,销量由配送中断决定,转人工预案
值得启用的情形
- 可售期短、提前期 1–3 天的品类,如沙拉、冰品、即食餐
- 提前期内有可靠预报,历史里有完整的高温季或多雨季
- 到店与外卖分开记录
- 分层回测在极端天气日有明显改善
必赢亚洲智能库存把这些字段作为特征,让各品类学到各自的权重;在必赢亚洲 App 里,系统设计为把天气触发的上调和下调单独标出,门店可以确认或改回。订货怎样结合保质期,见食品卖得越快为什么不该进货越多。