字节@漫谈时间序列预测

链接:https://zhuanlan.zhihu.com/p/486343380

模型优化目标为 MAE 时,整体的预测就会比平均值小。部分业务预测偏小跟预测偏多造成的影响是不同的。一般会参考整体的预测偏差,进而使用一些非对称 loss 来进行具体优化。

交叉验证

  • 在时间维度上做前后的 split

[[传统时间序列预测]]

  • [[ARIMA]] 对 AR 部分的残差做移动平均

    • [[Python/package]] pmdarima,通过 AutoML 手段来自动搜索参数
  • [[Prophet]]

  • [[时间序列预测/问题]] #card

    • 对于时序本身有一些性质上的要求,需要结合预处理来做拟合,不是端到端优化

    • 需要对每条序列做拟合预测,性能开销大,数据利用率和泛化能力堪忧,无法做模型复用

    • 较难引入外部变量

    • 多步预测能力比较差

机器学习方法

  • 基于训练窗口的信息来构建特征,转化为表格类预测问题来求解

  • [[Feature Engineering/Time Series Feature]]

    • tsfresh 自动特征工程
  • 模型选择

    • 自动参数优化 Optuna 或 FLAML

    • NN 优势

      • 通过 embedding 学习类别变量

      • loss 设计更加灵活

    • [[Tabular Data]]

    • local 模型和 global 模型取舍

      • local 方法每一个序列都要构建一个单独的模型来训练预测

      • global 使用所有数据进行训练

      • 例子

        • 股票中科技股的趋势和银行股的趋势明显不同

深度学习方法

  • 思路

    • 充分使用多层级维度的信息

    • 只使用原始的序列和其它相关输入信息,基本不做特征工程,希望通过各类模型结构自动学习到时序的隐含表达,进而做到端到端的预测输出

  • 与机器学习方法对比:

    • 机器学习方法一般模型部分处理会相对简单,但涉及到的预处理,特征工程及后处理方面会比较复杂。

    • 在整理 pipeline 层面会相对简单,更提倡 end-to-end 的训练,但模型部分则相对复杂和难以优化。

  • [[Seq2Seq]]

  • [[@WaveNet: A Generative Model for Raw Audio]]

    • [[空洞卷积]] residual connection skip connection 门机制

    • CNN 结构缺乏[[位置编码]]导致对于序列问题预测效果不如 RNN

  • [[LSTNet]] 效果不如特征工程 + fastai 效果好

  • [[DeepAR]] #mark/paper #时间序列专题学习

    • 输出概率分布

    • 亚马逊开源时序预测库 gluon-ts

  • [[N-BEATS]] 单变量时序预测,具有一定的 seasonality,trend 的可解释性 #mark/paper

  • [[@Temporal Fusion Transformers for Interpretable Multi-horizon Time Series Forecasting]] 与树匹敌的深度学习模型 #mark/paper

    • [[Gated Residual Network]]

    • [[Variable Selection Networks]] 特征变量选择网络,类似于树模型做特征选择

      • [[TabNet]] [[NODE]] 也有这种模拟决策树行为的设计
    • 输入特征的系统化设计,

      • 静态类别/连续变量

      • 动态已知类别/连续变量

      • 动态未知类别/连续变量

      • [[Pytorch Forecasting]] 实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
training = TimeSeriesDataSet(
data[lambda x: x.date <= training_cutoff],
time_idx= ..., # column name of time of observation
target= ..., # column name of target to predict
group_ids=[ ... ], # column name(s) for timeseries IDs
max_encoder_length=max_encoder_length, # how much history to use
max_prediction_length=max_prediction_length, # how far to predict into future
# covariates static for a timeseries ID
static_categoricals=[ ... ],
static_reals=[ ... ],
# covariates known and unknown in the future to inform prediction
time_varying_known_categoricals=[ ... ],
time_varying_known_reals=[ ... ],
time_varying_unknown_categoricals=[ ... ],
time_varying_unknown_reals=[ ... ],
)
+ [[@Efficient Automated Deep Learning for Time Series Forecasting]] #mark/paper
  • 没有能大规模应用的深度时序模型

    • [[@Do We Really Need Deep Learning Models for Time Series Forecasting?]] #mark/paper

    • [[@Kaggle forecasting competitions: An overlooked learning opportunity]] #mark/paper

    • [[@Deep Learning for Time Series Forecasting: Tutorial and Literature Survey]] #mark/paper

  • 可能方向

    • 数据增强

      • Time Series Data   Augmentation   for Deep Learning: A Survey
    • 时序问题预训练

      • A network-based transfer learning approach to improve   sales   forecasting of new products

[[AutoML]] 模型的自动选择和调优

  • 因此完善的 AutoML 方案中,也需要包含例如 prior shift, [[covariate shift]], concept drift 等方面的检测与处理,以适应复杂的真实预测场景。

  • [[Life Long Learning]] 模型的学习预测会随着时间的推移不断有新数据的输入

作者

Ryen Xiang

发布于

2024-05-14

更新于

2025-03-15

许可协议


网络回响

评论