预测模型入门:从三条曲线到一次校准
两年前接手一个门店周销量预测任务,历史数据有104周。我一开始直接上ARIMA,结果误差比“上周卖多少这周就备多少”的朴素法还高。后来把数据画成三条线——原始值、4周移动平均、去年同期——才发现问题:每年第7周和第42周各有一个尖峰,是促销,不是自然走势。剔除这两周后重新拟合,平均绝对百分比误差从23%降到12%。这个教训很简单:数据里的异常点不处理,再好的模型也学歪。
做预测之前,先给数据做两件事:画图、算缺失。画图能看出走势是趋势型、季节型还是平稳型。比如某城市共享单车日订单量,工作日早高峰明显,周末午后集中,这是双重季节。缺失值方面,如果连续缺超过3个点,插值不如直接标记为不可用。我见过有人用均值填充一个连续缺了11天的气温序列,结果那段时间的预测全部偏高4度以上。数据的质量决定了预测的天花板,模型只是逼近那个天花板。
选择模型时,一个实用的判断是看预测步长。一步预测(明天)用指数平滑通常够用;多步预测(未来8周)要考虑误差累积,这时带季节项的SARIMA或梯度提升树更合适。但别急着上深度学习。我在一个只有280条记录的月度数据上试过LSTM,训练集误差0.8%,测试集误差19%,而简单的 Holt-Winters 测试误差是9%。小样本下,参数少的模型往往更稳。
训练完成不等于结束。连续三个月,我每周记录预测值和实际值的偏差,画成控制图。有两次偏差连续7天同向,说明模型漏掉了新出现的走势——一次是竞争对手降价,一次是平台改了推荐规则。这时候要触发重新训练,而不是等季度复盘。校准的另一个动作是滚动回测:用前80周训练,后24周做样本外测试,每预测一周就把真实值并入训练集。这样得到的误差分布,比单次划分更接近真实场景。
观察到一个常见误区:把预测精度和业务价值混为一谈。某次促销备货,模型预测销量会涨40%,实际涨了52%。从误差看偏了12个百分点,但备货量按预测值加15%安全库存,缺货率反而比按去年同期经验备货降低了6个百分点。预测不需要绝对准确,它需要比现有决策方式多提供一点信息。反过来,如果预测结果和业务直觉完全相反,先别改模型,去查数据管道——我遇到过一次,是门店系统时区设置错误,把前一天的订单记到了预测日。
最后说一个朴素但有效的习惯:每次预测输出三个数——点预测、80%区间下限、上限。比如预测下周销量1200件,区间是1050到1380。这比只给一个数字更有用,因为决策者能根据区间宽度判断风险。如果区间突然变宽,比如从15%扩大到35%,说明近期数据波动加剧,模型对自己没把握。这本身就是一条值得关注的观察线索。
入门阶段,把80%精力花在理解数据和评估误差上,20%花在选模型上。工具用Excel加Python的statsmodels就足够跑通大部分场景。真正难的不是调参,而是判断什么时候该信模型,什么时候该信业务判断。我的经验是:模型告诉你“如果一切照旧会怎样”,业务判断告诉你“接下来会发生什么不同”。两者结合,预测才不只是数字游戏。