时间序列预测分析方法(Time series Forecasting)(1)

时间序列预测分析方法(Time series Forecasting)(1)

前阵子一直在公司实习,初入职场,工作、学习、生活还没有找到很好的平衡之道,所以一直很少上知乎;趁着最近难得的一段闲暇时间,研究了一些关于时间序列预测的方法理论,即通过一些统计模型对时间序列进行分析建模,并对未来的时间做预测,这一技术有非常多的应用场景:股价预测、天气质量预测、国家经济预测等等

本文将主要就以下这些点展开介绍:

  • 时间序列基本介绍(定义、应用、时间序列特性、相关概念介绍)
  • 预测分析的基本步骤
  • 初步分析
  • 预测方法介绍
  • 时间序列分解 Time series decomposition
  • 利用指数平滑 Exponential smoothing 做时间序列预测
  • 利用ARIMA模型做时间序列预测

时间序列的基本介绍

时间序列是指这样一组数值序列,这组数值序列是依据一定的时间间隔对同一对象的持续观测而记录下来的一串有序数据。比如乘客数量随时间的变化

图一 时间序列示例

现在我们知道什么样的数据属于时间序列了,那么时间序列有什么用途呢?

时间序列中通常蕴含丰富的信息,在很多场景下,这些信息能够帮助人们理解现象并且还可以预测未来;比如在很早以前,巴比伦天文学家对卫星运行轨迹进行持续观测得到序列数据并通过分析数据来预测天文事件;在医学领域,医学专家通过对病人血压的持续测量观测来衡量药物治疗的效果;在股市中,分析股票的历史以来每日收盘价格来预测未来时间的股价;在信息安全领域,通过对网络流量数据的分析,来做网络异常的检测;

既然时间序列数据蕴含着这么丰富的信息,那么时间序列数据本身有哪些特点(如何”携带“信息的呢)呢?

对于一个时间序列,通常可以从四个方面来考虑数据的特性:趋势性Trend)、季节性Seasonal )、周期性Cyclical )、随机性Irregular)。

如果一个时间序列从总体上来看是逐渐增加的、或者减少的、或者保持稳定的,那么该时间序列具有趋势性;如下图

图二 具有趋势性和季节性的时间序列


当时间序列的数据受到一些季节性因素(一年中的不同季度、一周中的工作日和周末、一年中特定的节日、气候等等)的影响,那么时间序列数据就会带有季节性。比如冰棍的销售量通常会在夏天突然增长;在节假日周日,游客数量会增加。具有季节性的时序序列数据通常是以一个固定且可知的频率变化。仔细观察图二的话,你将不仅会发现此时间序列具有明显的趋势性而且还具有季节性。

周期性是时间序列中长期的变化趋势,周期性的变化频率是不可知的,但数据从中长期来看会出现相同的模式,通常是2年及以上时间。比如下图 时间序列 每6~10年会呈现出一定的周期性

图三 具有周期性的时间序列


时间序列中的随机性是由不可预知的影响引起的,这些影响不规则且在特定模式中不会重复。时间序列的随机性是不可预知的部分

图四 只具有随机性的时间序列


通常对于现实生活中的一个时间序列来说,趋势性、周期性、季节性是使得时间序列蕴含可预测信息的原因,而时间序列表现的随机性往往是致使预测出现误差的”罪魁祸首“。所以,并不是所有的时间序列都值得进行预测的,只有那些具有明显的可预测特性的时间序列才能用来进行预测,并且能够得到一个可信的预测结果;对于一个随机性占大部分比例的时间序列,对其进行预测,通常不会得到一个可信的预测结果。


那么既然如此,对一个时间序列进行预测分析需要做哪些步骤呢?

预测分析的基本步骤

  • 初步分析。对拿到的时间序列数据进行初步分析,比如作图,分析数据的趋势性、周期性、季节性等,分析哪些数据是异常点并将其剔除、处理缺失值等
  • 选择模型。根据历史数据的情况(有无、多少、特性)、预测变量与解释变量之间相关性的强弱等选择一些合适的模型。通常选择2到3个潜在模型进行比较是比较常见的。
  • 训练模型。利用一些手段来计算出模型的参数
  • 使用并评估模型的表现。使用新数据让训练好的模型进行预测,并计算出预测结果的准确性


那么接下来我将会介绍每个步骤当中可能会涉及到的一些概念和方法。

初步分析

这里简单地从以下几个方向对时间序列进行初步分析(在实际应用中,视情况可能需要更多的分析过程):

  • 季节性
  • 变量之间的相关性
  • 自相关性
  • 处理缺失值和异常值


1)季节性

通常在得到一组时间序列之后,可以通过做出时间序列图(x轴为采样时间点,y轴为观测数据),能够很容易识别时间序列的一些特性,比如趋势性。如果通过时间序列图无法让你看出时间序列中包含的季节性,那么也许你可以做出季节性图,比如这样

图五 季节性图

通过将每年的数据分别绘制,就能让时间序列的季节性更加清晰的显露出来。当然还有很多其他的方法来判断时间序列是否具有季节性,这里就不详细讲了。


2)变量之间的相关性 Correlation

假设我们希望研究两个变量之间的关联关系,那么这个时候 散点图可能是个很好的工具。

