当前位置:首页 > 数码 > 时序分析中的常用算法-都在这里了 (时序分析的特点)

时序分析中的常用算法-都在这里了 (时序分析的特点)

admin3个月前 (04-21)数码23

简介

时序分析是一种预测建模技术,它利用历史数据中事件的时间特征来预测未来事件的特征。它不同于回归分析,因为时序分析依赖于事件发生的顺序。

时序分析类型

时序分析分为两类: 静态时序分析 (STA):假定时间序列是固定的,不会随着时间推移而变化。 动态时序分析:考虑时间序列随着时间推移的变化。

时序分析算法

有许多用于时序分析的算法,包括:

1. 深度学习时序分析

循环神经网络 (RNN)

RNN 是一种具有循环结构的神经网络,能够记忆过去的信息。它们适用于解决时间间隔较短的问题。

长短期记忆网络 (LSTM)

LSTM 是专为解决 RNN 长期依赖问题而设计的。它们适用于预测具有较长时间间隔和延迟的重要事件。

2. 传统时序分析模型

算法

自回归模型 (AR)

AR 模型假定当前值与过去的值之间存在线性关系。它们用于预测滞后不大的时间序列。

移动平均法 (MA)

MA 模型基于数据的移动平均值,假定未来值与过去值之间具有平稳性。它们捕捉到时间序列中的移动平均关系。

自回归滑动平均模型 (ARMA)

ARMA 模型是 AR 和 MA 模型的混合,提供了预测误差较小的更通用的方法。

自回归差分移动平均线 (ARIMA)

ARIMA 模型通过差分将不平稳时间序列转换为平稳时间序列。它结合了 AR、差分和 MA 模型,适用于预测复杂的时间序列模式。

时序分析的应用

时序分析在许多领域都有应用,包括: 预测时间序列(例如销售、股票价格) 异常检测(例如欺诈、设备故障) 模式识别(例如手势识别、语音识别) 优化(例如供应链管理、调度)

结论

时序分析是一种强大的工具,可用于根据历史数据预测未来事件。通过选择适当的算法并利用领域知识,可以有效地利用时序分析来解决各种实际问题。

时间序列分析方法

时间序列是指一组在连续时间上测得的数据,其在数学上的定义是一组向量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 和 直接使用最好的建模方法即SARIMA,该方法在ARIMA的基础上添加了额外功能,可以拟合seasonal部分以及额外添加的数据。 在使用ARIMA(Autoregressive Integrated Moving Average)模型前,我们先简单了解下这个模型。 这个模型其实可以包括三部分,分别对应着三个参数(p, d, q): 因此ARIMA模型就是将AR和MA模型结合起来然后加上差分,克服了不能处理非平稳序列的问题。 但是,需要注意的是,其仍然无法对seasonal进行拟合。 下面开始使用ARIMA来拟合数据。 (1) 先分训练集和验证集。 需要注意的是这里使用的原始数据来进行建模而非转换后的数据。 (2)ARIMA一阶差分建模并预测 (3)对差分结果进行还原 先手动选择几组参数,然后参数搜索找到最佳值。 需要注意的是,为了避免过拟合,这里的阶数一般不太建议取太大。 可视化看看结果怎么样吧。 (6)最后,我们还能对拟合好的模型进行诊断看看结果怎么样。 我们主要关心的是确保模型的残差(residual)部分互不相关,并且呈零均值正态分布。 若季节性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模型体系时间序列分析 My First Time Series Comp (Added Prophet) Prophet官方文档:

时序异常检测算法

STL表示基于损失的季节性分解的过程。该技术能够将时间序列信号分解为三个部分: 季节性变化(seasonal)、趋势变化(trend)和剩余部分(residue) 。

顾名思义,这种方法适用于季节性的时间序列,这是比较常见的情况。

这里不太明显的地方是,我们为了得到更可靠的异常检测结果,使用了 绝对中位偏差 。该方法目前最好的实现是Twitter 的异常检测库 ,它使用了Generalized Extreme Student Deviation (广义的 ESD 算法)测试残差点是否是一个离群点。

该方法的优点在于其简单性和健壮性。它可以处理很多不同的情况,并且所有的异常情况仍然可以直观解释。

它主要擅长于附加的异常值检测。如果想要检测一些水平变化,则可以对移动平均信号进行分析。

该方法的缺点是在调整选项方面过于死板。你所能做的只有通过显著性水平来调整置信区间。

当信号特征发生了剧烈变化时,该方法就失效了。例如,跟踪原本对公众是关闭状态的,却突然对公众开放的网站用户数量。在这种情况下,就应该分别跟踪在启动开放之前和开放之后发生的异常。

分类回归树(CART)是目前最稳健、最有效的机器学习技术之一。它也可以应用于异常检测问题。

分类树学习的最流行实现是xgboost 库 。

这种方法的优点是它不受信号结构的任何约束,而且可以引入许多的特征参数进行学习,以获得更为复杂的模型。

该方法的缺点是会出现越来越多的特征,这很快会影响到整体的计算性能。在这种情况下,你应该有意识地选择有效特征。

自回归移动平均模型(ARIMA)是一种设计上非常简单的方法,但其效果足够强大,可以预测信号并发现其中的异常。

