导读
时间序列分析是一类经典问题,常见的场景需求包括时序预测、时序分裂、时序聚类、异常检测等。作为一名算法工程师,当调包遇上时间序列,有哪些好用的工具包呢?本篇首先介绍3个:tsfresh、tslearn、sktime。
本文主要对三个时序工具包进行简要介绍,包括工具包的功能定位、主要特色及优劣势等,并列出了相关的论文、文档和github地址可供详细查阅。
01 tsfresh
tsfresh工具包,是一个定位于时间序列特征工程相关的工具包,包括对时间序列自动提取特征、特征选择、特征转换等,最早于2018年由德国的几名学者提出和开发。也正因为是定位于特征工程,所以tsfresh本身是不能用于实现时序预测或者时序分类等任务的,但可以基于其特征提取的结果完成后续的操作,例如进行多时序聚类时首先应用tsfresh完成对不同时序数据的特征是一个很好的选择。
tsfresh接收的时序数据类型为pandas的dataframe格式,时序数据的组织形式既可以长表也可以是宽表。在其提取的特征中,主要是关于时序数据的各项统计指标,例如最大最小值、均值、中位数、峰值个数等等,另外也可以自定义一些参数来提取更为定制化的特征,直接调用extract_features函数大概会得到几百个维度的特征提取结果,其中根据具体的时序数据取值可能会有较多的空值。从某种意义上讲,tsfresh提取的特征是关于时序数据的元特征,所以对于时序分类或聚类可能会更加有用,但用于时序预测则意义不大。
关于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)
02 tslearn
tslearn,从其名字中大体可以推断出这是一个用于对时序数据(time series)的机器学习相关工具包,其实际定位也确实如此。该工具包是基于scikit-learn、numpy和scipy进行二次开发的工具包,所以其本质上可看做是将scikit-learn中的主要功能面向时序数据进行了定制化的转换和开发,例如数据预处理、分类、回归(预测是一种特殊形式的回归任务)以及聚类等功能,总体而言是功能相近、风格一脉相承的。tslearn中主要支持的功能特性如下:
除了提供的功能与sklearn中的风格和使用方式十分接近外,tslearn有一个比较具有优势的特性在于,tslearn可以与其他时序工具包进行整合使用,除了scikit-learn外,还有前面刚刚提到的tsfresh、后续要介绍的sktime以及pyts等等,某种程度上为了更加灵活快速的使用多个工具包提供了便利。
然而,就我个人而言,tslearn其实并没有太大的吸引力,一方面其并未提供具有时序特色的独立功能,而主要是对sklearn中相关模块面向时序数据的定制化改造和适配,更别提时序数据中一系列经典的统计学模型和近年来火热的循环神经网络等;另一方面,该工具包的更新频率是比较迟滞的,从github中可以看出其最近一次更新也在7个月前。
关于tslearn的相关参考信息如下:
论文: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)
03 标题
sktime与tslearn比较接近,也是一个scikit-learn风格的时序分析工具包,主要功能大体也可分为时序预测、时序分类、时序回归(与时序预测任务较为接近)、时序聚类等,其中有些功能属于已经比较成熟,而有些模块则仍在实验开发中。sktime工具包的功能特性如下:
虽然sktime与tslearn类似,同样延续了sklearn的API风格(例如模型训练用fit、预测用predict,评分用score等等),但在功能上sktime却并没有太多sklearn中的元素,例如对于时序预测任务,sktime中主要提供的是经典的统计学模型系列(ARIMA,ETS,以及比较火热的prophet等),同时也提供了模型Ensemble能力和AutoML功能(可便于模型自动调参和优化)。与此同时,sktime也集结了一些深度学习的模型,包括Transformer等,这也为sktime提供了更强的竞争力。
关于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)
04 小结
总体而言,三个时序工具包各有特色,提供的功能也互为补充:
在实际使用过程中,三个工具包本无优劣高下之分,需灵活选取调用,这样才不失为一名优秀的算法工程师调包侠。