图六 两个时间序列
图七 两个变量的散点图

通过做出两个变量的散点图(以其中一个变量作为x轴、另一个变量作为y轴),来观测图中点的分布情况:如果点散落的越随机,则说明两个变量之间的相关性越弱;如果点散落的越有规律则说明两个变量之间的相关性越强;

另外还可以通过计算两个变量之间的相关性系数r来衡量变量之间的相关性强弱;

图八 变量之间相关性系数的计算公式

其中xt、yt表示在时间点t 变量X和变量Y的观测值,x拔、y拔分别代表变量X、变量Y的平均值;相关性系数r的取值范围[-1,1];r的绝对值越接近1,表示两个变量之间的线性相关性越强;如果相关性系数r为0,则表示两个变量之间不存在线性相关性(但可能存在其他的相关性)


3)自相关性 Autocorrelation

时间序列的自相关性研究的是时间序列与自己的相关性强弱。

图九 时间序列自相关系数的计算公式

比如当k = 1 时,r1 研究的是 yt 与 yt-1 之间的相关性强弱(通俗点讲就是研究 今天的我与昨天的我之间的相关性)。为了得出一个时间序列与自己最相关的一个自己的过去序列,通常需要计算多个k值下的情况,比如计算前9个自相关性系数:

图十 前9个自相关性系数

通过分析各个相关性系数的值的大小,来分析时间序列自相关性的特性;当然也可以通过作图来帮助自己分析,这样的图叫相关图:在这里自相关性系数也被成为ACF值

图十一 相关图 correlogram

从相关图中也能得到关于时间序列趋势性、季节性的信息:

如果时间序列具有趋势性,那么k越小时,相关性系数的值会越大并且为正数;k越大时,相关性系数会越小并且为正数。

如果时间序列具有季节性,那么在出现季节性的k值时,相关性将会比其他的都大。下图中的红线所绘的形状则是因为时间序列具有季节性所致

图十二 带有趋势性和季节性的时间序列的相关图


如果一个时间序列没有自相关性,也就是说rk的绝对值接近于0,称这样的时间序列为白噪声(White noise)。对于一个白噪声,我们期望它的自相关系数为0,但往往不等于0(由于存在随机性变量)。那么如何界定一个时间序列是否为白噪声呢?

通常认为 计算出来的自相关性数值 有95% 值的大小介于下值,则认为该时间序列为白噪声;否则则不是。其中T代表时间序列的大小(即观测值的数量)

4)处理缺失值和异常值

缺失值可能会带来很多麻烦,所有有必要在对时间序列建模之前,分析一下缺失值是否会给预测带来偏差。例如,假设我们正在研究商店的销售额数据,当商店关闭时,在公共假期时就会出现缺失值,也就是当天的销售额为0。假期后的第二天会突然增加销售额。如果我们在预测模型中没有考虑到这一点,则会给模型带来预测偏差。解决这种情况的一种方法是使用动态回归模型(dynamic regression model),该模型具有虚拟变量(dummy variables),指示某一天是公共假日还是非公共假日。注意处理这样的缺失值没有自动化的方法,因为它们依赖于特定的预测上下文。对于缺失值的处理需要根据预测的具体场景有很多处理方法(比如截取最后一个缺失值后面的时间序列进行分析、让模型对缺失值产生估计来当做本来缺失的观测值),这里不展开详细讲解。

异常值是与时间序列中的大多数观测值非常不同的观测值。它们可能是错误的,如果数据中存在极端异常值,那么可能会导致预测方法不能很好地工作。

在这种情况下,我们需要有一些手段来处理异常值,比如用缺失值或与估计值来替换它们,视具体场景而定。但是如果简单地替换异常值而不考虑它们发生的原因是一种危险的做法。因为这些异常值可以提供关于产生异常数据的过程的一些有用信息,而这些信息在预测时应该被考虑到。

具体在实际应用中,时间序列的初步分析可能需要考虑更多的方面,这里仅做科普,仅列举了几种操作,目的是让读者脑海中有一个印象初步分析需要做哪些工作。


到这初步分析已经做完,那么接下来应该就是选择模型了,那时间序列预测分析有哪些模型呢?它们有怎样的使用条件呢?在介绍预测模型之前,你得先了解一些基本的预测方法,这些方法是在预测模型中的基础也是核心关键

预测方法介绍

这里将会介绍四种预测的方法:

  • Average method
  • Naïve method
  • Seasonal naïve method
  • Drift method


1)Average method

这个预测方法的思想很简单:未来的预测值 = 过去历史数值的平均值。公式如下:


2)Naïve method

这个方法如它的名字一样,思想更加简单:未来的预测值 = 时间序列中上一个观测值。公式如下:

听说这个方法,在很多经济和金融领域的时间序列预测分析中表现很好。

3)Seasonal naïve method

跟方法2类似,思想的核心是一致的:未来的预测值 = 上一个时间周期的观测值。公式如下:

比如,未来所有的年份中1季度的销售额的预测值 = 上一个年份1季度销售额的观测值。

4)Drift method

这个方法相当于在第一次和最后一次观测之间画一条线,并将其外推到未来,即认为第一个观测值、最后一个观测值、下一个预测值三点共线,利用斜率相等特性,化简后可得如下公式:

发布于 2018-12-04