編輯| paperweekly
時間序列是我最喜歡研究的一種問題,這里我列一下時間序列最常用的方法,,包括理論和實(shí)踐兩部分。理論部分大多是各路神仙原創(chuàng)的高贊解讀,,這里我就簡單成呈現(xiàn)在這里,,并附上鏈接。實(shí)踐部分是質(zhì)量較高的開源代碼,,方便大家快速上手,。最后,附上一些 kaggle 比賽中比較經(jīng)典的時序比賽的經(jīng)典解法鏈接,,供大家參考和學(xué)習(xí),。時序問題都看成是回歸問題,只是回歸的方式(線性回歸,、樹模型,、深度學(xué)習(xí)等)有一定的區(qū)別,。arima 模型是 arma 模型的升級版;arma 模型只能針對平穩(wěn)數(shù)據(jù)進(jìn)行建模,,而 arima 模型需要先對數(shù)據(jù)進(jìn)行差分,,差分平穩(wěn)后在進(jìn)行建模。這兩個模型能處理的問題還是比較簡單,,究其原因主要是以下兩點(diǎn):- arma/arima 模型歸根到底還是簡單的線性模型,,能表征的問題復(fù)雜程度有限;
- arma 全名是自回歸滑動平均模型,,它只能支持對單變量歷史數(shù)據(jù)的回歸,,處理不了多變量的情況。
重點(diǎn)介紹基本的金融時間序列知識和 arma 模型 https://.comzhihuzhuanlan./p/38320827金融時間序列入門【完結(jié)篇】 ARCH,、GARCH介紹更為高階的 arch 和 garch 模型 https://.comzhihuzhuanlan./p/21962996【時間序列分析】ARMA預(yù)測GDP的 python實(shí)現(xiàn)arma 模型快速上手 https://.comzhihuzhuanlan./p/54799648arch,、garch模型快速建模 https:///develop-arch-and-garch-models-for-time-series-forecasting-in-python/ 總結(jié):如果是處理單變量的預(yù)測問題,傳統(tǒng)時序模型可以發(fā)揮較大的優(yōu)勢,;但是如果問題或者變量過多,,那么傳統(tǒng)時序模型就顯得力不從心了。這類方法以 lightgbm,、xgboost 為代表,,一般就是把時序問題轉(zhuǎn)換為監(jiān)督學(xué)習(xí),通過特征工程和機(jī)器學(xué)習(xí)方法去預(yù)測,;這種模型可以解決絕大多數(shù)的復(fù)雜的時序預(yù)測模型,。支持復(fù)雜的數(shù)據(jù)建模,支持多變量協(xié)同回歸,,支持非線性問題,。不過這種方法需要較為復(fù)雜的人工特征過程部分,特征工程需要一定的專業(yè)知識或者豐富的想象力,。特征工程能力的高低往往決定了機(jī)器學(xué)習(xí)的上限,,而機(jī)器學(xué)習(xí)方法只是盡可能的逼近這個上限。特征建立好之后,,就可以直接套用樹模型算法 lightgbm/xgboost,,這兩個模型是十分常見的快速成模方法,除此之外,,他們還有以下特點(diǎn):lightgbm 原理 https://blog.csdn.net/anshuai_aw1/article/details/83659932xgboost 的原理沒你想像的那么難: xgboost 原理 https://www.jianshu.com/p/7467e616f227 lightgbm 模型實(shí)踐 https://.comzhihuzhuanlan./p/52583923史上最詳細(xì)的 XGBoost 實(shí)戰(zhàn):xgboost 模型實(shí)踐 https://.comzhihuzhuanlan./p/31182879總結(jié):通過一系列特征工程后,,直接使用機(jī)器學(xué)習(xí)方法,,可以解決大多數(shù)的復(fù)雜時序問題;不過這方法最大的缺點(diǎn)是特征工程可能會較為繁瑣,。這類方法以 LSTM/GRU,、seq2seq、wavenet,、1D-CNN,、transformer為主。深度學(xué)習(xí)中的 LSTM/GRU 模型,,就是專門為解決時間序列問題而設(shè)計(jì)的,;但是 CNN 模型是本來解決圖像問題的,但是經(jīng)過演變和發(fā)展,,也可以用來解決時間序列問題,。總體來說,,深度學(xué)習(xí)類模型主要有以下特點(diǎn):- 不能包括缺失值,,必須要填充缺失值,否則會報(bào)錯,;
- 需要 embedding 層處理 category 變量,,可以直接學(xué)習(xí)到離散特征的語義變量,并表征其相對關(guān)系,;
- 數(shù)據(jù)量小的時候,,模型效果不如樹方法;但是數(shù)據(jù)量巨大的時候,,神經(jīng)網(wǎng)絡(luò)會有更好的表現(xiàn),;
- 神經(jīng)網(wǎng)絡(luò)模型支持在線訓(xùn)練。
實(shí)際上,,基于實(shí)際預(yù)測問題,可以設(shè)計(jì)出各式各樣的深度學(xué)習(xí)模型架構(gòu),。假如我們預(yù)測的時序問題(如預(yù)測心跳頻率),,不僅僅只和統(tǒng)計(jì)類的數(shù)據(jù)有關(guān),還和文本(如醫(yī)師意見)以及圖像(如心電圖)等數(shù)據(jù)有關(guān) ,,我們就可以把 MLP,、CNN、bert 等冗雜在一起,,建立更強(qiáng)力的模型,。▲ 圖源:https://www./c/avito-demand-prediction/discussion/59880
[干貨] 深入淺出 LSTM 及其 Python 代碼實(shí)現(xiàn):LSTM 原理 https://.comzhihuzhuanlan./p/104475016seq2seq 原理 https://www.cnblogs.com/liuxiaochong/p/14399416.htmlWavenet 原理與實(shí)現(xiàn):wavenet 原理 https://.comzhihuzhuanlan./p/28849767CNN 卷積神經(jīng)網(wǎng)絡(luò)如何處理一維時間序列數(shù)據(jù):1D-CNN 處理時序數(shù)據(jù) https://www./cnn-in-keras-for-time-sequences.htmlTransformer for TimeSeries 時序預(yù)測算法詳解:transformer 時序預(yù)測 https://.comzhihuzhuanlan./p/391337035seq2seq 模型的 python 實(shí)現(xiàn)-基于 seq2seq 模型的自然語言處理應(yīng)用:seq2seq 模型實(shí)現(xiàn) https://dataxujing./seq2seqlearn/chapter3/LSTM 實(shí)踐 https:///time-series-prediction-lstm-recurrent-neural-networks-pythConv1d-WaveNet-Forecast Stock price:wavenet 模型預(yù)測股票價(jià)格 https://www./bhavinmoriya/conv1d-wavenet-forecast-stock-pricetransformer 時序預(yù)測數(shù)據(jù) https:///how-to-use-transformer-networks-to-build-a-forecasting-model-297f9270e630 Timeseries classification with a Transformer model:transformer 處理時序數(shù)據(jù)分類 https:///examples/timeseries/timeseries_transformer_classification/CNN 預(yù)測模型 https://www./fatmakursun/predict-sales-time-series-with-cnn總結(jié):深度學(xué)習(xí)模型可以解決基本上所有時序問題,,而且模型可以自動學(xué)習(xí)特征工程,極大減少了人工,;不過需要較高的模型架構(gòu)能力,。最后我再附上一些比較經(jīng)典的數(shù)據(jù)挖掘比賽鏈接和解決方案,如果能夠理解數(shù)據(jù)和代碼,,必會受益匪淺,。如果大家對某個比賽解決方案十分感興趣,我后續(xù)會詳細(xì)解讀,。https://github.com/Arturus/kaggle-web-traffichttps://github.com/jfpuget/Kaggle/tree/master/WebTrafficPredictionhttps://github.com/oseiskar/simdkalmanhttps://github.com/sjvasquez/web-traffic-forecastinghttps://www./plantsgo/solution-public-0-471-private-0-505https://www./pureheart/1st-place-lgb-model-public-0-470-private-0-502https://www./vicensgaitan/2-wavenet-swahttps://www./kmat2019/u-net-1d-cnn-with-kerashttps://www./brandenkmurray/seq2seq-rnn-with-gruhttps://www./cdeotte/tensorflow-transformer-0-112https://www./tenffe/finetune-of-tensorflow-bidirectional-lstm時間序列問題博大精深,,應(yīng)用場景十分廣泛。實(shí)際上許多預(yù)測問題都可以看做是時間序列問題,,比如股票/期貨/外匯價(jià)格預(yù)測,,網(wǎng)站/餐館/旅館/交通流量預(yù)測,店鋪商品庫存/銷量預(yù)測等等,。掌握了時間序列預(yù)測方法,,你可能就掌管一把洞見未來的鑰匙。
|