Python中的时序分析工具包推荐(2)

2022-01-05 08:43:03 浏览数 (1)

导读

在前期推文Python中的时序分析工具包推荐(1)中介绍了时序分析的三个工具包,分别侧重于时序特征工程、基于sklearn的时序建模和更为高级的时序建模工具。今天,本篇再来介绍4个时序分析好用的工具包:Prophet、Merlion、Darts和GluonTS。

延续前篇推文的风格,本文主要对四个时序工具包进行简要介绍,包括工具包的功能定位、主要特色及优劣势等,并列出了相关的论文、文档和github地址可供详细查阅。

01 Prophet

Prophet,英文原义有“预言家”或者“先知者”的含义,放在时间序列里,那么自然就是用于时序预测。这是一个由Facebook在2017年研究设计的时序分析工具,主要定位就是用于时序预测,如果按照时序预测的几种主流建模方式来加以区分的话,那么Prophet应当属于统计学模型流派。Prophet目前最新版本是1.0版本,其上一个版本是0.7,同时也刚好从1.0开始,该工具包更名为prophet,而之前的工具包则叫作为fbprophet,但主用的时序预测模型则都叫做Prophet。prophet工具包性能还是很强大的,最主要的是其自动化程度相当高,即使是全默认参数也能取得不错的效果,所以很多其他时序工具包都将其集成在内。

不过,prophet工具包的安装有些麻烦,主要是pystan依赖安装的问题。经过实践,利用conda源直接conda install prophet,可以顺利完成安装,体验较好。

Prophet实现时序预测的基本思想是将时间序列按成分分解为趋势性(Trend)、季节性(Seasonality,这里的季节性既包括年、月、周等日期属性上的季节性,也包括更为一般的周期性)、误差项(Error),以及考虑节假日等特殊日期的影响(Holiday)。相较于其他经典的统计学时序预测模型,Prophet除了成分分解更为细化之外,还考虑趋势性的拐点因素(Trend Changepoints),同时对节假日的处理也支持双重假日的影响(例如中国的节日中,国庆和中秋重叠的情况),以期来进一步考虑节假日对时序带来的冲击。

Prophet进行时序预测时,以dataframe作为输入数据类型,且该dataframe中要求含有ds和y两个字段,其中ds表示时间列,y表示时序变量,而后直接调用fit和predict接口就可以愉快的玩耍了。同时,Prophet还可以对预测结果进行快速可视化对比,下图中黑色散点为真实值,而蓝色区域则为预测的置信度范围。

关于Prophet的相关参考信息如下:

代码语言:javascript复制
论文:https://peerj.com/preprints/3190.pdf
文档:https://facebook.github.io/prophet/docs
GitHub:https://github.com/facebook/prophet (13.9K star)

02 Merlion

Merlion是由美国salesforce公司新推出的一个时序分析工具,主要定位是时序预测(Forecasting)和异常检测(Anomaly Detection)。

于我个人而言,对salesforce的了解源于在使用AutoML工具transmogify,这也是由salesforce推出的一款基于Spark.ml的自动化机器学习框架。

Merlion因为在本次对比的几个时序分析工具中推出时间相对较晚,所以一定程度上占有后发优势。就时序预测和异常检测两类时序分析任务而言,Merlion既支持单变量也支持多变量的时序分析,而且还支持了模型融合(Ensemble)以及AutoML能力(可以理解为带有模型选择和自动调参功能的时序建模)。下图是Merlion的github中给出的和其他几个时序分析工具的功能覆盖对比图:

具体到时序预测任务,Merlion大体上支持统计学模型和机器学习模型,其中统计学模型包括ARIMA、ETS等常用模型外,也将Prophet集成进来;而机器学习模型则主要是基于决策树的集成模型,例如RF和GB等。同时,如前文所述,Merlion内置了AutoML能力,可以实现模型的选择和调参,同时也可方便的对多个模型的预测结果进行融合,毕竟在时序预测中不存在单一模型通吃所有数据集的情况。与Prophet类似,Merlion也支持自动绘制真实值和预测结果及置信区间的对比曲线,某种程度上比Prophet更加直观,如下图所示。

