Python中的时序分析工具包推荐(1)
导读
时间序列分析是一类经典问题,常见的场景需求包括时序预测、时序分裂、时序聚类、异常检测等。作为一名算法工程师,当调包遇上时间序列,有哪些好用的工具包呢?本篇首先介绍3个:tsfresh、tslearn、sktime。
本文主要对三个时序工具包进行简要介绍,包括工具包的功能定位、主要特色及优劣势等,并列出了相关的论文、文档和github地址可供详细查阅。
tsfresh接收的时序数据类型为pandas的dataframe格式,时序数据的组织形式既可以长表也可以是宽表。在其提取的特征中,主要是关于时序数据的各项统计指标,例如最大最小值、均值、中位数、峰值个数等等,另外也可以自定义一些参数来提取更为定制化的特征,直接调用extract_features函数大概会得到几百个维度的特征提取结果,其中根据具体的时序数据取值可能会有较多的空值。从某种意义上讲,tsfresh提取的特征是关于时序数据的元特征,所以对于时序分类或聚类可能会更加有用,但用于时序预测则意义不大。
论文:https://doi.org/10.1016/j.neucom.2018.03.067
文档:https://tsfresh.readthedocs.io/en/latest/index.html
GitHub:https://github.com/blue-yonder/tsfresh(6.1k star)
然而,就我个人而言,tslearn其实并没有太大的吸引力,一方面其并未提供具有时序特色的独立功能,而主要是对sklearn中相关模块面向时序数据的定制化改造和适配,更别提时序数据中一系列经典的统计学模型和近年来火热的循环神经网络等;另一方面,该工具包的更新频率是比较迟滞的,从github中可以看出其最近一次更新也在7个月前。
论文:https://jmlr.org/papers/volume21/20-091/20-091.pdf
文档:https://tslearn.readthedocs.io/en/stable/quickstart.html
GitHub:https://github.com/tslearn-team/tslearn/(1.9k star)
虽然sktime与tslearn类似,同样延续了sklearn的API风格(例如模型训练用fit、预测用predict,评分用score等等),但在功能上sktime却并没有太多sklearn中的元素,例如对于时序预测任务,sktime中主要提供的是经典的统计学模型系列(ARIMA,ETS,以及比较火热的prophet等),同时也提供了模型Ensemble能力和AutoML功能(可便于模型自动调参和优化)。与此同时,sktime也集结了一些深度学习的模型,包括Transformer等,这也为sktime提供了更强的竞争力。
论文:https://arxiv.org/abs/1909.07872
文档:https://www.sktime.org/en/stable/index.html
GitHub:https://github.com/alan-turing-institute/sktime(4.8k star)
总体而言,三个时序工具包各有特色,提供的功能也互为补充:
tslearn定位于时序数据的特征工程,可方便地快速完成特征提取、特征选择与转换等操作;
tslearn堪称是sklearn机器学习库的时序版,本质上可看做是将sklearn中的主要功能对时序数据进行了定制化开发和适配,使其更容易使用,同时也整合与其他主流工具包的相互转换;
sktime也延续了sklearn的API风格,但在功能上则并不拘泥于sklearn中的功能元素,集成的主要是时序数据特有的模型,并加入了一些最新的功能模块,例如Meta提出的时序预测模型Prophet以及深度学习相关模型等。
在实际使用过程中,三个工具包本无优劣高下之分,需灵活选取调用,这样才不失为一名优秀的算法工程师调包侠。
相关阅读: