时间序列分析方法

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

时间序列涉及到很多方面,如天气预报、每日和每小时的气温、股票走势等。,在商业中有许多应用,例如:

接下来,我们将使用一个飞行数据来说明如何使用现有的工具来预测时间序列数据。有三个常用的软件包来处理时间序列:

基于AR和MA的方法一般都需要进行数据预处理,因此本文分为三个部分:

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

观察数据的频率直方图和密度分布,以深入了解数据结构,如下图所示:

时间序列由statsmodels分解,以了解时间序列数据的各个部分,每个部分代表一个模式类别。利用statsmodels序列分解可以看到数据的主要趋势分量、季节分量和残差分量,与我们上面的推测一致。

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

大多数时间序列模型都是在平稳序列的前提下建模的。造成这种情况的主要原因是一个序列有很多(复杂的)非平稳方式,但只有一个平稳性,比较容易分析和建模。

直观来看,如果一个时间序列在某个时间序列中有特定的行为,那么它很可能在未来也有同样的行为。比如已经观测了一周太阳六点钟升起,那么可以推断明天太阳也是六点钟升起,误差很小。

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

一般来说,序列的平稳性可以用下列方法来检验:

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

下图中的圆锥形阴影是置信区间,区间外的数据点表示它与观测数据本身有很强的相关性,并不是来自统计波动。

PACF在计算X(t)和X(t-h)的相关性时,把所有数据点对X(t-h,t)的影响都挖空了,反映了X(t)和X(t-h)的真实相关性(直接相关性)。

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

如果序列是平稳的,其移动平均值/方差将随时间保持稳定。

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

一般来说,如果p值小于0.05,我们认为它是显著的,可以拒绝零假设。而这里的p值0.99显然是非显著的,所以接受零假设,序列是非平稳的。

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

我们可以利用数据变换对那些较大的数据进行更大的惩罚,比如取对数、平方根、立方根、差等。,以达到稳定序列的目的。

移动平均后,数据失去了原有的特征(波动上升),所以丢失的信息太多,肯定不可能作为后续模型的输入。

差分法是非平稳序列转化为平稳序列的一种常用方法。ARIMA的‘I’指的是差分,所以ARIMA可以处理非平稳序列,相当于通过差分将非平稳序列转化为平稳序列,然后用ARMA建模。

一般的区别是从某个时间值减去前一个时间值得到一个新的序列。但是这里有一点不同。我们用当前时间值减去相应时间的移动平均值。

我们来看看刚才差的结果是什么。

让我们简要总结一下我们刚刚采取的步骤:

通过以上三个步骤,我们成功地将一个非平稳序列转化为平稳序列。上面用的是最简单的均线。让我们试试指数移动平均线。

以上是最常用的指数移动平均线的定义,但是熊猫实现的指数移动平均线好像和这个有点不一样,详细的区别需要在熊猫文档里查一下。

指数移动平均线的效果看起来也很差。让我们用差值+指数移动平均线再试一次。

以上,我们通过取log+(指数)移动平均+差分,成功地将非平稳序列转化为平稳序列。

让我们看看变换后的平稳序列的组成部分是什么样的。但是这里我们用最简单的区别。当前时刻的值等于原序列中当前时刻的值减去原序列中前一时刻的值,即x'(t) = x(t)-x(t-1)。

看起来相当不错。它看起来像一个平滑的序列。但是让我们来看看。

可以看出,趋势部分已经基本去除,但季节性部分仍然明显,ARIMA无法对包含季节性的序列进行建模和分析。

在开始时,我们提到这三个软件包都可以对时间序列进行建模。

为了简单起见,这里pmdarima和statsmodels.tsa直接使用了最好的建模方法,即Sarima,它在ARIMA的基础上增加了附加函数,可以拟合季节部分和附加数据。

在使用ARIMA(自回归综合移动平均线)模型之前,让我们简单了解一下这个模型。该模型实际上可以包括三个部分,对应于三个参数(p,d,q):

因此,ARIMA模型将AR模型和MA模型结合起来,再加上两者的差异,克服了不能处理非平稳序列的问题。但需要注意的是,还是无法拟合季节性。

让我们开始用ARIMA来拟合数据。

(1)分为训练集和验证集。需要注意的是,这里建模用的是原始数据,不是转换后的数据。

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

(3)减少差异结果。

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

想象一下,看看结果是什么。

(6)最后,我们可以对拟合的模型进行诊断,看看结果如何。

我们主要关心的是确保模型的剩余部分是不相关的,并且具有零均值正态分布。如果季节性ARIMA(SARIMA)不符合这些属性,则表明它可以进一步改进。模型诊断根据以下几个方面确定残差是否符合正态分布:

同样,为了方便起见,我们使用auto _ ARIMA(pmdarima中的一种方法,可以自动搜索最佳参数)来建模。

一般来说,在现实生活和生产中,除了季节性物品、趋势性物品和剩余物品之外,通常还有节假日。因此,在prophet算法中,作者同时考虑了上述四项,即:

在上面的公式中,

关于Prophet算法更详细的内容,请参考《脸书时间序列预测的Prophet算法研究》。

Prophet算法就是将这些项进行拟合,然后相加,得到时间序列的预测值。

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

Prophet对输入数据有要求:

有关使用Prophet的示例,请参考Prophet示例笔记本。

下面使用Prophet来处理数据。

参考:

脸书时间序列预测算法Prophet的研究

先知示例笔记本

用于选择最佳模型的auto_arima文档

数据分析技术:用于时间序列分析的AR/MA/ARMA/ARIMA模型系统。

/advaitsave/时间序列预测简介-Python

时间序列分析

我的第一个时间序列比较(补充先知)

先知官方文档:https://Facebook incubator . github . io。