时间序列分析算法
简介
在商业应用中,时间是最重要的因素,能够提升成功率。然而绝大多数公司很难跟上时间的脚步。但是随着技术的发展,出现了很多有效的方法,能够让我们预测未来。不要担心,本文并不会讨论时间机器,讨论的都是很实用的东西。
本文将要讨论关于预测的方法。有一种预测是跟时间相关的,而这种处理与时间相关数据的方法叫做时间序列模型。这个模型能够在与时间相关的数据中,寻到一些隐藏的信息来辅助决策。
当我们处理时序序列数据的时候,时间序列模型是非常有用的模型。大多数公司都是基于时间序列数据来分析第二年的销售量,网站流量,竞争地位和更多的东西。然而很多人并不了解的时间序列分析这个领域。
所以,如果你不了解时间序列模型。这篇文章将会想你介绍时间序列模型的处理步骤以及它的相关技术。
本文包含的内容如下所示:
目录
* 1、时间序列模型介绍
* 2、使用R语言来探索时间序列数据
* 3、介绍ARMA时间序列模型
* 4、ARIMA时间序列模型的框架与应用
让我们开始吧
1、时间序列模型介绍
Let’s begin。本节包括平稳序列,随机游走,Rho系数,Dickey Fuller检验平稳性。如果这些知识你都不知道,不用担心-接下来这些概念本节都会进行详细的介绍,我敢打赌你很喜欢我的介绍的。
平稳序列
判断一个序列是不是平稳序列有三个评判标准:
1. 均值 ,是与时间t 无关的常数。下图(左)满足平稳序列的条件,下图(右)很明显具有时间依赖。
-
方差 ,是与时间t 无关的常数。这个特性叫做方差齐性。下图显示了什么是方差对齐,什么不是方差对齐。(注意右手边途中的不同分布。)
-
协方差 ,只与时期间隔k有关,与时间t 无关的常数。如下图(右),可以注意到随着时间的增加,曲线变得越来越近。因此红色序列的协方差并不是恒定的。
我们为什么要关心平稳时间序列呢?
除非你的时间序列是平稳的,否则不能建立一个时间序列模型。在很多案例中时间平稳条件常常是不满足的,所以首先要做的就是让时间序列变得平稳,然后尝试使用随机模型预测这个时间序列。有很多方法来平稳数据,比如消除长期趋势,差分化。
随机游走
这是时间序列最基本的概念。你可能很了解这个概念。但是,很多工业界的人仍然将随机游走看做一个平稳序列。在这一节中,我会使用一些数学工具,帮助理解这个概念。我们先看一个例子
例子:想想一个女孩随机的在想象一个女孩在一个巨型棋盘上面随意移动。这里,下一个位置只取决于上一个位置。
现在想象一下,你在一个封闭的房间里,不能看见这个女孩。但是你想要预测不同时刻这个女孩的位置。怎么才能预测的准一点?当然随着时间的推移你预测的越来越不准。在t=0时刻,你肯定知道这个女孩在哪里。下一个时刻女孩移动到附件8块方格中的一块,这个时候,你预测到的可能性已经降为1/8。继续往下继续预测,现在我们将这个序列公式化:
1
2
|
$X(t) = X(t-1) + Er(t)$ 这里的$Er_t$代表这这个时间点随机干扰项。这个就是女孩在每一个时间点带来的随机性。 |
现在我们递归所有x时间点,最后我们将得到下面的等式:
1
|
$X(t) = X(0) + Sum(Er(1),Er(2),Er(3).....Er(t))$ |
现在,让我们尝试验证一下随机游走的平稳性假设:
1. 是否均值为常数?
1
|
E[X(t)] = E[X(0)] + Sum(E[Er(1)],E[Er(2)],E[Er(3)].....E[Er(t)]) |
我们知道由于随机过程的随机干扰项的期望值为0.到目前为止:E[X(t)] = E[X(0)] = 常数
2. 是否方差为常数?
1
2
|
Var[X(t)] = Var[X(0)] + Sum(Var[Er(1)],Var[Er(2)],Var[Er(3)].....Var[Er(t)]) Var[X(t)] = t * Var(Error) = 时间相关 |
因此,我们推断,随机游走不是一个平稳的过程,因为它有一个时变方差。此外,如果我们检查的协方差,我们看到协方差依赖于时间。
我们看一个更有趣的东西
我们已经知道一个随机游走是一个非平稳的过程。让我们在方程中引入一个新的系数,看看我们是否能制定一个检查平稳性的公式。
Rho系数
1
|
X(t) = Rho * X(t-1) + Er(t) |
现在,我们将改变Rho看看我们可不可以让这个序列变的平稳。这里我们只是看,并不进行平稳性检验。
让我们从一个Rho=0的完全平稳序列开始。这里是时间序列的图:
将Rho的值增加到0.5,我们将会得到如下图:
你可能会注意到,我们的周期变长了,但基本上似乎没有一个严重的违反平稳性假设。现在让我们采取更极端的情况下ρ= 0.9
我们仍然看到,在一定的时间间隔后,从极端值返回到零。这一系列也不违反非平稳性明显。现在,让我们用ρ= 1随机游走看看
这显然是违反固定条件。是什么使rho= 1变得这么特殊的呢?,这种情况并不满足平稳性测试?我们来找找这个数学的原因
公式X(t) = Rho * X(t-1) + Er(t)的期望为:
1
|
E[X(t)] = Rho *E[ X(t-1)] |
这个公式很有意义。下一个X(或者时间点t)被拉到Rho*上一个x的值。
例如,如果x(t–1)= 1,E[X(T)] = 0.5(Rho= 0.5)。现在,如果从零移动到任何方向下一步想要期望为0。唯一可以让期望变得更大的就是错误率。当Rho变成1呢?下一步没有任何可能下降。
Dickey Fuller Test平稳性
这里学习的最后一个知识点是Dickey Fuller检验。。在统计学里,Dickey-Fuller检验是测试一个自回归模型是否存在单位根。这里根据上面Rho系数有一个调整,将公式转换为Dickey-Fuller检验
1
2
|
X(t) = Rho * X(t-1) + Er(t) => X(t) - X(t-1) = (Rho - 1) X(t - 1) + Er(t) |
我们要测试如果Rho–1=0是否差异显著。如果零假设不成立,我们将得到一个平稳时间序列。
平稳性测试和将一个序列转换为平稳性序列是时间序列模型中最重要的部分。因此需要记住本节提到的所有概念方便进入下一节。
接下来就看看时间序列的例子。
2、使用R探索时间序列
本节我们将学习如何使用R处理时间序列。这里我们只是探索时间序列,并不会建立时间序列模型。
本节使用的数据是R中的内置数据:AirPassengers。这个数据集是1949-1960年每个月国际航空的乘客数量的数据。
在入数据集
下面的代码将帮助我们在入数据集并且能够看到一些少量的数据集。
1 > data(AirPassengers)#在入数据
2 > class(AirPassengers)
3 [1] "ts"
4 #查看AirPassengers数据类型,这里是时间序列数据
5 > start(AirPassengers)
6 [1] 1949 1
7 #这个是Airpassengers数据开始的时间
8 > end(AirPassengers)
9 [1] 1960 12
10 #这个是Airpassengers数据结束的时间
11 > frequency(AirPassengers)
12 [1] 12
13 #时间序列的频率是一年12个月
14 > summary(AirPassengers)
15 Min. 1st Qu. Median Mean 3rd Qu. Max.
16 104.0 180.0 265.5 280.3 360.5 622.0
矩阵中详细数据
1 #The number of passengers are distributed across the spectrum
2 > plot(AirPassengers)
3 #绘制出时间序列
4 >abline(reg=lm(AirPassengers~time(AirPassengers)))
5 # 拟合一条直线
1 > cycle(AirPassengers)
2 Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
3 1949 1 2 3 4 5 6 7 8 9 10 11 12
4 1950 1 2 3 4 5 6 7 8 9 10 11 12
5 1951 1 2 3 4 5 6 7 8 9 10 11 12
6 1952 1 2 3 4 5 6 7 8 9 10 11 12
7 1953 1 2 3 4 5 6 7 8 9 10 11 12
8 1954 1 2 3 4 5 6 7 8 9 10 11 12
9 1955 1 2 3 4 5 6 7 8 9 10 11 12
10 1956