基础介绍

​ 本文是通过实际商业/数据分析应用中的时间序列分析进行介绍,是以应用观点来看待时间序列分析,不对其背后的数学知识进行深究,后期会写文章,讨论其背后的数学知识。

​ 在数据驱动的时代,企业通常会用已有的数据来对未来进行预测。如果历史数据完全是被预测变量过去发生的数值,这种数据被称为时间序列。时间序列分析的目标,就是发现时间序列中存在的规则性状态,然后基于这个状态对未来进行预测。

​ 既然是讲时间序列分析,那么时间序列分析到底是什么?这里给一个比较宽松的定义:时间序列(Time Series)是变量在各个时间点或时间范围上观测值的数列。

​ 想分析一个时间序列的模式,必须绘制时间序列图,一般绘图用横轴代表时间,纵轴代表时间序列中的观察值。

假设,有一个汽油销售公司,记录了过去几周的数据:

我们对前12周绘制的时间序列图如下所示:

时间序列的集中类型

水平变化状态的时间序列(Horizontal Pattern)

从上面的图片中可以看到,前12周的销量其实是围绕着一个19.25左右上下浮动,尽管存在着一些随机性,我们依然愿意把这种时间序列称为水平变化(Horizontal Pattern)的时间序列

在时间序列的研究中,经常提到一个概念,叫做平稳时间序列(stationary time series),平稳时间序列是指时间序列的统计特性是不随着时间变化而变化的。具体讲,就是符合下面两个要求:

  1. 数据在产生的过程中,存在着一个常数均值
  2. 时间序列的波动不会随着时间改变

注意:不能仅仅通过观察时间序列是不是存在水平波动,来判断时间序列是不是平稳。很多高级的关于预测分析的书中,都讲过如何识别一个时间序列是不是平稳的方法,也有把一个不平稳的时间序列变成平稳的方法。

很多商业行为,会把一个水平变化的时间序列,变到一个新的水平上,而且变化后的时间序列依然是水平变化的。比如说,汽油销售公司跟警察局签订了一份合同,从第13周开始,为警察局供应汽油。由于这个合同,第13周开始的销量肯定会有一定程度的增加。

那么,我们对所有数据进行绘制,来看下这个变化。

可以看出,在13周之后,数据在一个新的水平上波动。在实际的建模中,这种情况会对模型有很大影响,而且由于这些行为没法预测,对建模带来了很大的困难,所以选择预测方法很重要。

带趋势的时间序列(Trend Pattern)

时间序列的短期波动很正常,但如果在一个更长的时间范围中,时间序列呈现出向更大或者更小的数值逐渐移动的现象,我们会称之为带趋势的时间序列。趋势现象是长期因素作用的结果,比如人口增长、人口的迁移变化、技术革新等等。

下面这张表是某个生产商过去10年中,每年的自行车销售量。

YearSales
121.6
222.9
325.5
421.9
523.9
627.5
731.5
829.7
928.6
1031.4

把它们画出来:

可以看出,虽然短期有波动,但是随着时间的推移,整体上是呈现上升趋势的。(比如纳斯达克指数基金等等,短期可能会有不小的涨跌,但长期是涨的)

带季节性波动的时间序列(Seasonal Pattern)

游泳圈,肯定是每年夏天销量高。而感冒药肯定是冬天销量高。这种数据就叫做带有季节性波动的时间序列

下图是一个雨伞销量,可以很好的解释:

带有周期性波动的时间序列(Cyclical Pattern)

这个就不多解释了,长期围绕着一个趋势上下波动,就是有周期性波动。比如,$sin(x)$就是有周期性波动。

识别这些波动对预测很重要,想识别这些波动,最好先绘制时间序列图之后再判断。

预测准确度问题

常用的准确度衡量公式有3种:

  • 平均预测误差(Mean Forecast Error, MFE)
  • 平均绝对误差(Mean Absolute Error, MAE)
  • 均方误差(Mean Squared Error, MSE)

在它们的基础上,还有一个比较好的衡量公式:

  • 绝对值相对误差(Mean Absolutely Percentage Error, MAPE)

假定$t$时刻的实际值为$y_t$,而预测值为$\hat y_t$。那么,预测误差为:

$$ e_t=y_t-\hat y_t $$

平均预测误差MFE的计算公式如下:

