logo

时间序列分析概述

Time Series

王哲峰 / 2022-04-20


目录

时间序列分析介绍

时间序列简介

时间序列分析方法有两种:

描述性时序分析包含以下内容:

统计性时序分析又分为两种:

时间序列发展

最早的时间序列分析可以追溯到 7000 年前的古埃及。古埃及人把尼罗河涨落的情况逐天记录下来, 从而构成一个时间序列。对这个时间序列长期的观察使他们发现尼罗河的涨落非常有规律, 由于掌握了涨落的规律,古埃及的农业迅速发展

AR、MA、ARMA

一般认为现代时间序列分析起源于英国统计学家 G.u.Yule 在 1927 年提出的 AR(自回归)模型。 G.T.Walker 在 1931 年提出了 MA(移动平均)模型, AR 模型、MA 模型与后来的 ARMA 模型,构成了时间序列分析的基础,至今仍被大量应用。 这些模型主要应用于单变量、同方差场合的平稳序列

ARCH(自回归条件异方差)、TAR(门限自回归)

随着时间序列分析理论的发展,人们越来越关心多变量、异方差、非线性的时间序列。 Engle 和 Granger 提出了协整理论及其方法,为多维非平稳序列的建模提供了一种途径; Engle 首先提出 ARCH(自回归条件异方差)模型用于处理异方差的情形; Tong 和 Lim 提出了 TAR(门限自回归)模型处理非线性时序等等。 这些方法都在往后的发展中不断革新,应用广泛, 例如很多方法被广泛地用于验证金融理论中的规律性描述以及金融市场的预测和决策

谱分析:最小交叉熵法、傅里叶变换、小波分析

时间序列分析方法的另一个突破是在谱分析方面。给定一个时间序列样本, 通过傅里叶变换可以把时域上的数据变换到频域,即为经典谱分析方法。 Burg 在他从事的地震信号的分析与处理中提出最大熵谱,其把信息熵的概念融入信号处理中, 有时又称为时序谱分析方法,是现代谱分析的开始

深度学习 RNN:LSTM

随着时间序列分析的理论与应用这两方面的深入研究,时序分析应用的范围日益扩大。 目前,深度神经网络兴起,越来越多的方法采用 LSTM 进行长时序列建模与分析。 这种无参数化的方法更自动的抽取时序特征以更好的适应下游的任务。 跨时间跨维度关联分析促使矩阵方法的繁荣,寻求多源时序关联分析, 以及更结构化的时序信息表示成为现在新的研究方向

img

时间序列定义

定义

时间序列(Time Series) 是一组按照时间发生先后顺序进行排列的数据点序列。 通常一组时间序列的时间间隔为一个恒定值(如 1s,5s,1min,1h,1d 等)。 因此时间序列亦可作为离散时间数据进行分析处理

按照时间的顺序把随机事件变化发展的过程记录下来就构成了一个时间序列。 在统计研究中,常用按时间顺序排列的一组随机变量 $\{\ldots, X_{1}, X_{2}, \ldots, X_{t}, \ldots\}$ 来表示一个随机事件的序列, 间记为 $\{X_{t}, t \in T\}$。 用 $\{x_{1}, x_{2}, \ldots, x_{N}\}$$\{x_{t}, t = 1, 2, \ldots, N\}$ 表示该随机序列的 $N$ 个有序观测值。 经常认为这些观测值序列是来自一个时间序列随机过程的有限样本,这个过程从无限远的过去开始并将持续到不确定的未来:

img

时间序列的每个元素都被认为是一个具有概率分布的随机变量, 这里 $x_{1}$ 可以认为是一个随机变量的一个取值, $x_{2}$ 等也均是具有某种分布的随机变量的一个取值(每个变量的分布可能相同也可能不同)

比如这里有一个时间序列数据 $\{1, 3, 5, 7, 2, 6, 9\}$,更准确的叫法应该是一个观测值序列。 虽说这里 $t_{t}$ 时刻只有一个取值 $1$$t_{2}$ 时刻也只有一个取值 $3$, 但不防认为 $t_{1}$ 时刻对应的是一个变量 $X_{1}$$t_{2}$ 时刻对应的也是一个变量 $X_{2}$, 变量 $X_{1}, X_{2}$ 可能有多个取值的同时也有它们自己的概率分布, 只是在这一次的观测中分别取值 $1$$3$ 而已

img

假如序列中每个元素的分布具有共同的参数,比如每个 $x_{t}$ 的方差 $Var(x_{t})$ 相同, 并且每对相邻元素之间的协方差 $Cov(x_{t}, x_{t-1})$ 也相同。 如果对于任意 $t \in [1, N]$$x_{t}$ 的分布都相同, 则认为序列是平稳的

img

类型

在实际场景中,不同的业务通常会对应不同类型的时间序列模式, 一般可以划分为几种类型: 趋势性、周期性、随机性、综合性

下图中展示了几种常见的时间序列的类型:

img

时间序列的研究领域

学术界对时间序列的研究,主体分为时序表示、时序预测、模式识别、异常检测、关联分析等几大类

时间序列分析具体包括的任务:

时间序列预测

时间序列预测-Time Series Forecasting

预测表示预测时间序列即将发生的观测值的数值的过程。这是一个具有挑战性的问题, 因为它是一个外推过程,并且在估计中存在很大的不确定性。 模型依赖于从过去的数据中得出的假设,而这些假设通常不成立

时空预测-Spatio-temporal Forecasting

类似于时间序列预测,但针对多个位置或轨迹

超出概率预测-Exceedance Probability Forecasting

预测即将到来的值是否会超过预定义的阈值

Alt text

时间序列异常检测

时间序列异常检测,Time Series Anomaly Detection, 或 Activity Monitoring 用来及时检测需要采取行动的罕见但具有破坏性的事件

有时我们对预测感兴趣,而不是时间序列的一般行为(例如,在下一次观察中它是上升还是下降,以及各自的幅度), 而是感兴趣的特定和罕见事件。针对此类场景的预测任务是时间序列异常检测,也称为活动监控

时间序列异常检测背后的主要目标是及时检测有趣但罕见的事件, 这些事件可能在特定应用领域具有破坏性。这对于决策至关重要, 因为它使专业人员能够采取适当的行动来防止这些事件或减轻其后果。 因此,从机器学习的角度来看,预测模型的输出是二进制的,表示感兴趣的事件是否发生

关于活动监控有两个主要挑战

这个任务有点类似于上面描述的超越预测(超越概率预测)。但是,两者之间存在重要差异。 超出预测通常(但不一定)与个别时间序列有关。另一方面,时间序列异常检测通常涉及随着时间的推移监视多个实体, 这些实体可能会或可能不会经历感兴趣的事件。此外,在时间序列异常检测中, 事件是任意定义的,并不特定于超过特定阈值,尽管可能是这种情况

时间序列分类

时间序列分类 Time Series Classification 用来将时间序列分类为预定义的类

时间序列分类是将类别分配给时间序列的过程。这个问题类似于传统的分类,但属性是按时间排序的

时间序列分类与上述经典时间序列预测任务有两个重要区别:

有时目标是在不牺牲性能的情况下尽早对时间序列进行分类,这代表了早期的时间序列分类任务。 每次测量可能代价高昂,或者尽快采取行动可能很重要。这导致了权衡,因为更少的观察通常会导致更差的性能

时间序列检索

时间序列分割

因果分析

生存分析

生存分析 Survival Analysis 用来预测感兴趣事件发生的时间

关于生存分析的文章如下:

生存分析背后的目标是预测感兴趣事件发生的时间。 这个问题通常与随着时间的推移观察到一组实体(例如人、设备)的领域有关。 示例应用程序包括犯罪学(预测再犯的时间)、 工程可靠性(预测设备故障的时间)或客户管理(预测客户流失的时间)。

生存分析问题的主要挑战是观察经常被审查——关于某些实体的信息仅部分可用。 这可能是因为实体可能在事件发生之前停止被观察

时间序列模式识别

还有其他时间序列任务,其主要目标是知识发现。这些本质上不是预测性的,但仍然非常相关。 它们提供有关时间序列的重要信息,并可用作预测任务的子任务。该类问题旨在对时间序列各种形式的信息进行处理和分析, 以对事物或现象进行描述、辨认、分类和解释的过程

时间序列聚类(Time Series Clustering):

摘要(Summarisation):

主题发现(Motif Discovery):

时间序列表示:

时间序列关联分析:

一些经验与思考

  1. 训练测试数据的划分
    • 和其他机器学习场景不同,时间序列预测的数据是带有前后顺序的序列数据,因此在做训练测试数据的划分时, 要注意不能泄露测试数据给模型,因此在做训练测试数据划分时,需要让测试数据全都在训练数据的时间戳之后
  2. 一线业务人员经验的使用
    • 在做一些时间序列预测场景时,我们发现一线业务人员经验是极其宝贵的,比如说一些抚平/剔除业务异常数据的经验, 他们会知道在历史数据里哪些时间段的数据是异常的原因是什么,比如各种事件会对不同的业务线产生什么样的影响、 一些预测偏差较大的原因可能是什么。这些宝贵的经验可以转化成时间序列历史数据清洗的规则, 或者是一些时间序列数据校准的 Knowledge Base
  3. 利用能反映未来的信息
    • 当我们在做时间序列预测时,本质我们是在利用历史数据来预测未来,那么如果我们能够拿到更多关于未来的信息, 则可以帮助我们预测的更准。什么是关于未来的信息呢?比如说: 用户的预订信息,用户的浏览数据, 这些数据能够侧面反映用户对于未来某天的兴趣值,从而帮助我们窥探未来
  4. 如何保证输出结果的稳定性
    • 在使用黑盒模型时,我们会发现有时模型输出会存在一些异常点,这可能是由于历史数据中存在一些没有被剔除的噪音, 因此我们需要构建多种可解释性强的预测尺度范围,来校准最后的输出结果,从而提高模型输出的稳定性, 生产中这样的校准有时也可以提高一定的准确率
  5. 重新训练模型的频率
    • 通常,当有新数据获得时,重新训练模型来进行预测,整体来说在每个时间戳能给出更好的预测结果。 如果生产上准备采取这种思路的话,在训练的时候也要用相同的重新训练的方法,来评估哪种模型效果最好, 即采用sliding window / expanding window 的方法去在每个时间戳重新训练预测和记录误差来进行模型评估。 当然这样计算量会比较大,比较适合单一产线并且对准确率较为看中的场景
  6. 如何评估模型的好坏
    • 对于不同的项目,评判时序预测模型好坏的标准是不同的,整体来说,要针对不同的项目场景, 综合模型准确率、可维护性、可解释性、稳定性等多方面去评估一个预测模型或者一个预测框架的合理性和实用性
  7. 历史数据该相信多少
    • 事物是不断发展变化的,比如随着智能客服智能化程度的提高,需要人工客服处理的订单会逐渐变少, 因此人工客服相关的时间序列数据的性质会处于不断变化之中,那么我们对于越久远的历史数据的信任度应该是要逐渐下降的。 处理的方法是一方面我们可以通过分析来判断训练应该取多久内的时间序列数据, 另一方面我们在训练时可以赋予越近的数据更高的权重

参考资料