時間序列是我最喜歡研究的一種問題,這裡我列一下時間序列最常用的方法,包括理論和實踐兩部分。理論部分大多是各路神仙原創的高贊解讀,這裡我就簡單成呈現在這裡,並附上鏈接。實踐部分是質量較高的開源代碼,方便大傢快速上手。最後,附上一些kaggle比賽中比較經典的時序比賽的經典解法鏈接,供大傢參考和學習。
時序問題都看成是回歸問題,隻是回歸的方式(線性回歸、樹模型、深度學習等)有一定的區別。
1 傳統時序建模,如arma模型或者arima模型
arima模型是arma模型的升級版;arma模型隻能針對平穩數據進行建模,而arima模型需要先對數據進行差分,差分平穩後在進行建模。這兩個模型能處理的問題還是比較簡單,究其原因主要是以下兩點:
原理篇:
寫給你的金融時間序列分析:基礎篇:重點介紹基本的金融時間序列知識和arma模型
金融時間序列入門【完結篇】 ARCH、GARCH:介紹更為高階的arch和garch模型
實踐篇:
【時間序列分析】ARMA預測GDP的python實現:arma模型快速上手
http://machinelearningmastery.com/develop-arch-and-garch-models-for-time-series-forecasting-in-python/:arch、garch模型快速建模
總結:如果是處理單變量的預測問題,傳統時序模型可以發揮較大的優勢;但是如果問題或者變量過多,那麼傳統時序模型就顯得力不從心瞭。
2 機器學習模型方法,這類方法以lightgbm、xgboost為代表
這類方法一般就是把時序問題轉換為監督學習,通過特征工程和機器學習方法去預測;這種模型可以解決絕大多數的復雜的時序預測模型。支持復雜的數據建模,支持多變量協同回歸,支持非線性問題。
不過這種方法需要較為復雜的人工特征過程部分,特征工程需要一定的專業知識或者豐富的想象力。特征工程能力的高低往往決定瞭機器學習的上限,而機器學習方法隻是盡可能的逼近這個上限。特征建立好之後,就可以直接套用樹模型算法lightgbm/xgboost,這兩個模型是十分常見的快速成模方法,除此之外,他們還有以下特點:
原理篇:
提升樹模型:Lightgbm原理深入探究:lightgbm原理
xgboost的原理沒你想像的那麼難:xgboost原理
實踐篇:
在Python中使用Lightgbm:lightgbm模型實踐
史上最詳細的XGBoost實戰:xgboost模型實踐
總結:通過一系列特征工程後,直接使用機器學習方法,可以解決大多數的復雜時序問題;不過這方法最大的缺點是特征工程可能會較為繁瑣。
3 深度學習模型方法,這類方法以LSTM/GRU、seq2seq、wavenet、1D-CNN、transformer為主
深度學習中的LSTM/GRU模型,就是專門為解決時間序列問題而設計的;但是CNN模型是本來解決圖像問題的,但是經過演變和發展,也可以用來解決時間序列問題。總體來說,深度學習類模型主要有以下特點:
實際上,基於實際預測問題,可以設計出各式各樣的深度學習模型架構。假如我們預測的時序問題(如預測心跳頻率),不僅僅隻和統計類的數據有關,還和文本(如醫師意見)以及圖像(如心電圖)等數據有關 ,我們就可以把MLP、CNN、bert等冗雜在一起,建立更強力的模型。
52b8b29128d243f45232d172f7e1667bhttp://www.kaggle.com/c/avito-demand-prediction/discussion/59880
理論篇:
[幹貨]深入淺出LSTM及其Python代碼實現:LSTM原理
Seq2Seq原理詳解 - 早起的小蟲子 - 博客園: seq2seq原理
Wavenet原理與實現: wavenet原理
CNN卷積神經網絡如何處理一維時間序列數據: 1D-CNN處理時序數據
Transformer for TimeSeries時序預測算法詳解: transformer時序預測
實踐篇:
seq2seq模型的python實現 - 基於seq2seq模型的自然語言處理應用: seq2seq模型實現
http://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-python-keras/: LSTM實踐
Conv1d - WaveNet - Forecast Stock price: wavenet模型預測股票價格
http://towardsdatascience.com/how-to-use-transformer-networks-to-build-a-forecasting-model-297f9270e630:transformer時序預測數據
Keras documentation: Timeseries classification with a Transformer model: transformer處理時序數據分類
http://www.kaggle.com/fatmakursun/predict-sales-time-series-with-cnn:CNN預測模型
總結:深度學習模型可以解決基本上所有時序問題,而且模型可以自動學習特征工程,極大減少瞭人工;不過需要較高的模型架構能力。
最後我再附上一些比較經典的數據挖掘比賽鏈接和解決方案,如果能夠理解數據和代碼,必會受益匪淺。如果大傢對某個比賽解決方案十分感興趣,我後續會詳細解讀。
1)網站流量預測:
http://github.com/Arturus/kaggle-web-traffic RNN seq2seq模型
http://github.com/jfpuget/Kaggle/tree/master/WebTrafficPrediction xgboost和MLP模型
http://github.com/oseiskar/simdkalman kalman濾波
http://github.com/sjvasquez/web-traffic-forecasting CNN模型
2)餐廳客戶量預測
5d8e1533511fcb46d554b3f4b9847797
http://www.kaggle.com/plantsgo/solution-public-0-471-private-0-505 特征工程+lgb
http://www.kaggle.com/pureheart/1st-place-lgb-model-public-0-470-private-0-502 特征工程+lgb
3)開放通道預測
4f3ce511e1b402269e004a63928f7629
http://www.kaggle.com/vicensgaitan/2-wavenet-swa wavenet模型
http://www.kaggle.com/kmat2019/u-net-1d-cnn-with-keras 1D-CNN模型
http://www.kaggle.com/brandenkmurray/seq2seq-rnn-with-gru seq2seq模型
4)肺壓力預測
http://www.kaggle.com/cdeotte/tensorflow-transformer-0-112 transformer模型
http://www.kaggle.com/tenffe/finetune-of-tensorflow-bidirectional-lstm 雙向lstm模型
時間序列問題博大精深,應用場景十分廣泛。實際上許多預測問題都可以看做是時間序列問題,比如股票/期貨/外匯價格預測,網站/餐館/旅館/交通流量預測,店鋪商品庫存/銷量預測等等。掌握瞭時間序列預測方法,你可能就掌管一把洞見未來的鑰匙。
我是 @LIGHT,擅長人工智能/數據科學/量化交易,歡迎關註點贊&聯系溝通,相互交流&共同進步!!!
更多相關資料請見下方文章卡片,專註於人工智能/數據科學/量化交易幹貨分享~