Merlion是我个人前期使用较多的一个工具,安装的话推荐使用离线安装(首先从github下载源码,然后pip install 文件夹)。与Prophet不同,由于Merlion既支持单变量也支持多变量,所以其内置了定制的输入数据格式TimeSeries类型,但也可以非常方便的从dataframe加载转换。

关于Merlion的相关参考信息如下:

代码语言:javascript复制
论文:https://arxiv.org/abs/2109.09265
文档:https://opensource.salesforce.com/Merlion/v1.1.0/index.html
GitHub:https://github.com/salesforce/Merlion (2.3k star)

03 Darts

Darts工具包也是一个强大的时序分析工具,也支持了众多模型和任务场景,并提供了高度集成化的调用方式,包括Prophet也是其内置集成的模型之一。下图是Darts的Github中给出的模块功能阵列,从中可以看出支持的模型及所使用时序预测场景:

Darts给我的第一印象是其与Merlion十分接近,包括二者都是定制了一个TimeSeries数据类型作为模型的标准输入。但二者的主要区别也很明显,主要可概括如下:

  • Merlion支持的时序分析任务包括时序预测和异常检测;而Darts仅聚焦于时序预测问题;
  • Merlion支持的模型主要是统计学模型和传统机器学习模型,而Darts支持的模型更为丰富,最大的特色是深度学习模型,其中不乏Transformer、TCN等这些新的时序建模方法。

此外,Darts工具包也支持了包括Pipeline、自动调参等特性,也算是工程化支持较为完备的工具包。不过,个人在尝试使用时体验并不是很优秀

关于Darts的相关参考信息如下:

代码语言:javascript复制
论文:https://arxiv.org/abs/2110.03224
文档:https://unit8co.github.io/darts
GitHub:https://github.com/unit8co/darts (3.3k star)

04 GluonTS

如果了解AutoML技术的读者肯定知道亚马逊出过一个AutoML框架,叫做AutoGluon,也正是从那时起我对gluon才有所了解,知晓这是亚马逊推出的一个深度学习框架(不过,至今也未曾深入调研和探索使用过。。),而GluonTS则是Gluon生态中用于实现时序建模的一个工具包,更确切的说是一个基于深度学习的概率时序模型工具,至于时序分析任务也是都支持时序预测和异常检测任务。

坦白地讲,GluonTS于我个人而言仅停留于阅读其官方Paper的层面,实际的工具尚未探索使用,所以对于其性能的描述也仅停留于眼见耳听,而缺乏动手实践,所以这里不做更多介绍。

关于GluonTS的相关参考信息如下:

代码语言:javascript复制
论文:https://arxiv.org/abs/1906.05264v1
文档:https://ts.gluon.ai/
GitHub:https://github.com/awslabs/gluon-ts/(2.4k star)

05 小结

总体而言,四个时序工具包各有特色,功能覆盖各有千秋:

  • Prophet功能相对单一,仅适用于单变量的时序预测模型,而且也仅支持这一个模型。但与此同时,该模型也做到了高度专业和成熟,GitHub上的star数量高达13k之多,更是成了很多其他时序分析工具包的必备集成模型之一
  • Merlion定位于时序预测和异常检测场景,既支持单变量也支持多变量时序,模型以统计学模型和机器学习模型为主,一大亮点是支持时序建模的Auto能力和多模型的Ensemble能力
  • Darts也是时序分析工具的一个集大成者,主要面向的场景是时序预测任务,但在模型的丰富程度上更为出色,亮点是支持很多深度学习模型,包括Transformer、TCN等序列模型新星
  • GluonTS作为亚马逊Gluon生态中的时序建模工具,是一款主打深度学习模型的时序分析工具,适用任务包括时序预测和异常检测,但在模型使用灵活度方面个人感觉则要略逊于Merlion和Darts

考虑前期推文中介绍的tsfresh、tslearn、sktime三个工具,加之本文介绍的Prophet、Merlion、Darts和GluonTS四个工具,其实在应对主流的时序数据分析任务时基本是足够的。同时,以此为基础,更重要的是提升相关的理论基础,方能更好的使用和驾驭这些工具,也才不枉成为一名真正的算法工程师调包侠

0 人点赞