导航:首页 > 源码编译 > 时间序列算法分类

时间序列算法分类

发布时间:2023-09-14 04:13:58

A. 时间序列分析方法

时间序列是指一组在连续时间上测得的数据,其在数学上的定义是一组向量x(t), t=0,1,2,3,...,其中t表示数据所在的时间点,x(t)是一组按时间顺序(测得)排列的随机变量。包含单个变量的时间序列称为单变量时间序列,而包含多个变量的时间序列则称为多变量。

时间序列在很多方面多有涉及到,如天气预报,每天每个小时的气温,股票走势等等,在商业方面有诸多应用,如:

下面我们将通过一个航班数据来说明如何使用已有的工具来进行时间序列数据预测。常用来处理时间序列的包有三个:

对于基于AR、MA的方法一般需要数据预处理,因此本文分为三部分:

通过简单的初步处理以及可视化可以帮助我们有效快速的了解数据的分布(以及时间序列的趋势)。

观察数据的频率直方图以及密度分布图以洞察数据结构,从下图可以看出:

使用 statsmodels 对该时间序列进行分解,以了解该时间序列数据的各个部分,每个部分都代表着一种模式类别。借用 statsmodels 序列分解我们可以看到数据的主要趋势成分、季节成分和残差成分,这与我们上面的推测相符合。

如果一个时间序列的均值和方差随着时间变化保持稳定,则可以说这个时间序列是稳定的。

大多数时间序列模型都是在平稳序列的前提下进行建模的。造成这种情况的主要原因是序列可以有许多种(复杂的)非平稳的方式,而平稳性只有一种,更加的易于分析,易于建模。

在直觉上,如果一段时间序列在某一段时间序列内具有特定的行为,那么将来很可能具有相同的行为。譬如已连续观察一个星期都是六点出太阳,那么可以推测明天也是六点出太阳,误差非常小。

而且,与非平稳序列相比,平稳序列相关的理论更加成熟且易于实现。

一般可以通过以下几种方式来检验序列的平稳性:

如果时间序列是平稳性的,那么在ACF/PACF中观测点数据与之前数据点的相关性会急剧下降。

下图中的圆锥形阴影是置信区间,区间外的数据点说明其与观测数据本身具有强烈的相关性,这种相关性并非来自于统计波动。

PACF在计算X(t)和X(t-h)的相关性的时候,挖空在(t-h,t)上所有数据点对X(t)的影响,反应的是X(t)和X(t-h)之间真实的相关性(直接相关性)。

从下图可以看出,数据点的相关性并没有急剧下降,因此该序列是非平稳的。

如果序列是平稳的,那么其滑动均值/方差会随着时间的变化保持稳定。

但是从下图我们可以看到,随着时间的推移,均值呈现明显的上升趋势,而方差也呈现出波动式上升的趋势,因此该序列是非平稳的。

一般来讲p值小于0.05我们便认为其是显着性的,可以拒绝零假设。但是这里的p值为0.99明显是非显着性的,因此接受零假设,该序列是非平稳的。

从上面的平稳性检验我们可以知道该时间序列为非平稳序列。此外,通过上面1.3部分的序列分解我们也可以看到,该序列可分解为3部分:

我们可以使用数据转换来对那些较大的数据施加更大的惩罚,如取对数、开平方根、立方根、差分等,以达到序列平稳的目的。

滑动平均后数据失去了其原来的特点(波动式上升),这样损失的信息过多,肯定是无法作为后续模型的输入的。

差分是常用的将非平稳序列转换平稳序列的方法。ARIMA中的 'I' 便是指的差分,因此ARIMA是可以对非平稳序列进行处理的,其相当于先将非平稳序列通过差分转换为平稳序列再来使用ARMA进行建模。

一般差分是用某时刻数值减去上一时刻数值来得到新序列。但这里有一点区别,我们是使用当前时刻数值来减去其对应时刻的滑动均值。

我们来看看刚刚差分的结果怎么样。

让我们稍微总结下我们刚刚的步骤:

通过上面的3步我们成功的将一个非平稳序列转换成了一个平稳序列。上面使用的是最简单的滑动均值,下面我们试试指数滑动平均怎么样。

上面是最常用的指数滑动平均的定义,但是pandas实现的指数滑动平均好像与这个有一点区别,详细区别还得去查pandas文档。

指数滑动均值的效果看起来也很差。我们使用差分+指数滑动平均再来试试吧。

在上面我们通过 取log+(指数)滑动平均+差分 已经成功将非平稳序列转换为了平稳序列。

下面我们看看,转换后的平稳序列的各个成分是什么样的。不过这里我们使用的是最简单的差分,当前时刻的值等于原始序列当前时刻的值减去原始序列中上一时刻的值,即: x'(t) = x(t) - x(t-1)。

看起来挺不错,是个平稳序列的样子。不过,还是检验一下吧。

可以看到,趋势(Trend)部分已基本被去除,但是季节性(seasonal)部分还是很明显,而ARIMA是无法对含有seasonal的序列进行建模分析的。

在一开始我们提到了3个包均可以对时间序列进行建模。

为了简便,这里 pmdarima 和 statsmodels.tsa 直接使用最好的建模方法即SARIMA,该方法在ARIMA的基础上添加了额外功能,可以拟合seasonal部分以及额外添加的数据。

在使用ARIMA(Autoregressive Integrated Moving Average)模型前,我们先简单了解下这个模型。这个模型其实可以包括三部分,分别对应着三个参数(p, d, q):

因此ARIMA模型就是将AR和MA模型结合起来然后加上差分,克服了不能处理非平稳序列的问题。但是,需要注意的是,其仍然无法对seasonal进行拟合。

下面开始使用ARIMA来拟合数据。

(1) 先分训练集和验证集。需要注意的是这里使用的原始数据来进行建模而非转换后的数据。

(2)ARIMA一阶差分建模并预测

(3)对差分结果进行还原

先手动选择几组参数,然后参数搜索找到最佳值。需要注意的是,为了避免过拟合,这里的阶数一般不太建议取太大。

可视化看看结果怎么样吧。

(6)最后,我们还能对拟合好的模型进行诊断看看结果怎么样。

我们主要关心的是确保模型的残差(resial)部分互不相关,并且呈零均值正态分布。若季节性ARIMA(SARIMA)不满足这些属性,则表明它可以进一步改善。模型诊断根据下面的几个方面来判断残差是否符合正态分布:

同样的,为了方便,我们这里使用 pmdarima 中一个可以自动搜索最佳参数的方法 auto_arima 来进行建模。

一般来说,在实际生活和生产环节中,除了季节项,趋势项,剩余项之外,通常还有节假日的效应。所以,在prophet算法里面,作者同时考虑了以上四项,即:

上式中,

更多详细Prophet算法内容可以参考 Facebook 时间序列预测算法 Prophet 的研究 。

Prophet算法就是通过拟合这几项,然后把它们累加起来得到时间序列的预测值。

Prophet提供了直观且易于调整的参数:

Prophet对输入数据有要求:

关于 Prophet 的使用例子可以参考 Prophet example notebooks

下面使用 Prophet 来进行处理数据。

参考:
Facebook 时间序列预测算法 Prophet 的研究
Prophet example notebooks
auto_arima documentation for selecting best model
数据分析技术:时间序列分析的AR/MA/ARMA/ARIMA模型体系
https://github.com/advaitsave/Introction-to-Time-Series-forecasting-Python
时间序列分析
My First Time Series Comp (Added Prophet)
Prophet官方文档: https://facebookincubator.github.io

B. 时间序列分析的具体算法

用随机过程理论和数理统计学方法,研究随机数据序列所遵从的统计规律,以用于解决实际问题。由于在多数问题中,随机数据是依时间先后排成序列的,故称为时间序列。它包括一般统计分析(如自相关分析、谱分析等),统计模型的建立与推断,以及关于随机序列的最优预测、控制和滤波等内容。经典的统计分析都假定数据序列具有独立性,而时间序列分析则着重研究数据序列的相互依赖关系。后者实际上是对离散指标的随机过程的统计分析,所以又可看作是随机过程统计的一个组成部分。例如,用x(t)表示某地区第t个月的降雨量,{x(t),t=1,2,…}是一时间序列。对t=1,2,…,T,记录到逐月的降雨量数据x(1),x(2),…,x(T),称为长度为T的样本序列。依此即可使用时间序列分析方法,对未来各月的雨量x(T+l)(l=1,2,…)进行预报。时间序列分析在第二次世界大战前就已应用于经济预测。二次大战中和战后,在军事科学、空间科学和工业自动化等部门的应用更加广泛。
就数学方法而言,平稳随机序列(见平稳过程)的统计分析,在理论上的发展比较成熟,从而构成时间序列分析的基础。
频域分析 一个时间序列可看成各种周期扰动的叠加,频域分析就是确定各周期的振动能量的分配,这种分配称为“谱”,或“功率谱”。因此频域分析又称谱分析。谱分析中的一个重要是统计量,称为序列的周期图。当序列含有确定性的周期分量时,通过I(ω)的极大值点寻找这些分量的周期,是谱分析的重要内容之一。在按月记录的降雨量序列中,序列x(t)就可视为含有以12为周期的确定分量,所以序列x(t)可以表示为 ,它的周期图I(ω)处有明显的极大值。
当平稳序列的谱分布函数F(λ)具有谱密度ƒ(λ)(即功率谱)时,可用(2π)-1I(λ)去估计ƒ(λ),它是ƒ(λ)的渐近无偏估计。如欲求ƒ(λ)的相合估计(见点估计),可用I(ω)的适当的平滑值去估计ƒ(λ),常用的方法为谱窗估计即取ƒ(λ)的估计弮(λ)为 ,式中wt(ω)称为谱窗函数。谱窗估计是实际应用中的重要方法之一。谱分布F(λ)本身的一种相合估计可由I(ω)的积分直接获得,即 。研究以上各种估计量的统计性质,改进估计方法,是谱分析的重要内容。时域分析 它的目的在于确定序列在不同时刻取值的相互依赖关系,或者说,确定序列的相关结构。这种结构是用序列的自相关函0,1,…)来描述的,为序列的自协方差函数值,m=Ex(t)是平稳序列的均值。常常采用下列诸式给出m,γ(k),ρ(k)的估计: ,通(k)了解序列的相关结构,称为自相关分析。研究它们的强、弱相合性及其渐近分布等问题,是相关分析中的基本问题。模型分析 20世纪70年代以来,应用最广泛的时间序列模型是平稳自回归-滑动平均模型 (简称ARMA模型)。其形状为: 式中ε(t)是均值为零、方差为σ2的独立同分布的随机序列;和σ2为模型的参数,它们满足: 对一切|z|≤1的复数z成立。p和q是模型的阶数,为非负整数。特别当q=0时,上述模型称为自回归模型;当p=0时, 称为滑动平均模型。根据x(t)的样本值估计这些参数和阶数,就是对这种模型的统计分析的内容。对于满足ARMA模型的平稳序列,其线性最优预测与控制等问题都有较简捷的解决方法,尤其是自回归模型,使用更为方便。G.U.尤尔在1925~1930年间就提出了平稳自回归的概念。1943年,Η.Β.曼和Α.瓦尔德发表了关于这种模型的统计方法及其渐近性质的一些理论结果。一般ARMA模型的统计分析研究,则是20世纪60年代后才发展起来的。特别是关于p,q值的估计及其渐近理论,出现得更晚些。除ARMA模型之外,还有其他的模型分析的研究,其中以线性模型的研究较为成熟,而且都与ARMA模型分析有密切关系。回归分析 如果时间序列x(t)可表示为确定性分量φ(t)与随机性分量ω(t)之和,根据样本值x(1),x(2),…,x(T)来估计φ(t)及分析ω(t)的统计规律,属于时间序列分析中的回归分析问题。它与经典回归分析不同的地方是,ω(t)一般不是独立同分布的,因而在此必须涉及较多的随机过程知识。当φ(t)为有限个已知函数的未知线性组合时,即 ,式中ω(t)是均值为零的平稳序列,α1,α2,…,αs是未知参数,φ1(t),φ2(t),…,φs(t)是已知的函数,上式称为线性回归模型,它的统计分析已被研究得比较深入。前面叙述的降雨量一例,便可用此类模型描述。回归分析的内容包括:当ω(t)的统计规律已知时,对参数α1,α2,…,αs进行估计,预测x(T+l)之值;当ω(t)的统计规律未知时,既要估计上述参数,又要对ω(t)进行统计分析,如谱分析、模型分析等。在这些内容中,一个重要的课题是:在相当广泛的情况下,证明 α1,α2,…,αs的最小二乘估计,与其线性最小方差无偏估计一样,具有相合性和渐近正态分布性质。最小二乘估计姙j(1≤j≤s)不涉及ω(t)的统计相关结构,是由数据x(1),x(2),…,x(T)直接算出,由此还可得(t)进行时间序列分析中的各种统计分析,以代替对ω(t)的分析。在理论上也已证明,在适当的条件下,这样的替代具有满意的渐近性质。由于ω(t)的真值不能直接量测,这些理论结果显然有重要的实际意义。这方面的研究仍在不断发展。
时间序列分析中的最优预测、控制与滤波等方面的内容见平稳过程条。近年来多维时间序列分析的研究有所进展,并应用到工业生产自动化及经济分析中。此外非线性模型统计分析及非参数统计分析等方面也逐渐引起人们的注意。

