时间序列预测方法汇总:从理论到实践(附Kaggle经典比赛方案)
?作者 | Light
學(xué)校 | 中國(guó)科學(xué)院大學(xué)
研究方向 | 機(jī)器學(xué)習(xí)
時(shí)間序列是我最喜歡研究的一種問(wèn)題,這里我列一下時(shí)間序列最常用的方法,包括理論和實(shí)踐兩部分。理論部分大多是各路神仙原創(chuàng)的高贊解讀,這里我就簡(jiǎn)單成呈現(xiàn)在這里,并附上鏈接。實(shí)踐部分是質(zhì)量較高的開(kāi)源代碼,方便大家快速上手。最后,附上一些 kaggle 比賽中比較經(jīng)典的時(shí)序比賽的經(jīng)典解法鏈接,供大家參考和學(xué)習(xí)。
時(shí)序問(wèn)題都看成是回歸問(wèn)題,只是回歸的方式(線性回歸、樹(shù)模型、深度學(xué)習(xí)等)有一定的區(qū)別。
傳統(tǒng)時(shí)序建模
arima 模型是 arma 模型的升級(jí)版;arma 模型只能針對(duì)平穩(wěn)數(shù)據(jù)進(jìn)行建模,而 arima 模型需要先對(duì)數(shù)據(jù)進(jìn)行差分,差分平穩(wěn)后在進(jìn)行建模。這兩個(gè)模型能處理的問(wèn)題還是比較簡(jiǎn)單,究其原因主要是以下兩點(diǎn):
arma/arima 模型歸根到底還是簡(jiǎn)單的線性模型,能表征的問(wèn)題復(fù)雜程度有限;
arma 全名是自回歸滑動(dòng)平均模型,它只能支持對(duì)單變量歷史數(shù)據(jù)的回歸,處理不了多變量的情況。
原理篇:
寫給你的金融時(shí)間序列分析:基礎(chǔ)篇
重點(diǎn)介紹基本的金融時(shí)間序列知識(shí)和 arma 模型
https://zhuanlan.zhihu.com/p/38320827
金融時(shí)間序列入門【完結(jié)篇】 ARCH、GARCH
介紹更為高階的 arch 和 garch 模型
https://zhuanlan.zhihu.com/p/21962996
實(shí)踐篇:
【時(shí)間序列分析】ARMA預(yù)測(cè)GDP的 python實(shí)現(xiàn)
arma 模型快速上手
https://zhuanlan.zhihu.com/p/54799648
machinelearningmastery.com
arch、garch模型快速建模
https://machinelearningmastery.com/develop-arch-and-garch-models-for-time-series-forecasting-in-python/
總結(jié):如果是處理單變量的預(yù)測(cè)問(wèn)題,傳統(tǒng)時(shí)序模型可以發(fā)揮較大的優(yōu)勢(shì);但是如果問(wèn)題或者變量過(guò)多,那么傳統(tǒng)時(shí)序模型就顯得力不從心了。
機(jī)器學(xué)習(xí)模型方法
這類方法以 lightgbm、xgboost 為代表,一般就是把時(shí)序問(wèn)題轉(zhuǎn)換為監(jiān)督學(xué)習(xí),通過(guò)特征工程和機(jī)器學(xué)習(xí)方法去預(yù)測(cè);這種模型可以解決絕大多數(shù)的復(fù)雜的時(shí)序預(yù)測(cè)模型。支持復(fù)雜的數(shù)據(jù)建模,支持多變量協(xié)同回歸,支持非線性問(wèn)題。
不過(guò)這種方法需要較為復(fù)雜的人工特征過(guò)程部分,特征工程需要一定的專業(yè)知識(shí)或者豐富的想象力。特征工程能力的高低往往決定了機(jī)器學(xué)習(xí)的上限,而機(jī)器學(xué)習(xí)方法只是盡可能的逼近這個(gè)上限。特征建立好之后,就可以直接套用樹(shù)模型算法 lightgbm/xgboost,這兩個(gè)模型是十分常見(jiàn)的快速成模方法,除此之外,他們還有以下特點(diǎn):
計(jì)算速度快,模型精度高;
缺失值不需要處理,比較方便;
支持 category 變量;
支持特征交叉。
原理篇:
提升樹(shù)模型:Lightgbm 原理深入探究:
lightgbm 原理
https://blog.csdn.net/anshuai_aw1/article/details/83659932
xgboost 的原理沒(méi)你想像的那么難:
xgboost 原理
https://www.jianshu.com/p/7467e616f227
實(shí)踐篇:
在 Python 中使用 Lightgbm:
lightgbm 模型實(shí)踐
https://zhuanlan.zhihu.com/p/52583923
史上最詳細(xì)的 XGBoost 實(shí)戰(zhàn):
xgboost 模型實(shí)踐
https://zhuanlan.zhihu.com/p/31182879
總結(jié):通過(guò)一系列特征工程后,直接使用機(jī)器學(xué)習(xí)方法,可以解決大多數(shù)的復(fù)雜時(shí)序問(wèn)題;不過(guò)這方法最大的缺點(diǎn)是特征工程可能會(huì)較為繁瑣。
深度學(xué)習(xí)模型方法
這類方法以 LSTM/GRU、seq2seq、wavenet、1D-CNN、transformer為主。深度學(xué)習(xí)中的 LSTM/GRU 模型,就是專門為解決時(shí)間序列問(wèn)題而設(shè)計(jì)的;但是 CNN 模型是本來(lái)解決圖像問(wèn)題的,但是經(jīng)過(guò)演變和發(fā)展,也可以用來(lái)解決時(shí)間序列問(wèn)題。總體來(lái)說(shuō),深度學(xué)習(xí)類模型主要有以下特點(diǎn):
不能包括缺失值,必須要填充缺失值,否則會(huì)報(bào)錯(cuò);
支持特征交叉,如二階交叉,高階交叉等;
需要 embedding 層處理 category 變量,可以直接學(xué)習(xí)到離散特征的語(yǔ)義變量,并表征其相對(duì)關(guān)系;
數(shù)據(jù)量小的時(shí)候,模型效果不如樹(shù)方法;但是數(shù)據(jù)量巨大的時(shí)候,神經(jīng)網(wǎng)絡(luò)會(huì)有更好的表現(xiàn);
神經(jīng)網(wǎng)絡(luò)模型支持在線訓(xùn)練。
實(shí)際上,基于實(shí)際預(yù)測(cè)問(wèn)題,可以設(shè)計(jì)出各式各樣的深度學(xué)習(xí)模型架構(gòu)。假如我們預(yù)測(cè)的時(shí)序問(wèn)題(如預(yù)測(cè)心跳頻率),不僅僅只和統(tǒng)計(jì)類的數(shù)據(jù)有關(guān),還和文本(如醫(yī)師意見(jiàn))以及圖像(如心電圖)等數(shù)據(jù)有關(guān) ,我們就可以把 MLP、CNN、bert 等冗雜在一起,建立更強(qiáng)力的模型。
▲ 圖源:https://www.kaggle.com/c/avito-demand-prediction/discussion/59880
理論篇:
[干貨](méi) 深入淺出 LSTM 及其 Python 代碼實(shí)現(xiàn):
LSTM 原理
https://zhuanlan.zhihu.com/p/104475016
Seq2Seq 原理詳解-早起的小蟲(chóng)子-博客園:
seq2seq 原理
https://www.cnblogs.com/liuxiaochong/p/14399416.html
Wavenet 原理與實(shí)現(xiàn):
wavenet 原理
https://zhuanlan.zhihu.com/p/28849767
CNN 卷積神經(jīng)網(wǎng)絡(luò)如何處理一維時(shí)間序列數(shù)據(jù):
1D-CNN 處理時(shí)序數(shù)據(jù)
https://www.ai8py.com/cnn-in-keras-for-time-sequences.html
Transformer for TimeSeries 時(shí)序預(yù)測(cè)算法詳解:
transformer 時(shí)序預(yù)測(cè)
https://zhuanlan.zhihu.com/p/391337035
實(shí)踐篇:
seq2seq 模型的 python 實(shí)現(xiàn)-基于 seq2seq 模型的自然語(yǔ)言處理應(yīng)用:
seq2seq 模型實(shí)現(xiàn)
https://dataxujing.github.io/seq2seqlearn/chapter3/
machinelearningmastery.com:
LSTM 實(shí)踐
https://machinelearningmastery.com/time-series-prediction-lstm-recurrent-neural-networks-pyth
Conv1d-WaveNet-Forecast Stock price:
wavenet 模型預(yù)測(cè)股票價(jià)格
https://www.kaggle.com/bhavinmoriya/conv1d-wavenet-forecast-stock-price
towardsdatascience.com/:
transformer 時(shí)序預(yù)測(cè)數(shù)據(jù)
https://towardsdatascience.com/how-to-use-transformer-networks-to-build-a-forecasting-model-297f9270e630
Keras documentation:?
Timeseries classification with a Transformer model:transformer 處理時(shí)序數(shù)據(jù)分類
https://keras.io/examples/timeseries/timeseries_transformer_classification/
kaggle.com/fatmakursun/:
CNN 預(yù)測(cè)模型
https://www.kaggle.com/fatmakursun/predict-sales-time-series-with-cnn
總結(jié):深度學(xué)習(xí)模型可以解決基本上所有時(shí)序問(wèn)題,而且模型可以自動(dòng)學(xué)習(xí)特征工程,極大減少了人工;不過(guò)需要較高的模型架構(gòu)能力。
最后我再附上一些比較經(jīng)典的數(shù)據(jù)挖掘比賽鏈接和解決方案,如果能夠理解數(shù)據(jù)和代碼,必會(huì)受益匪淺。如果大家對(duì)某個(gè)比賽解決方案十分感興趣,我后續(xù)會(huì)詳細(xì)解讀。
1)網(wǎng)站流量預(yù)測(cè):
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
2)餐廳客戶量預(yù)測(cè)
特征工程+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
3)開(kāi)放通道預(yù)測(cè)
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
4)肺壓力預(yù)測(cè)
transformer 模型:
https://www.kaggle.com/cdeotte/tensorflow-transformer-0-112
雙向 lstm 模型:
https://www.kaggle.com/tenffe/finetune-of-tensorflow-bidirectional-lstm
時(shí)間序列問(wèn)題博大精深,應(yīng)用場(chǎng)景十分廣泛。實(shí)際上許多預(yù)測(cè)問(wèn)題都可以看做是時(shí)間序列問(wèn)題,比如股票/期貨/外匯價(jià)格預(yù)測(cè),網(wǎng)站/餐館/旅館/交通流量預(yù)測(cè),店鋪商品庫(kù)存/銷量預(yù)測(cè)等等。掌握了時(shí)間序列預(yù)測(cè)方法,你可能就掌管一把洞見(jiàn)未來(lái)的鑰匙。
更多閱讀
#投 稿?通 道#
?讓你的文字被更多人看到?
如何才能讓更多的優(yōu)質(zhì)內(nèi)容以更短路徑到達(dá)讀者群體,縮短讀者尋找優(yōu)質(zhì)內(nèi)容的成本呢?答案就是:你不認(rèn)識(shí)的人。
總有一些你不認(rèn)識(shí)的人,知道你想知道的東西。PaperWeekly 或許可以成為一座橋梁,促使不同背景、不同方向的學(xué)者和學(xué)術(shù)靈感相互碰撞,迸發(fā)出更多的可能性。?
PaperWeekly 鼓勵(lì)高校實(shí)驗(yàn)室或個(gè)人,在我們的平臺(tái)上分享各類優(yōu)質(zhì)內(nèi)容,可以是最新論文解讀,也可以是學(xué)術(shù)熱點(diǎn)剖析、科研心得或競(jìng)賽經(jīng)驗(yàn)講解等。我們的目的只有一個(gè),讓知識(shí)真正流動(dòng)起來(lái)。
📝?稿件基本要求:
? 文章確系個(gè)人原創(chuàng)作品,未曾在公開(kāi)渠道發(fā)表,如為其他平臺(tái)已發(fā)表或待發(fā)表的文章,請(qǐng)明確標(biāo)注?
? 稿件建議以?markdown?格式撰寫,文中配圖以附件形式發(fā)送,要求圖片清晰,無(wú)版權(quán)問(wèn)題
? PaperWeekly 尊重原作者署名權(quán),并將為每篇被采納的原創(chuàng)首發(fā)稿件,提供業(yè)內(nèi)具有競(jìng)爭(zhēng)力稿酬,具體依據(jù)文章閱讀量和文章質(zhì)量階梯制結(jié)算
📬?投稿通道:
? 投稿郵箱:hr@paperweekly.site?
? 來(lái)稿請(qǐng)備注即時(shí)聯(lián)系方式(微信),以便我們?cè)诟寮x用的第一時(shí)間聯(lián)系作者
? 您也可以直接添加小編微信(pwbot02)快速投稿,備注:姓名-投稿
△長(zhǎng)按添加PaperWeekly小編
🔍
現(xiàn)在,在「知乎」也能找到我們了
進(jìn)入知乎首頁(yè)搜索「PaperWeekly」
點(diǎn)擊「關(guān)注」訂閱我們的專欄吧
·
總結(jié)
以上是生活随笔為你收集整理的时间序列预测方法汇总:从理论到实践(附Kaggle经典比赛方案)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 神祗的祗怎么读?
- 下一篇: 科研实习 | 中国科学院深圳先进技术研究