本文基于知乎作者Carrot Wait的文章,综合其它网络博主的意见而成。包括知乎用户【nr5iT5】、CSDN用户【程序媛了了】、知乎用户【李东】等。
原文链接https://zhuanlan.zhihu.com/p/690397917
本文旨在综述当前时间序列分析领域内几种重要的Python库,包括Prophet、tslearn、sktime、tsfresh、Darts、和Kats,tsfel以及PyFlux。这些库各具特色,覆盖了从统计建模、机器学习方法到自动化特征提取等多个方面,适用于不同的应用场景和需求。(按GitHub☆排名)
Prophet
Prophet是Facebook开发的一个时间序列预测工具,旨在处理具有强季节性影响的时间序列数据。它基于一个加法模型,适用于年度、周度、日度的季节性变化,以及假日效应,能够自动处理缺失数据和趋势变化。
基本算法模型:
模型整体由三部分组成:
:growth(增长趋势)
:seasonality(李节趋势)
:holidays(节假日对预测值的影响)
主要功能:自动预测、处理季节性效应、调整趋势变化、对抗异常值和缺失数据。
优势:速度快、准确度高、完全自动化、易于调整预测、支持R和Python。
劣势:可能不适用于非季节性强烈的时间序列、对新用户而言参数调整可能有挑战、模型透明度较低(作为黑盒模型)。
网站:Prophet | Forecasting at scale. (facebook.github.io)
源码地址:https://github.com/facebook/prophet
GitHub☆:17.7k
Tsfresh
tsfresh 是一个自动化提取大量时间序列特征的Python库。它专门设计来识别时间序列中哪些特征对于回归或分类任务是有意义的,从而减少手动特征工程的工作量。其主要功能包括自动计算多种时间序列特征、评估这些特征对模型的重要性,并支持与scikit-learn兼容的转换器。tsfresh 的优势在于能够自动识别和提取有用的特征,帮助提高模型性能,特别适合于需要处理大量时间序列数据的场景。然而,自动提取的大量特征可能需要进一步筛选来确定最相关的特征集。 tsfresh本身是不能用于实现时序预测或者时序分类等任务的,但可以基于其特征提取的结果完成后续的操作 。
网站:tsfresh — tsfresh 0.20.2.post0.dev4+g3da2360 documentation
源码地址:https://github.com/blue-yonder/tsfresh
GitHub☆:8.1k
Sktime
sktime 是一个专为时间序列分析而构建的Python库,提供了一系列工具和算法来处理、分析和预测时间序列数据。
虽然sktime与tslearn类似,同样 延续了sklearn的API风格(例如模型训练用fit、预测用predict,评分用score等等),但在功能上sktime却并没有太多sklearn中的元素,例如对于时序预测任务,sktime中主要提供的是经典的统计学模型系列(ARIMA,ETS,以及比较火热的prophet等),同时也提供了模型Ensemble能力和AutoML功能(可便于模型自动调参和优化)。
与此同时,sktime也集结了一些深度学习的模型,包括Transformer等,这也为sktime提供了更强的竞争力。
主要功能
- 时间序列预测:支持多种预测模型,包括经典统计方法和机器学习算法。
- 时间序列分类与聚类:提供了用于时间序列分类和聚类的工具和算法。
- 特征提取:能够从时间序列数据中自动提取特征。
- 转换和组合模型:支持对时间序列数据进行预处理、降维以及模型组合等操作。
网址:Welcome to sktime — sktime documentation
源码地址:https://github.com/sktime/sktime
GitHub☆:7.4k
Darts
Darts是一个用户友好的用于时间序列预测Python库,它提供了从ARIMA到深度神经网络等多种模型。这些预测模型都可以用相同的方式使用,类似于scikit-learn的fit()和predict()函数。Darts还简化了模型的回测,多模型预测的结合,以及考虑外部数据的能力。它支持单变量和多变量时间序列,并且基于机器学习的模型可以在包含多个时间序列的大数据集上训练,某些模型还提供了丰富的概率预测支持。此外,Darts还提供了广泛的异常检测功能。
Darts库具有以下突出特点:
- 多种时间序列预测模型:Darts支持传统的ARIMA、Exponential Smoothing和Prophet模型,同时也包括现代的深度学习模型,如RNN、LSTM、TCN等。这使用户能够选择最适合其数据的模型来进行预测。
- 模型评估和选择:Darts提供了一套丰富的性能评估工具,用于比较和选择最佳的时间序列模型。用户可以使用均方误差、均方根误差、平均绝对误差等指标来评估模型性能。
- 可视化分析:Darts具备丰富的可视化工具,帮助用户探索时间席列数据,可视化预测结果,以及进行模型诊断。这对于理解数据和模型行为非常有帮助。
- 特征工程:Darts库支持在时间序列上进行特征工程,包括滚动窗口统计、差分、平滑等。这些技术可以用于提取有用的特征,以提高模型性能。
网址:Time Series Made Easy in Python — darts documentation
源码地址:https://github.com/unit8co/darts
GitHub☆:7.3k
Kats
Kats是Facebook推出的一个时间序列分析工具包,提供了一个轻量级、易于使用且通用的框架来执行时间序列分析。它的主要功能包括预测、检测、特征提取/嵌入和多变量分析。优势在于它集成了10多种预测模型、模式检测功能、65种具有清晰统计定义的特征提取,以及时间序列模拟器等实用工具。然而,作为一个相对较新的库,Kats可能在文档完整性、社区支持和成熟度方面不如一些长期存在的库。
目前支持以下 10 种基本预测模型:Linear、Quadratic、ARIMA、SARIMA、Holt-Winters、Prophet、AR-Net、LSTM、Theta、VAR
网址:Kats | Kats (facebookresearch.github.io)
源码地址:https://github.com/facebookresearch/kats
GitHub☆:4.7k
Tslearn
tslearn 是一个专门针对时间序列数据设计的Python机器学习库。它旨在提供一个易于使用和灵活的工具,以支持时间序列数据的分析和预测。tslearn 提供了一系列的机器学习方法,这些方法专门针对时间序列数据的特性进行了优化。由于提供了多种算法和参数,用户需要根据具体的应用场景做出选择,这可能需要较深的机器学习和时间序列分析知识。但对于熟悉 scikit-learn 的用户,tslearn 的学习曲线非常平缓。
主要功能
- 时间序列聚类:tslearn 提供了多种时间序列聚类算法,如 k-均值聚类、基于 DTW 的聚类等。
- 时间序列分类:支持多种时间序列分类方法,包括 k-最近邻(k-NN)分类器、支持向量机(SVM)等。
- 时间序列回归:可以使用 tslearn 进行时间序列回归分析。算法包括KNN,TimeSeriesSVR,MLP(多层感知器)。
- 形状分析:提供了基于 DTW 的时间序列形状相似度分析工具。
- 数据预处理:包括时间序列缩放、时间序列重采样等预处理工具。
网址:tslearn’s documentation — tslearn 0.6.3 documentation
源码地址:https://github.com/tslearn-team/tslearn
GitHub☆:2.8k
Pyflux
PyFlux是一个开源Python库,专为时间序列分析和预测设计。它提供了广泛的统计模型库,让用户能够轻松地进行时间序列数据的建模、分析和预测。PyFlux的设计理念是提供一个易于使用、灵活且功能强大的时间序列建模工具。但与一些其他库(如Facebook的Prophet或者statsmodels)相比,PyFlux的维护和更新可能不那么频繁,这可能导致文档或功能的滞后。对于非常大的数据集,PyFlux的性能可能不如一些更优化的库,如在处理大规模时间序列数据时可能会遇到速度和效率的问题。
包含的模型有: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
网址:Introduction — PyFlux 0.4.7 documentation
源码地址:https://github.com/RJT1990/pyflux
GitHub☆:2.1k
Tsfel
TSFEL (Time Series Feature Extraction Library)是一个用于时间序列数据的特征提取的Python包。它允许用户在不需要大量编程工作的情况下,对时间序列进行探索性的特征提取。TSFEL能自动提取超过60种不同的统计、时域和频域特征。它的主要功能包括直观快速的部署、计算复杂度评估、详细的文档说明,以及易于扩展新特征的能力。其优势在于能快速地从时间序列数据中提取丰富的特征,且对于数据科学家来说使用方便。不过,作为一个自动化的特征提取库,可能会提取一些在特定情境下不太相关的特征,因此在使用这些特征进行模型训练之前,可能需要进一步的特征选择或降维处理。
似乎更侧重于时间序列的特征提取。
网址:Welcome to TSFEL documentation!tsfel.readthedocs.io/en/latest/
源码地址:https://github.com/fraunhoferportugal/tsfel
GitHub☆:855
一些总结
- tsfresh定位于时序数据的特征工程,可方便地快速完成特征提取、特征选择与转换等操作;
- tslearn堪称是sklearn机器学习库的时序版,本质上可看做是将sklearn中的主要功能对时序数据进行了定制化开发和适配,使其更容易使用,同时也整合与其他主流工具包的相互转换;
- sktime也延续了sklearn的API风格,但在功能上则并不拘泥于sklearn中的功能元素,集成的主要是时序数据特有的模型,并加入了一些最新的功能模块,例如Meta提出的时序预测模型Prophet以及深度学习相关模型等。