时间序列预测方法及代码总结!
时序问题都看成是回归问题,只是回归的方式(线性回归、树模型、深度学习等)有一定的区别。
一、传统时序建模
-
arma/arima 模型归根到底还是简单的线性模型,能表征的问题复杂程度有限;
-
arma 全名是自回归滑动平均模型,它只能支持对单变量历史数据的回归,处理不了多变量的情况。
重点介绍基本的金融时间序列知识和 arma 模型
https://zhuanlan.zhihu.com/p/38320827
介绍更为高阶的 arch 和 garch 模型
https://zhuanlan.zhihu.com/p/21962996
arma 模型快速上手
https://zhuanlan.zhihu.com/p/54799648
arch、garch模型快速建模
https://machinelearningmastery.com/develop-arch-and-garch-models-for-time-series-forecasting-in-python/
二、机器学习模型方法
这类方法以 lightgbm、xgboost 为代表,一般就是把时序问题转换为监督学习,通过特征工程和机器学习方法去预测;这种模型可以解决绝大多数的复杂的时序预测模型。支持复杂的数据建模,支持多变量协同回归,支持非线性问题。
不过这种方法需要较为复杂的人工特征过程部分,特征工程需要一定的专业知识或者丰富的想象力。特征工程能力的高低往往决定了机器学习的上限,而机器学习方法只是尽可能的逼近这个上限。特征建立好之后,就可以直接套用树模型算法 lightgbm/xgboost,这两个模型是十分常见的快速成模方法,除此之外,他们还有以下特点:
-
计算速度快,模型精度高;
-
缺失值不需要处理,比较方便;
-
支持 category 变量;
支持特征交叉。
lightgbm 原理
https://blog.csdn.net/anshuai_aw1/article/details/83659932
xgboost 的原理没你想像的那么难:
xgboost 原理
https://www.jianshu.com/p/7467e616f227
lightgbm 模型实践
https://zhuanlan.zhihu.com/p/52583923
xgboost 模型实践
https://zhuanlan.zhihu.com/p/31182879
三、深度学习模型方法
-
不能包括缺失值,必须要填充缺失值,否则会报错;
-
支持特征交叉,如二阶交叉,高阶交叉等;
-
需要 embedding 层处理 category 变量,可以直接学习到离散特征的语义变量,并表征其相对关系;
-
数据量小的时候,模型效果不如树方法;但是数据量巨大的时候,神经网络会有更好的表现;
-
神经网络模型支持在线训练。
实际上,基于实际预测问题,可以设计出各式各样的深度学习模型架构。假如我们预测的时序问题(如预测心跳频率),不仅仅只和统计类的数据有关,还和文本(如医师意见)以及图像(如心电图)等数据有关 ,我们就可以把 MLP、CNN、bert 等冗杂在一起,建立更强力的模型。

▲ 图源:https://www.kaggle.com/c/avito-demand-prediction/discussion/59880
LSTM 原理
https://zhuanlan.zhihu.com/p/104475016
seq2seq 原理
https://www.cnblogs.com/liuxiaochong/p/14399416.html
wavenet 原理
https://zhuanlan.zhihu.com/p/28849767
1D-CNN 处理时序数据
https://www.ai8py.com/cnn-in-keras-for-time-sequences.html
transformer 时序预测
https://zhuanlan.zhihu.com/p/391337035
seq2seq 模型实现
https://dataxujing.github.io/seq2seqlearn/chapter3/
LSTM 实践
https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-pyth
wavenet 模型预测股票价格
https://www.kaggle.com/bhavinmoriya/conv1d-wavenet-forecast-stock-price
transformer 时序预测数据
https://towardsdatascience.com/how-to-use-transformer-networks-to-build-a-forecasting-model-297f9270e630
Timeseries classification with a Transformer model:transformer 处理时序数据分类
https://keras.io/examples/timeseries/timeseries_transformer_classification/
CNN 预测模型
https://www.kaggle.com/fatmakursun/predict-sales-time-series-with-cnn
最后我再附上一些比较经典的数据挖掘比赛链接和解决方案,如果能够理解数据和代码,必会受益匪浅。如果大家对某个比赛解决方案十分感兴趣,我后续会详细解读。

RNN seq2seq 模型:
https://github.com/Arturus/kaggle-web-traffic
xgboost 和 MLP 模型:
https://github.com/jfpuget/Kaggle/tree/master/WebTrafficPrediction
kalman 滤波:
https://github.com/oseiskar/simdkalman
CNN 模型:
https://github.com/sjvasquez/web-traffic-forecasting

特征工程+lgb:
https://www.kaggle.com/plantsgo/solution-public-0-471-private-0-505
特征工程+lgb:
https://www.kaggle.com/pureheart/1st-place-lgb-model-public-0-470-private-0-502

wavenet 模型:
https://www.kaggle.com/vicensgaitan/2-wavenet-swa
1D-CNN 模型:
https://www.kaggle.com/kmat2019/u-net-1d-cnn-with-keras
seq2seq 模型:
https://www.kaggle.com/brandenkmurray/seq2seq-rnn-with-gru

transformer 模型:
https://www.kaggle.com/cdeotte/tensorflow-transformer-0-112
双向 lstm 模型:
https://www.kaggle.com/tenffe/finetune-of-tensorflow-bidirectional-lstm
评论
