既然你在这里,你可能知道时间序列数据与静态ML数据有些不同。因此,在进行时间序列项目时,数据科学家或ML工程师往往会使用特定的工具和库。或者他们使用普遍知道的工具,这些工具已被证明可以很好地适应时间序列项目。
我们认为将这些工具收集在一个地方会很有用,所以我们在这里。这篇文章有点像一个时间序列工具和软件包的数据库。其中有些是相当知名的,有些对你来说可能是新的。希望你会发现整个列表是有用的!
在我们讨论工具之前,让我们先介绍一些基础知识。
什么是时间序列?
一个时间序列是一个按时间顺序索引的数据点序列。它是在连续的时间点上对同一变量的观察。换句话说,它是在一段时期内观察到的一组数据。
数据通常被绘制成图表上的一条线,时间在X轴上,每个点的数值在Y轴上。另外,时间序列有四个主要组成部分。
- 1趋势
- 2季节性变化
- 3周期性变化
- 4不规则或随机的变化
趋势只是数据在许多时期内的一般变化方向,它是数据中的长期模式。趋势通常会出现一定的时间,之后就会消失或改变方向。例如,在金融市场上,"看涨趋势 "表示金融资产价格普遍上涨的趋势,而 "看跌趋势 "表示价格下跌。
大体上,时间序列的趋势可以是。
- 上升趋势:一个时间序列在一个观察期内上升。
- 下降趋势:一个时间序列在一个观察期中下降。
- 恒定或水平趋势:一个时间序列在一个观察期内没有明显的上升或下降。
季节性变化或季节性是观察时间序列时要考虑的一个重要组成部分,因为它可以根据过去的数据提供关于未来可能发生的信息。它指的是在一个或多个季节的过程中,一个测量值的变化,如冬季和夏季的月份,但也可能是在每天、每周或每月的基础上。例如,温度具有季节性行为,因为它在夏季较高,在冬季较低。
与季节性变化相比,周期性变化 没有精确的时间段,可能会有一些时间上的漂移。例如,金融市场往往在高值和低值之间循环,但它们之间没有预先确定的时间段。除此之外,一个时间序列可以同时具有季节性和周期性的变化。例如,众所周知,房地产市场同时具有周期性和季节性模式。季节性模式表明,在春季有更多的交易,而不是在夏季。周期性模式反映了人们的购买力,这意味着在危机中,与繁荣的时候相比,销售量较少。
不规则或随机的变化是除去趋势、季节性和周期性成分后剩下的东西。正因为如此,它也被称为剩余成分。这是时间序列的非系统部分,是完全随机的,无法预测的。
时间序列成分 | 来源
一般来说,时间序列经常被用于许多领域,如经济学、数学、生物学、物理学、气象学等。具体来说,时间序列数据的一些例子是。
- 道琼斯工业平均指数的价格
- 纽约市的温度
- 比特币价格
- 心电图信号
- MLOps这个词的谷歌趋势
- 美国的失业率
- 网站流量通过时间和类似
在这篇文章中,我们将看一下上述的几个例子。
时间序列项目的例子
股票市场预测
股票市场预测是一个具有挑战性和吸引力的话题,其主要目标是开发预测未来股票价格的各种方法和策略。有很多不同的技术,从经典的算法和统计方法到复杂的神经网络架构。共同点是他们都利用不同的时间序列来实现准确的预测。股市预测方法被业余投资者、金融科技初创公司和大型对冲基金广泛使用。
在实践中使用股市预测方法有很多方法,但最受欢迎的可能是交易。证券交易所的自动交易数量正在上升,据估计,美国证券交易所约75%的股票交易来自于算法系统。预测股票未来如何表现有两种主要方法:基本面分析和技术分析。
基本面分析着眼于公司的财务报表、管理层和行业趋势等因素。此外,它还考虑到一些宏观经济指标,如通货膨胀率,国内生产总值,经济状况,以及类似的指标。所有这些指标都是随时间变化的,这样就可以用时间序列来表示。
与基本面分析相反,技术分析使用交易量、价格变化和其他来自市场本身的信息的模式来预测股票在未来的表现。投资者在做出投资决定之前,了解这两种方法是很重要的。
技术指标实例 | 来源
心电图异常检测
心电图异常检测是一种检测心电图异常的技术。心电图是一种监测心脏电活动的测试。基本上,它是由心脏产生的电信号,并以时间序列表示。
心电图异常检测是通过比较心电图的正常模式和异常模式来进行的。心电图中有许多类型的异常,它们可以分类如下。
- 心率异常:这是指心率从正常范围内的任何变化。这可能是由于心脏有问题或心脏受刺激的方式有问题。
- 心律异常: 这是指心律与正常模式的任何变化。这可能是由于脉冲通过心脏的方式有问题,或者脉冲通过心脏的速度有问题。
在这个主题上已经做了很多工作,从学术研究到商业心电图机,并且有一些有希望的结果。最大的问题是,该系统应该有很高的准确性,不应该有任何假阳性或阴性。这是由问题的性质和错误预测的后果决定的。
心电图异常的检测 | 来源
既然我们现在有了一些关于时间序列在行业中的重要性的背景,让我们来看看一些流行的工具、包和库,它们对任何时间序列项目都有帮助。另外,由于大多数与时间序列有关的数据科学和机器学习项目都是在Python中完成的,所以讨论Python支持的工具是有意义的。
我们将主要讨论四类工具。
- 1数据准备和特征工程工具
- 2数据分析和可视化包
- 3实验跟踪工具
- 4时间序列预测包
时间序列的数据准备和特征工程工具
数据准备和特征工程是数据科学管道中非常重要的两个步骤。数据准备通常是任何数据科学项目的第一步。它是将数据转换成可用于分析和进一步处理的形式的过程。
特征工程是一个从原始数据中提取特征的过程,以使其对建模和预测更有用。下面,我们将提到一些用于这些任务的最流行的工具。
使用Pandas的时间序列项目
Pandas是一个用于数据操作和分析的Python库。它包括数据结构和操作数字表和时间序列的方法。此外,它还包含广泛的能力和功能,用于处理所有领域的时间序列数据。
它支持从各种文件类型输入数据,包括CSV、JSON、Parquet、SQL数据库表格和查询以及Microsoft Excel。同时,Pandas允许各种数据处理功能,如合并、重塑、选择,以及数据清理和处理。
一些有用的时间序列功能是。
- 日期范围生成和频率转换
- 移动窗口统计
- 移动窗口线性回归
- 日期移位
- 滞后和更多
更多关于时间序列的相关内容可以在下面找到。
使用NumPy的时间序列项目
NumPy是一个Python库,它增加了对巨大的多维数组和矩阵的支持,以及大量的可用于这些数组的高级数学函数。它的语法与MATLAB非常相似,包括一个高性能的多维数组对象,以及处理这些数组的能力。
NumPy的datetime64数据类型和数组使时间序列中的日期能够得到极其紧凑的表示。使用NumPy还可以简单地使用线性代数操作来进行各种时间序列操作。
NumPy文档和教程。
使用Datetime的时间序列项目
Datetime是一个Python模块,它允许我们处理日期和时间。这个模块包含了处理以下情况所需的方法和函数。
- 日期和时间的表示
- 日期和时间的算术
- 日期和时间的比较
使用这个工具,处理时间序列很简单。它允许用户将日期和时间转化为对象并对其进行操作。例如,只需几行代码,我们就可以从一种DateTime格式转换为另一种格式,为日期增加一些天数、月数或年数,或计算两个时间对象之间的秒数差异。
围绕如何开始使用该模块的有用文档。
使用Tsfresh的时间序列项目
Tsfresh是一个Python软件包。它自动计算大量的时间序列特征,称为特征。该软件包将来自统计学、时间序列分析、信号处理和非线性动力学的既定算法与稳健的特征选择算法相结合,提供系统的时间序列特征提取。
Tsfresh软件包包括一个过滤程序,以防止提取不相关的特征。这个过滤程序评估了每个特征对回归或分类任务的解释能力和重要性。
高级时间序列特征的一些例子是
- 傅里叶变换成分
- 小波变换
- 部分自相关和其他
关于Tsfresh软件包的更多信息可以在下面找到。
时间序列的数据分析和可视化包
数据分析和可视化软件包是帮助数据分析师从他们的数据中创建图形和图表的工具。数据分析被定义为清理、转换和建模数据的过程,以便为商业决策发掘有用的信息。数据分析的目标是从数据中提取有用的信息,并根据这些信息做出决策。
数据的图形化表示被称为数据可视化。数据可视化工具,使用图表和图形等视觉元素,提供了一个简单的方法来查看和理解数据的趋势和模式。
有很多用于时间序列的数据分析和可视化软件包,我们将介绍其中的几个。
使用Matplotlib的时间序列项目
用于数据可视化的最流行的Python包可能是Matplotlib。它被用来创建静态、动画和交互式的可视化。用Matplotlib可以做一些事情,比如。
- 制作适合出版的图画
- 创建可以放大、平移和更新的交互式数字
- 改变视觉风格和布局
另外,它还为绘制时间序列图提供了多种选择。关于它的更多信息,请看下面的链接。
带有时间序列的Matplotlib图表实例|来源:中国新闻网。作者
使用Plotly的时间序列项目
Plotly是一个交互式的、开源的、基于浏览器的Python和R的图表库。它是一个高级的、声明式的图表库,有30多种图表类型,包括科学图表、3D图形、统计图表、SVG地图、金融图表等等。
除此之外,用Plotly可以绘制基于时间序列的交互式图表,如线图、三角图、散点图等。关于这个软件包的更多信息,请看文档。
带有时间序列的Plotly图表实例 | 来源
使用Statsmodels的时间序列项目
Statsmodels是一个Python包,它提供了用于估计各种统计模型的类和函数,以及运行统计测试和统计数据分析。
我们将在关于预测的部分更详细地介绍这个库,但在这里值得一提的是,它为时间序列的分解及其可视化提供了一个非常方便的方法。通过这个软件包,我们可以很容易地分解任何时间序列,并分析其组成部分,如趋势、季节性成分和残差或噪声。更多的内容将在教程中描述。
时间序列的实验跟踪工具
实验跟踪工具通常是高级工具,可用于各种目的,如跟踪实验结果,显示如果一个人改变实验中的参数会发生什么,模型管理,以及类似。
它们通常比低级别的软件包更容易使用,在开发机器学习模型时可以节省大量的时间。这里只提到其中两个,因为它们很可能是最受欢迎的。
对于时间序列来说,有一个方便的环境来跟踪定义的指标和超参数是特别重要的,因为我们很可能需要运行大量的不同实验。通常,时间序列模型与一些卷积神经网络相比并不大,作为输入有几百或几千个数值,所以模型训练起来相当快。此外,他们往往需要相当长的时间来调整超参数。
最后,在一个地方连接来自不同软件包的模型以及可视化工具将是非常有益的。
使用Neptune.ai的时间序列项目
Neptune.ai是一个实验跟踪工具,有超过2万名数据科学家、机器学习工程师和研究人员使用。它为在一个地方组织和控制模型提供了一个方便的界面。
使用Neptune.ai,可以
- 记录有关每个模型的数据集、参数和代码的信息。
- 把所有的指标、图表和任何其他的ML元数据组织在一个地方。
- 不费吹灰之力地进行可重复的模型训练并进行比较。
- 在云上备份一切。
- 与超过25个库集成,如PyTorch、TensorFlow、Matplotlib和其他。
至于任何类型的数据,时间序列也不例外,任何带有时间序列的项目都可以在Neptune.ai上进行跟踪。
时间序列运行的Neptune.ai仪表盘实例 | 来源
在使用时间序列的过程中,有一些资源是有用的。
带有权重和偏差的时间序列项目
Weights & Biases(W&B)是一个机器学习平台,与Neptune.ai类似,针对开发者,帮助他们更快地建立更好的模型。它旨在支持和优化关键的MLOps生命周期步骤,如模型管理、实验跟踪和数据集版本管理。
它只为个人项目提供有限的免费选项,而其他选项则从每月50美元开始。与Neptune.ai一样,这个工具在处理时间序列项目时也很有用,为跟踪和管理时间序列模型提供有用的功能。
使用权重和偏差的ML实验追踪 | 来源
关于权重和偏差的更多信息,请看他们的文档。
时间序列预测包
时间序列项目中最重要的部分可能是预测。预测是根据当前和过去的数据来预测未来事件的过程。它是基于这样的假设:未来可以从过去实现。同时,它假设数据中存在一些模式,可以用来预测接下来会发生什么。
有许多时间序列预测的方法,从简单的如线性回归和基于ARIMA的方法开始,到复杂的多层神经网络或集合模型。这里,我们将介绍一些支持不同类型模型的软件包。
用Statsmodels进行时间序列预测
Statsmodels是一个我们在数据可视化工具一节中已经提到的软件包。然而,这是一个与预测更相关的包。基本上,这个软件包提供了一系列的统计模型和假设检验。
Statsmodels包还包括用于时间序列分析的模型类和函数。自回归移动平均模型(ARMA)和向量自回归模型(VAR)是基本模型的例子。马尔科夫转换动态回归和自回归是非线性模型的例子。它还包括时间序列描述性统计,如自相关、部分自相关函数和周期图,以及ARMA或相关过程的理论属性。
下面介绍如何使用Statsmodels软件包开始处理时间序列。
用Pmdarima进行时间序列预测
Pmdarima是一个统计库,便于使用基于ARIMA的方法对时间序列进行建模。除此之外,它还有其他一些功能,如。
- 一套关于静止性和季节性的统计测试
- 各种内生和外生转化器,包括Box-Cox和Fourier转化器
- 季节性时间序列的分解,交叉验证工具,以及其他工具
也许这个库最有用的工具是Auto-Arima模块,它在提供的约束条件下搜索所有可能的ARIMA模型,并根据AIC或BIC值返回最佳模型。
关于Pmdarima的更多信息在这里介绍。
用Sklearn进行时间序列预测
Sklearn或Scikit-Learn肯定是Python中最常用的机器学习包之一。它提供了各种分类、回归和聚类方法,包括随机森林、支持向量机、K-means和其他。除此之外,它还提供了一些与降维、模型选择、数据预处理等相关的实用工具。
除了各种模型,对于时间序列,也有一些有用的功能,如管道、时间序列交叉验证功能、衡量结果的各种指标,以及类似功能。
使用Sklearn的时间序列分割 |来源
关于这个库的更多信息可以在下面找到。
使用PyTorch进行时间序列预测
PyTorch是一个基于Python的深度学习库,用于快速和灵活的实验。它最初是由在Facebook的人工智能研究团队工作的研究人员和工程师开发的,然后开放源代码。特斯拉自动驾驶仪、Uber的Pyro和Hugging Face的变形金刚等深度学习软件都是建立在PyTorch之上的。
通过PyTorch,可以建立强大的递归神经网络模型,如LSTM和GRU,并预测时间序列。此外,还有一个PyTorch预测包,里面有最先进的网络架构。它还包括一个时间序列数据集类,抽象处理变量转换、缺失值、随机化子采样、多历史长度和其他类似问题。关于这一点的更多信息将在下面介绍。
用Tensorflow(Keras)进行时间序列预测
TensorFlow是一个用于机器学习的开源软件库,以数据流图为基础。它最初由谷歌大脑团队开发,供内部使用,但后来作为一个开源项目发布。该软件库提供了一套高层次的数据流运算符,可以结合起来,以自然的方式表达涉及多维数据阵列、矩阵和高阶张量的复杂计算。它还提供了一些低级别的基元,如内核,用于构建自定义运算符或加快普通运算的执行速度。
Keras是一个建立在TensorFlow之上的高级API。使用Keras和TensorFlow,可以建立用于时间序列预测的神经网络模型。下面的教程中介绍了一个使用天气时间序列数据集的时间序列项目的例子。
用Sktime进行时间序列预测
Sktime是一个用于时间序列和机器学习的开源Python库。它包括有效解决时间序列回归、预测和分类任务所需的算法和转换工具。Sktime的创建是为了与scikit-learn一起工作,并使其容易适应相互关联的时间序列任务的算法,以及建立复合模型。
总的来说,这个软件包提供。
- 用于时间序列预测的最先进的算法
- 时间序列的转换,如去趋势化或去季节化和类似的。
- 模型和转换的管道,模型调整工具,以及其他有用的功能
这里描述了如何开始使用这个库。
用Prophet进行时间序列预测
Prophet是由Facebook的核心数据科学团队发布的一个开源库。简而言之,它包括一个预测时间序列数据的程序,基于一个加法模型,将一些非线性趋势与年、周、日的季节性以及假日效应相结合。它对具有强烈季节性效应的时间序列和多个季节的历史数据效果最好。它能够处理缺失数据、趋势转移和一般的异常值。
下面介绍更多关于Prophet库的信息。
用Pycaret进行时间序列预测
PyCaret是一个开源的Python机器学习库,可以实现机器学习工作流程的自动化。有了PyCaret,就可以用最小的努力和几行代码建立和测试几个机器学习模型。
基本上,用最少的代码,不深入细节,就可以建立一个从EDA到部署的端到端机器学习项目。
这个库有一些有用的时间序列模型,其中包括。
- 季节性天真预测器(Seasonal Naive Forecaster
- ARIMA
- 多项式趋势预测器
- 具有去季节化和去趋势选项的拉索网,以及其他许多选项。
使用PyCaret进行异常检测 |来源
更多关于PyCaret的信息可以在这里找到。
使用AutoTS进行时间序列预测
AutoTS是一个用于Python的时间序列包,旨在实现时间序列预测的自动化。它可以用来为单变量和多变量时间序列找到最佳的时间序列预测模型。同时,AutoTS本身也会清除数据中的任何NaN值或异常值。
有近20个预定义的模型,如ARIMA、ETS、VECM,并使用遗传算法,为一个给定的数据集找到最佳模型、预处理和合集。
关于这个软件包的一些教程是。
用Darts进行时间序列预测
Darts是一个Python库,允许对时间序列进行简单操作和预测。它包括一系列广泛的模型,从经典的ES和ARIMA到RNN和转化器。所有的模型都可以以与scikit-learn包相同的方式使用。
该库还允许轻松地对模型进行回溯测试,结合来自多个模型的预测,并纳入外部数据。它同时支持单变量和多变量模型。所有可用模型的表格以及几个例子可以在这里找到。
用Kats进行时间序列预测
Kats是一个由Facebook的基础设施数据科学团队发布的软件包,旨在进行时间序列分析。这个软件包的目标是提供时间序列分析所需的一切,包括检测、预测、特征提取/嵌入、多变量分析等等。
Kats提供了一套全面的预测工具,如集合、元学习模型、回测、超参数调整和经验预测区间。此外,它还包括检测时间序列数据的季节性、异常值、变化点和缓慢趋势变化的功能。通过TSFeature选项,可以生成65个具有明确统计定义的特征,可用于大多数机器学习模型。
更多关于Kats包的介绍见下文。
结论
在这篇文章中,我们描述了时间序列项目中最常用的工具、软件包和库。有了这个工具清单,就有可能涵盖几乎所有与时间序列有关的项目。除此之外,我们还提供了一个预测库的比较,显示了一些有趣的统计数据,如发布年份,流行程度,以及它支持什么样的模型。








