字节@漫谈时间序列预测

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

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

交叉验证

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

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

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

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

[[Prophet]]

[[时间序列预测/问题]]

  • 对于时序本身有一些性质上的要求,需要结合预处理来做拟合,不是端到端优化
  • 需要对每条序列做拟合预测,性能开销大,数据利用率和泛化能力堪忧,无法做模型复用
  • 较难引入外部变量
  • 多步预测能力比较差

机器学习方法

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

[[Feature Engineering/Time Series Feature]]

  • tsfresh 自动特征工程

模型选择

  • 自动参数优化 Optuna 或 FLAML
  • NN 优势
    • 通过 embedding 学习类别变量
    • loss 设计更加灵活
  • [[Tabular Data]]
  • local 模型和 global 模型取舍
    • local 方法每一个序列都要构建一个单独的模型来训练预测
    • global 使用所有数据进行训练
    • 例子
      • 股票中科技股的趋势和银行股的趋势明显不同

深度学习方法

思路

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

与机器学习方法对比:

  • 机器学习方法一般模型部分处理会相对简单,但涉及到的预处理,特征工程及后处理方面会比较复杂。
  • 在整理 pipeline 层面会相对简单,更提倡 end-to-end 的训练,但模型部分则相对复杂和难以优化。

[[Seq2Seq]]

  • [[Web Traffic Time Series Forecasting 1st place solution]]

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

  • [[空洞卷积]] residual connection skip connection 门机制
  • CNN 结构缺乏[[位置编码]]导致对于序列问题预测效果不如 RNN

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

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

  • 输出概率分布
    • [[quantile regression]] ngboost LightGBMLSS 等库在 GBDT 模型上实现概率预测输出。
  • 亚马逊开源时序预测库 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

更新于

2024-05-14

许可协议


网络回响

评论