$$ MFE=\frac{\sum\limits_{t=k+1}^{n}e_t}{n-k} $$

其中,$n$为样本总数,而无法预测的项数为$k$(比如,建立一个预测模型,$\hat y_{t+1}=y_t$,用前一天的值作为预测值,那么$y_1$是第一天的值,不能预测,所以$k=1$)。

MFE由于会正负相抵,其实不是一个很好的衡量误差的函数。但是,它却可以根据看出来预测算法整体是习惯高估还是低估,如果MFE过大(过小),可能会说明模型整体会习惯高估(低估),这是大部分书中都没有说明的,但却很有用,也说明所有工具,都有其用处

为了解决MFE正负相抵的问题,可以使用平均绝对误差MAE,其计算公式为:

$$ MAE=\frac{\sum\limits_{t=k+1}^{n}|e_t|}{n-k} $$

由于绝对值不适合用来进行微分等等操作,不适合用来预测,所以MAE通常作为一个误差衡量标准,但是在真正的模型拟合中,通常使用 均方误差MSE,其公式如下:

$$ MSE=\frac{\sum\limits_{t=k+1}^{n}e_t^2}{n-k} $$

无论是绝对值误差还是均方差,都与时间序列观察值的量级有关,想要看相对精度,可以使用绝对值相对误差MAPE,公式如下:

$$ MAPE=\frac{\sum\limits_{t=k+1}^{n}\left(\frac{|e_t|}{y_t} \right)}{n-k} $$

通过这个误差,可以算出误差的百分比,而与量级无关。

保证高精度很重要,但是,在预测的时候,良好的判断和认知也起着重要的作用。一味地追求高精度是无意义的,甚至可能会产生过拟合。

移动平均(Moving Averages)与指数平滑法(Exponential Smoothing)

移动平均(Moving Averages)

在通过过去的数据预测未来的数据时,一个最简单的方法,是利用与该数据最接近的$k$个点的算术平均数作为预测值:

$$ \begin{aligned} \hat y_{t+1} &=\frac{\sum\limits_{i=t-k+1}^ty_i}{k}\\ &=\frac{y_{t-k+1}+...+y_{t-1}+y_t}{k} \end{aligned} $$

指数平滑法(Exponential Smoothing)

指数平滑法,是利用时间序列观察值的加权平均作为预测值,其计算公式为:

$$ \hat y_{t+1}=\alpha y_t+(1-\alpha)\hat y_t $$

其中,$\alpha$是平滑系数,当$\alpha=0$时,等于直接用预测值作为最终的预测结果,$\alpha$越大,则平滑程度越高。

这不就是个加权和吗?为什么叫指数平滑呢?现在来解释一下。

假设,一个最简单的预测。我们的算法是以前一天的值,作为对后一天的值的预测,也就是$\hat y_t=y_{t-1}$,那么可以推出:

$$ \begin{aligned} \hat y_2 &= \alpha y_1 +(1-\alpha)y_1\\ &=y_1 \end{aligned} $$

那么把对第2天的预测数据,带到第3天的预测中接着往下推:

$$ \begin{aligned} \hat y_3 &= \alpha y_2 +(1-\alpha)\hat y_2\\ &=\alpha y_2 +(1-\alpha)y_1 \end{aligned} $$

接着往下推:

$$ \begin{aligned} \hat y_4 &= \alpha y_3 +(1-\alpha)\hat y_3\\ &=\alpha y_3 +(1-\alpha)[\alpha y_2 +(1-\alpha)\hat y_2]\\ &=\alpha y_3 +(1-\alpha)[\alpha y_2 +(1-\alpha)y_1]\\ &=\alpha y_3 +\alpha(1-\alpha)y_2 +(1-\alpha)^2y_1\\ \end{aligned} $$

可以看出对$t+1$天的预测,其实是前面$t$天的加权平均数。而越往前,其权值就越以指数级下降,下降速度与$\alpha$的大小有关,$\alpha$越大,则下降的速度快。所以,这就是指数平滑法中的指数的由来。

下面是使用移动平均方法($k=3$)加上指数平滑法($\alpha=0.2$) 对汽油销量的预测的图片:

其中,蓝色为真实值,黑色为预测值,可以看出,指数平滑方法把波动平滑掉了,看起来比较光滑。

最后修改:2021 年 06 月 01 日 02 : 09 PM
如果觉得我的文章对你有用,请随意赞赏