当你负责一个生产环境中的预测模型,连续几个季度的预测偏差都往同一个方向偏,你会怎么做?常规反应是立刻用最新数据重训模型。但 Airbnb 的 Forecasting Data Science 团队发现,“重训”这个词掩盖了三种完全不同的决策,选错可能让模型更糟,甚至把临时噪声当成新常态。

Airbnb 的预测模型覆盖需求、预订、取消等指标,数千个市场持续刷新,其他团队基于这些预测做决策。一个小偏差在层层放大后可能变成大问题。COVID 期间,模型学到了大量异常模式,疫情后需要“遗忘”这些模式,但如何遗忘?团队总结出一套决策框架:把“重训”拆成三个动作——Refit、Respecify、Hold。

**Refit(重新拟合)**

:保持模型结构不变,只用新数据更新参数。这是最常用的“重训”,成本较低,但并非免费。新数据可能包含异常,导致模型被带偏。常规周期重训通常选这个,但需要验证和发布,每次都有小风险。团队强调,refit 不是无成本的,只是三者中最便宜的。

**Respecify(重新指定)**

:改变模型本身——增删特征、调整结构、修改先验或似然函数。这是大动作,成本高,因为你要替换一个已经观察多年的模型,但几乎所有真正的改进都来自这里。Refit 让好模型保持时效,Respecify 让有结构性错误的模型变正确。

**Hold(保持不动)**

:看着偏差但不做任何操作。这最需要勇气,因为对依赖预测的团队说“我们决定什么都不做”很难。但很多时候这是正确选择。团队的经验是,大多数时候“重训”是按周期自动发生的,很少有人主动在三者中选择,而周期默认选了 refit。

这三种选项各有对应的失败模式,根源都是同一个错误:模型抓住了一次冲击或意外,在冲击原因已经无关后仍然保留。

**追逐噪声(Chasing noise)**

:一个季度预测偏差看起来吓人,就提前重训。但触发提前重训的总是意外,而意外窗口的数据你最不了解。Airbnb 曾有一个市场因为大型活动预订提前,单季数据异常。团队提前 refit,模型把异常当新水平,后续两个季度预测偏高,直到异常数据退出训练窗口才恢复。如果按正常周期等待,异常会和后续正常数据一起拟合,影响小得多。

展示了这种失败:单次尖峰在模型正常范围内,保持不动能让预测保持正确,而 refit 会把模型拉向尖峰,损失几个季度的精度。

**携带幽灵(Carrying ghosts)**

:一个结构性假设在危机时成立,危机过后仍长期潜伏。COVID 期间取消模式发生前所未见的变化,模型学到了。市场行为早已恢复正常,但那个假设还在,每次常规 refit 看起来干净,直到有人发现偏差并 respecify 模型才清除。这是最隐蔽的错误。

显示,当结构无法预见转折时,refit 只能追逐趋势,每个季度 refit 都落在新趋势下方,残差单向,这是结构性问题的信号。

**恐慌性重构(Respec-as-panic)**

:面对真实变化(如主要客源市场的汇率波动),本能反应是重建模型。Airbnb 曾差点这样做,但最终选择放宽先验(prior),让现有模型自己恢复,避免了换成一个更脆弱的新模型——那个新模型是针对即将过去的冲击调出来的。

说明,临时冲击会自行消退,放宽先验让现有模型度过,而全面重构可能引入更不稳定的模型。

这三个教训的核心是:模型维护不是机械地按周期重训,而是需要判断偏差的来源——是临时噪声、过时假设还是结构性变化?对应选择 refit、respecify 还是 hold。对于任何依赖预测模型的团队,理解这些决策的代价和适用场景,比盲目重训更重要。下次你的模型跑偏时,先问一句:它需要的是新数据、新结构,还是只需要你忍住不动?

阅读原文 → 返回 AI 技术文档

内容与图片版权归原作者所有 · 原文: https://medium.com/airbnb-engineering/how-we-knew-covid-was-over-and-what-our-models-had-to-unlearn-c606b9bdb0ab?source=rss----53c7c27702d5---4