该方法的思路是从过去的几个数据点来生成下一个数据点的预测,在过程中添加一些随机变量(通常是添加白噪声)。以此类推,预测得到的数据点可以用来生成新的预测。很明显:它会使得后续预测信号数据更平滑。

使用这种方法最困难的部分是 选择 差异数量、自动回归数量和预测误差系数。

该方法的另一个障碍是信号经过差分后应该是固定的。也就是说,这意味着信号不应该依赖于时间,这是一个比较显著的限制。

异常检测是利用离群点来建立一个经过调整的信号模型,然后利用t-统计量 来检验该模型是否比原模型能更好的拟合数据。

该方法最受欢迎的实现是 R 语言中的tsoutliers包。在这种情况下,你可以找到适合信号的 ARIMA 模型,它可以检测出所有类型的异常。

指数平滑方法与 ARIMA 方法非常相似。基本的指数模型等价于 ARIMA (0, 1, 1) 模型。

从异常检测的角度来看,最有趣的方法是Holt-Winters 季节性方法 。该方法需要定义季节性周期,比如周、月、年等等。

如果需要跟踪多个季节周期,比如同时跟踪周和年周期,那么应该只选择一个。通常是选择最短的那个:所以这里我们就应该选择周季节。

这显然是该方法的一个缺点,它会大大影响整体的预测范围。

和使用 STL 或 CARTs 方法一样,我们可以通过统计学方法对离群值进行统计来实现异常检测。

与 CART 方法一样, 神经网络有两种应用方式:监督学习和无监督学习。

我们处理的数据是时间序列,所以最适合的神经网络类型是 LSTM 。如果构建得当,这种循环神经网络将可以建模实现时间序列中最复杂的依赖关系,包括高级的季节性依赖关系。

如果存在多个时间序列相互耦合,该方法也非常 有用 。

免责声明:本文转载或采集自网络,版权归原作者所有。本网站刊发此文旨在传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及版权、内容等问题,请联系本网,我们将在第一时间删除。同时,本网站不对所刊发内容的准确性、真实性、完整性、及时性、原创性等进行保证,请读者仅作参考,并请自行核实相关内容。对于因使用或依赖本文内容所产生的任何直接或间接损失,本网站不承担任何责任。

标签: 算法

“时序分析中的常用算法-都在这里了 (时序分析的特点)” 的相关文章

编程利器-面试法宝-刷题360-悟透算法真理 (面条式编程)

编程利器-面试法宝-刷题360-悟透算法真理 (面条式编程)

最近不时在刷算法题,刷华为OD算法题,有诸多好处: 宿愿用我自己疯狂刷题的劲头,感化大家,让大家爱上刷题,顺利经过华为OD机试,把握更多低劣的算法。 上方这道题,是很经典的深度优先搜查...

Dijkstra算法的深入探索-把握效率与最优性 (dijkstra 怎么读)

Dijkstra算法的深入探索-把握效率与最优性 (dijkstra 怎么读)

引言 在计算机科学和图论中,算法在有效解决复杂问题方面起着至关重要的作用。其中一个突出的算法是Dijkstra算法,它由荷兰计算机科学家Edsger W. Dijkstra于1956年开发。...

面向跨领域数据的迁移学习算法与模型研究 (什么是跨领域)

面向跨领域数据的迁移学习算法与模型研究 (什么是跨领域)

引言 随着数据的快速增长和跨领域应用的需求,如何利用已有的知识和数据来解决新领域的问题成为了一个重要的研究方向。迁移学习作为一种有效的机器学习方法,可以通过利用源领域的知识和数据来改善目标领...

强化学习算法在资源调度与优化领域的革命性应用 (深度学习算法)

强化学习算法在资源调度与优化领域的革命性应用 (深度学习算法)

强化学习简介 强化学习是一种机器学习方法,通过智能体与环境的交互来学习最优策略。在资源调度与优化中,我们可以将资源调度问题看作是一个强化学习问题,其中智能体是资源调度器,环境是计...

掌握算法并提升编程技能-程序员算法精通指南 (掌握算法的基本概念)

掌握算法并提升编程技能-程序员算法精通指南 (掌握算法的基本概念)

作为一名程序员,掌握算法对于解决复杂问题至关重要。在面试过程中,算法问题经常被问到,本文将介绍一些重要的算法,以及如何在面试中系统地准备算法。 深度优先搜索 深度优先搜索(DFS)是一...

Snowflake-一种翻新的散布式数据架构-探求-算法 (snowflakes)

Snowflake-一种翻新的散布式数据架构-探求-算法 (snowflakes)

雪花算法引见 雪花算法(Snowflake)是一种散布式惟一ID生成算法,用于生成全局惟一的ID。它的设计指标是在散布式系统中生成ID,保障ID的惟一性、有序性和趋向递增。雪花算法的外围现实...

哈希表底层算法与哈希值计算方法的对比与选择 (哈希表的底层数据结构)

哈希表底层算法与哈希值计算方法的对比与选择 (哈希表的底层数据结构)

哈希表是一种常用的数据结构,用于高效地存储和查找数据。在哈希表中,每个元素都有一个对应的键和值,通过计算键的哈希值,将其映射到数组的特定位置上。哈希值的计算是哈希表的关键步骤之一,它决定了元素在数...