C. 时间序列分类算法

欧式距离不能很好地针对时间序列的波动模式进行分类,研发更适合时间序列分类的距离度量就成为关键,这其中最经典的时间序列距离度量就是Dynamic Time Warping (DTW)。 DTW的原理如下:

比如说,给定一个样本序列X和比对序列Y,Z:
X:3,5,6,7,7,1
Y:3,6,6,7,8,1,1
Z:2,5,7,7,7,7,2
请问是X和Y更相似还是X和Z更相似?
DTW首先会根据序列点之间的距离(欧氏距离),获得一个序列距离矩阵 MM,其中行对应X序列,列对应Y序列,矩阵元素为对应行列中X序列和Y序列点到点的欧氏距离:

DTW通过对时间序列波动模式的分析可得到更好的时间序列分类结果。研究表明,在时间序列分类问题上,DTW距离度量配合简单的最小距离分类法(nearest neighbor)就可以取得较传统欧式距离算法(如SVM、经典多层神经网络、决策树、Adaboost)压倒性的优势。

DTW更进一步衍生出多种不同的变种,例如由Keogh和 Pazzani 提出的基于序列一阶导数的改进便取得了良好的效果;其中一种简单的方法叫Complexity Invariant distance (CID),其利用一阶导数信息对DTW距离做计算,在某些问题上具有突出效果。

除了DTW,还有其他考量时间序列的波动模式算法。例如Ye 和Keogh提出的Shapelet方法:考察序列中具有代表意义的子序列来作为Shapelet特征而进行分类。Lin等人提出了基于字典的方法,将序列根据特定的字典转化为词序列,从而进行分类。Deng提出了基于区间的方法,从区间中提取波动的特征。

除了上述方法外,聚合算法(将多种不同算法聚合在一起)的研究也有了长足的进步。最近提出的COTE算法几乎将上述所有不同分类算法聚合在一起,得到了优异的分类效果。

这一类的方法都是一些通过某种度量关系来提取相关特征的方法,如词袋法,通过找到该时间序列中是否有符合已有词袋中的特征(序列的样子),将一个序列用词来表示,再对词进行分类。而其他的基于特征的方法都是利用了类似的方法,如提取统计量,基于规则等,再通过分类模型进行分类。

1、MLP、FCN、ResNet
MLP的输入是一个向量(数组),通过全连接的形式对整体数组的每一个元素逐层赋予权重,并求得最后的分类,这种方法是一种比较粗暴的学习方法,直接学习所有元素直接的线性或非线性相关关系,但是并没有去深度挖掘数组中更好的表现特征,分类效果不佳。

FCN是将MLP中的全链接层用卷积层进行替代,Resnet也是,但是其中的卷积层都用一维卷积核进行了替代。

来自于Time Series Classifification from Scratch with Deep Neural Networks: A Strong Baseline.可以看到深度学习的方法效果基本上与传统方法相接近,甚至有所超过,其中整体表现最好的是FCN。

LSTM_FCN的方法比较简单,是将输入分别输入到两个分支中,LSTM和FCN,并在最后将两个输出分支进行concat进行softmax获得分类结果。在这篇论文中,作者说这种方法取得了比FCN更好的效果。
在其他的一些比赛方案中,也有resnet+LSTM+FC的组合形式,通过Resnet的一维卷积先提取相关特征,然后通过LSTM学习一维特征向量的相关关系,再进行分类,可能针对于不同的问题还是要试试才知道哪个的效果更加好。
BiGRU-CNN与以上方法相比实际上并没有做什么大的改进,就是将LSTM分支替换成双向的GRU分支。

阅读全文

与时间序列算法分类相关的资料

热点内容
java仿qq聊天 浏览:398
解压的ipa重新打包 浏览:140
程序员那么可爱vip版 浏览:237
程序员怎么升职 浏览:241
图形化命令按钮vb 浏览:985
vcu盘加密怎么设置 浏览:412
如何加密备份微信聊天记录 浏览:527
安卓手机如何模拟键盘 浏览:930
查看dns地址命令 浏览:767
android录屏工具 浏览:840
成都互动直播系统源码 浏览:955
usb蓝牙android 浏览:409
服务器显示error1什么意思 浏览:710
python代码精简 浏览:459
文件加密了怎么找到了 浏览:196
jellyfin插件怎么选择主服务器 浏览:839
asp用户注册源码 浏览:48
什么是照片压缩文件 浏览:394
java调用js代码 浏览:981
昆山市民app怎么修改身份信息 浏览:779