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