11.4 趋势、季节性、验证与预测基线
第 11.3 节已经建立规则序列和遵守可用时刻的尾随特征。现在可以提出两个不同问题:哪些结构能够描述历史,以及一个流程能多好地预测真正更晚的数值?分解回答第一个,滚动前向验证回答第二个。
分离趋势、季节与余项
时间序列通常包含缓慢变化的水平、重复日历模式与不规则变化。加性结构(additive structure)写成:
其中 是趋势, 是季节项, 是余项。加性结构假设季节振幅在目标单位中大致恒定。如果每周峰值随着总体水平一起增大,乘性结构(multiplicative structure)可能更合适:
对于正值序列,取对数会把乘法转成加法,因此可以比较对数尺度上的加性分解。
周期(period)表示一个季节循环包含多少个观测。每日数据的每周模式使用 7,小时数据的每日模式使用 24。建立频率之前,数字没有日历含义;在不规则事件上随意指定 7 并不会创造每周模型。
基于 LOESS 的季节趋势分解(Seasonal and Trend decomposition using LOESS, STL)会估计加性趋势、季节项与余项。稳健选项可以降低孤立极端值对趋势和季节项的影响:
from statsmodels.tsa.seasonal import STL
development_series = daily.loc[:development_cutoff, "orders"].asfreq("D")
decomposition = STL(
development_series.interpolate(limit=2),
period=7,
robust=True,
).fit()
decomposition.plot()这里的插值是明确且有限的假设。要保留覆盖标志,不能跨过长时间停机。如果分解会影响预测特征或模型选择,最终测试时段就必须排除在分解决策之外。
分解实验不是参数面板,而是一张绘图台。你要用铅笔塑造趋势,再画出可重复使用的七相位季节印模;每次落笔后,系统只按加法恒等式重新计算余项。残留的斜坡或周波纹会暴露尚未解释的结构,而多个低误差草图也会说明分解并不天然唯一。
有用的余项应减少可见结构,但“看起来随机”并不能证明独立。还要检查时间图、分布、自相关、方差变化与已知事件。残差尖峰可能是数据错误、促销、停机、节假日或真正意外;删除之前必须验证背景。
分解主要用于描述,而且可能使用能看见时间点两侧的居中平滑。这些趋势估计不会自动在实时预测中可用。预测特征仍要在每个训练窗口内部、只用过去信息生成。
让每个预测先战胜时间有效的基线
复杂预测不能仅凭“能画出一条线”就证明有用。应在同一预测协议下比较简单规则:
- 均值基线:预测训练窗口均值。
- 最后值朴素法:重复最近一个可用观测。
- 季节朴素法:重复上一个完整周期中对应位置的值。
- 尾随均值基线:只使用预测原点已经可用的近期历史平均。
最强简单基线取决于序列。每周订单需求中,季节朴素法可能远比全局均值难以战胜。
预测协议必须定义原点、跨度、更新策略与 gap。一次固定原点 14 日预测只生成一次,不能使用这 14 日内部陆续到达的真实值更新;滚动一步协议可以在每个真实值可用后更新。混合两种协议会让结果无法比较。
随机训练/测试划分不适合预测未来,因为训练数据可能位于验证时刻之后。滚动前向划分(walk-forward split)保证每个验证窗口都晚于对应训练历史。TimeSeriesSplit 默认产生扩展训练集,并支持 test_size、gap 和 max_train_size:
from sklearn.model_selection import TimeSeriesSplit
splitter = TimeSeriesSplit(
n_splits=5,
test_size=14,
gap=1,
max_train_size=180,
)要让各折按时长比较,样本必须等间隔。如果事件不规则,应先建立有依据的规则聚合,或用时间戳而不是行数实现截止点。
验证实验会在四个连续预测原点封存接下来七个观测。每到一个原点,你只能根据可见历史画出并提交预测,之后才能揭晓未来并与季节朴素基线评分。已提交折会永久锁定,因此真实未来无法倒流进正在评估的预测;逐折计分还能暴露方法随时间的不稳定性。
误差要同时按折和预测步长报告。MAE 表示目标单位中的典型绝对误差,RMSE 更强调大误差。MASE 用朴素法的样本内误差尺度除模型 MAE,在声明分母与季节 lag 后可以辅助跨序列比较。百分比误差在接近零时表现很差,不能机械选择。
应画真实与预测轨迹、随时间变化的残差、各 horizon 误差与各折分布。单个均值会隐藏趋势突变后的失败,或只在长跨度发生的失败。预测区间要在后续窗口中用经验覆盖率与宽度评估,不能只看是否对称漂亮。
使用开发折选定特征定义、预处理、模型、超参数、更新策略与基线后,在全部开发历史上重拟合,封存最终时段只评估一次。记录准确训练截止、数据版本、时区、预测原点、跨度与再训练计划,结果才能复现。
本章也完成了整门课的建模主线。我们学习了无标签几何,用 PCA 压缩它,构建日历有效特征,分离历史结构,并在不允许明天泄漏进今天的条件下评估未来预测。定义问题、守住数据边界、把行为画出来、比较基线并声明局限,这套纪律连接了课程中的每一次分析。