本文基于知乎作者Carrot Wait的文章,綜合其它網(wǎng)絡(luò)博主的意見(jiàn)而成。包括知乎用戶(hù)【nr5iT5】、CSDN用戶(hù)【程序媛了了】、知乎用戶(hù)【李東】等。
原文鏈接https://zhuanlan.zhihu.com/p/690397917
本文旨在綜述當(dāng)前時(shí)間序列分析領(lǐng)域內(nèi)幾種重要的Python庫(kù),包括Prophet、tslearn、sktime、tsfresh、Darts、和Kats,tsfel以及PyFlux。這些庫(kù)各具特色,覆蓋了從統(tǒng)計(jì)建模、機(jī)器學(xué)習(xí)方法到自動(dòng)化特征提取等多個(gè)方面,適用于不同的應(yīng)用場(chǎng)景和需求。(按GitHub☆排名)
Prophet
Prophet是Facebook開(kāi)發(fā)的一個(gè)時(shí)間序列預(yù)測(cè)工具,旨在處理具有強(qiáng)季節(jié)性影響的時(shí)間序列數(shù)據(jù)。它基于一個(gè)加法模型,適用于年度、周度、日度的季節(jié)性變化,以及假日效應(yīng),能夠自動(dòng)處理缺失數(shù)據(jù)和趨勢(shì)變化。
基本算法模型:
模型整體由三部分組成:
:growth(增長(zhǎng)趨勢(shì))
:seasonality(李節(jié)趨勢(shì))
:holidays(節(jié)假日對(duì)預(yù)測(cè)值的影響)
主要功能:自動(dòng)預(yù)測(cè)、處理季節(jié)性效應(yīng)、調(diào)整趨勢(shì)變化、對(duì)抗異常值和缺失數(shù)據(jù)。
優(yōu)勢(shì):速度快、準(zhǔn)確度高、完全自動(dòng)化、易于調(diào)整預(yù)測(cè)、支持R和Python。
劣勢(shì):可能不適用于非季節(jié)性強(qiáng)烈的時(shí)間序列、對(duì)新用戶(hù)而言參數(shù)調(diào)整可能有挑戰(zhàn)、模型透明度較低(作為黑盒模型)。
網(wǎng)站:Prophet | Forecasting at scale. (facebook.github.io)
源碼地址:https://github.com/facebook/prophet
GitHub☆:17.7k
Tsfresh
tsfresh 是一個(gè)自動(dòng)化提取大量時(shí)間序列特征的Python庫(kù)。它專(zhuān)門(mén)設(shè)計(jì)來(lái)識(shí)別時(shí)間序列中哪些特征對(duì)于回歸或分類(lèi)任務(wù)是有意義的,從而減少手動(dòng)特征工程的工作量。其主要功能包括自動(dòng)計(jì)算多種時(shí)間序列特征、評(píng)估這些特征對(duì)模型的重要性,并支持與scikit-learn兼容的轉(zhuǎn)換器。tsfresh 的優(yōu)勢(shì)在于能夠自動(dòng)識(shí)別和提取有用的特征,幫助提高模型性能,特別適合于需要處理大量時(shí)間序列數(shù)據(jù)的場(chǎng)景。然而,自動(dòng)提取的大量特征可能需要進(jìn)一步篩選來(lái)確定最相關(guān)的特征集。 tsfresh本身是不能用于實(shí)現(xiàn)時(shí)序預(yù)測(cè)或者時(shí)序分類(lèi)等任務(wù)的,但可以基于其特征提取的結(jié)果完成后續(xù)的操作 。
網(wǎng)站:tsfresh — tsfresh 0.20.2.post0.dev4+g3da2360 documentation
源碼地址:https://github.com/blue-yonder/tsfresh
GitHub☆:8.1k
Sktime
sktime 是一個(gè)專(zhuān)為時(shí)間序列分析而構(gòu)建的Python庫(kù),提供了一系列工具和算法來(lái)處理、分析和預(yù)測(cè)時(shí)間序列數(shù)據(jù)。
雖然sktime與tslearn類(lèi)似,同樣 延續(xù)了sklearn的API風(fēng)格(例如模型訓(xùn)練用fit、預(yù)測(cè)用predict,評(píng)分用score等等),但在功能上sktime卻并沒(méi)有太多sklearn中的元素,例如對(duì)于時(shí)序預(yù)測(cè)任務(wù),sktime中主要提供的是經(jīng)典的統(tǒng)計(jì)學(xué)模型系列(ARIMA,ETS,以及比較火熱的prophet等),同時(shí)也提供了模型Ensemble能力和AutoML功能(可便于模型自動(dòng)調(diào)參和優(yōu)化)。
與此同時(shí),sktime也集結(jié)了一些深度學(xué)習(xí)的模型,包括Transformer等,這也為sktime提供了更強(qiáng)的競(jìng)爭(zhēng)力。
主要功能
- 時(shí)間序列預(yù)測(cè):支持多種預(yù)測(cè)模型,包括經(jīng)典統(tǒng)計(jì)方法和機(jī)器學(xué)習(xí)算法。
- 時(shí)間序列分類(lèi)與聚類(lèi):提供了用于時(shí)間序列分類(lèi)和聚類(lèi)的工具和算法。
- 特征提取:能夠從時(shí)間序列數(shù)據(jù)中自動(dòng)提取特征。
- 轉(zhuǎn)換和組合模型:支持對(duì)時(shí)間序列數(shù)據(jù)進(jìn)行預(yù)處理、降維以及模型組合等操作。
網(wǎng)址:Welcome to sktime — sktime documentation
源碼地址:https://github.com/sktime/sktime
GitHub☆:7.4k
Darts
Darts是一個(gè)用戶(hù)友好的用于時(shí)間序列預(yù)測(cè)Python庫(kù),它提供了從ARIMA到深度神經(jīng)網(wǎng)絡(luò)等多種模型。這些預(yù)測(cè)模型都可以用相同的方式使用,類(lèi)似于scikit-learn的fit()和predict()函數(shù)。Darts還簡(jiǎn)化了模型的回測(cè),多模型預(yù)測(cè)的結(jié)合,以及考慮外部數(shù)據(jù)的能力。它支持單變量和多變量時(shí)間序列,并且基于機(jī)器學(xué)習(xí)的模型可以在包含多個(gè)時(shí)間序列的大數(shù)據(jù)集上訓(xùn)練,某些模型還提供了豐富的概率預(yù)測(cè)支持。此外,Darts還提供了廣泛的異常檢測(cè)功能。
Darts庫(kù)具有以下突出特點(diǎn):
- 多種時(shí)間序列預(yù)測(cè)模型:Darts支持傳統(tǒng)的ARIMA、Exponential Smoothing和Prophet模型,同時(shí)也包括現(xiàn)代的深度學(xué)習(xí)模型,如RNN、LSTM、TCN等。這使用戶(hù)能夠選擇最適合其數(shù)據(jù)的模型來(lái)進(jìn)行預(yù)測(cè)。
- 模型評(píng)估和選擇:Darts提供了一套豐富的性能評(píng)估工具,用于比較和選擇最佳的時(shí)間序列模型。用戶(hù)可以使用均方誤差、均方根誤差、平均絕對(duì)誤差等指標(biāo)來(lái)評(píng)估模型性能。
- 可視化分析:Darts具備豐富的可視化工具,幫助用戶(hù)探索時(shí)間席列數(shù)據(jù),可視化預(yù)測(cè)結(jié)果,以及進(jìn)行模型診斷。這對(duì)于理解數(shù)據(jù)和模型行為非常有幫助。
- 特征工程:Darts庫(kù)支持在時(shí)間序列上進(jìn)行特征工程,包括滾動(dòng)窗口統(tǒng)計(jì)、差分、平滑等。這些技術(shù)可以用于提取有用的特征,以提高模型性能。
網(wǎng)址:Time Series Made Easy in Python — darts documentation
源碼地址:https://github.com/unit8co/darts
GitHub☆:7.3k
Kats
Kats是Facebook推出的一個(gè)時(shí)間序列分析工具包,提供了一個(gè)輕量級(jí)、易于使用且通用的框架來(lái)執(zhí)行時(shí)間序列分析。它的主要功能包括預(yù)測(cè)、檢測(cè)、特征提取/嵌入和多變量分析。優(yōu)勢(shì)在于它集成了10多種預(yù)測(cè)模型、模式檢測(cè)功能、65種具有清晰統(tǒng)計(jì)定義的特征提取,以及時(shí)間序列模擬器等實(shí)用工具。然而,作為一個(gè)相對(duì)較新的庫(kù),Kats可能在文檔完整性、社區(qū)支持和成熟度方面不如一些長(zhǎng)期存在的庫(kù)。
目前支持以下 10 種基本預(yù)測(cè)模型:Linear、Quadratic、ARIMA、SARIMA、Holt-Winters、Prophet、AR-Net、LSTM、Theta、VAR
網(wǎng)址:Kats | Kats (facebookresearch.github.io)
源碼地址:https://github.com/facebookresearch/kats
GitHub☆:4.7k
Tslearn
tslearn 是一個(gè)專(zhuān)門(mén)針對(duì)時(shí)間序列數(shù)據(jù)設(shè)計(jì)的Python機(jī)器學(xué)習(xí)庫(kù)。它旨在提供一個(gè)易于使用和靈活的工具,以支持時(shí)間序列數(shù)據(jù)的分析和預(yù)測(cè)。tslearn 提供了一系列的機(jī)器學(xué)習(xí)方法,這些方法專(zhuān)門(mén)針對(duì)時(shí)間序列數(shù)據(jù)的特性進(jìn)行了優(yōu)化。由于提供了多種算法和參數(shù),用戶(hù)需要根據(jù)具體的應(yīng)用場(chǎng)景做出選擇,這可能需要較深的機(jī)器學(xué)習(xí)和時(shí)間序列分析知識(shí)。但對(duì)于熟悉 scikit-learn 的用戶(hù),tslearn 的學(xué)習(xí)曲線(xiàn)非常平緩。
主要功能
- 時(shí)間序列聚類(lèi):tslearn 提供了多種時(shí)間序列聚類(lèi)算法,如 k-均值聚類(lèi)、基于 DTW 的聚類(lèi)等。
- 時(shí)間序列分類(lèi):支持多種時(shí)間序列分類(lèi)方法,包括 k-最近鄰(k-NN)分類(lèi)器、支持向量機(jī)(SVM)等。
- 時(shí)間序列回歸:可以使用 tslearn 進(jìn)行時(shí)間序列回歸分析。算法包括KNN,TimeSeriesSVR,MLP(多層感知器)。
- 形狀分析:提供了基于 DTW 的時(shí)間序列形狀相似度分析工具。
- 數(shù)據(jù)預(yù)處理:包括時(shí)間序列縮放、時(shí)間序列重采樣等預(yù)處理工具。
網(wǎng)址:tslearn’s documentation — tslearn 0.6.3 documentation
源碼地址:https://github.com/tslearn-team/tslearn
GitHub☆:2.8k
Pyflux
PyFlux是一個(gè)開(kāi)源Python庫(kù),專(zhuān)為時(shí)間序列分析和預(yù)測(cè)設(shè)計(jì)。它提供了廣泛的統(tǒng)計(jì)模型庫(kù),讓用戶(hù)能夠輕松地進(jìn)行時(shí)間序列數(shù)據(jù)的建模、分析和預(yù)測(cè)。PyFlux的設(shè)計(jì)理念是提供一個(gè)易于使用、靈活且功能強(qiáng)大的時(shí)間序列建模工具。但與一些其他庫(kù)(如Facebook的Prophet或者statsmodels)相比,PyFlux的維護(hù)和更新可能不那么頻繁,這可能導(dǎo)致文檔或功能的滯后。對(duì)于非常大的數(shù)據(jù)集,PyFlux的性能可能不如一些更優(yōu)化的庫(kù),如在處理大規(guī)模時(shí)間序列數(shù)據(jù)時(shí)可能會(huì)遇到速度和效率的問(wèn)題。
包含的模型有:ARIMA,ARIMAX、DAR(Dynamic AR) models、Dynamic Linear regression models、Beta-t-EGARCH models、Beta-t-EGARCH in-mean models、Beta-t-EGARCH in-mean regression models、Beta-t-EGARCH long memory models、Beta Skew-t GARCH models、Beta Skew-t in-mean GARCH models、GARCH models、GAS(Generalized Autoregressive Score) models、GAS local level models、GAS local linear trend models、GAS ranking models、GAS regression models、GASX models、GP-NARX models、Gaussian Local Level models
網(wǎng)址:Introduction — PyFlux 0.4.7 documentation
源碼地址:https://github.com/RJT1990/pyflux
GitHub☆:2.1k
Tsfel
TSFEL (Time Series Feature Extraction Library)是一個(gè)用于時(shí)間序列數(shù)據(jù)的特征提取的Python包。它允許用戶(hù)在不需要大量編程工作的情況下,對(duì)時(shí)間序列進(jìn)行探索性的特征提取。TSFEL能自動(dòng)提取超過(guò)60種不同的統(tǒng)計(jì)、時(shí)域和頻域特征。它的主要功能包括直觀快速的部署、計(jì)算復(fù)雜度評(píng)估、詳細(xì)的文檔說(shuō)明,以及易于擴(kuò)展新特征的能力。其優(yōu)勢(shì)在于能快速地從時(shí)間序列數(shù)據(jù)中提取豐富的特征,且對(duì)于數(shù)據(jù)科學(xué)家來(lái)說(shuō)使用方便。不過(guò),作為一個(gè)自動(dòng)化的特征提取庫(kù),可能會(huì)提取一些在特定情境下不太相關(guān)的特征,因此在使用這些特征進(jìn)行模型訓(xùn)練之前,可能需要進(jìn)一步的特征選擇或降維處理。
似乎更側(cè)重于時(shí)間序列的特征提取。
網(wǎng)址:Welcome to TSFEL documentation!tsfel.readthedocs.io/en/latest/
源碼地址:https://github.com/fraunhoferportugal/tsfel
GitHub☆:855
一些總結(jié)
- tsfresh定位于時(shí)序數(shù)據(jù)的特征工程,可方便地快速完成特征提取、特征選擇與轉(zhuǎn)換等操作;
- tslearn堪稱(chēng)是sklearn機(jī)器學(xué)習(xí)庫(kù)的時(shí)序版,本質(zhì)上可看做是將sklearn中的主要功能對(duì)時(shí)序數(shù)據(jù)進(jìn)行了定制化開(kāi)發(fā)和適配,使其更容易使用,同時(shí)也整合與其他主流工具包的相互轉(zhuǎn)換;
- sktime也延續(xù)了sklearn的API風(fēng)格,但在功能上則并不拘泥于sklearn中的功能元素,集成的主要是時(shí)序數(shù)據(jù)特有的模型,并加入了一些最新的功能模塊,例如Meta提出的時(shí)序預(yù)測(cè)模型Prophet以及深度學(xué)習(xí)相關(guān)模型等。