读书笔记:时序数据预测 Time Series Forecast

序言

这篇文章主要介绍如何预测时许数据,主要参考了一下文章翻译。

A comprehensive beginner’s guide to create a Time Series Forecast (with Codes in Python)

时序数据一般比较多人用R进行统计分析。

首先,什么时序数据,最简单的一个例子就是股票数据。

数据按时间定期采集,然后具有季节和周期性。

问题描述

样本数据采用航空公司乘客数,可以这里下载

我们读取csv的数据

左边是日期,右边是乘客数:

passgners

定义一个ts变量方便操作。

可以定义一个范围取数据。

我们预测这些序列数据

分析数据的稳定性(Stationarity)

稳定性具有很严格的条件:

* 不变的平均值
* 不变的方差
* 方差的不根据时间的改变而已改变

可以可视化看看数据的:

7-ts-1024x438

定义一个函数测试序列是否稳定:

测试

1-dfuller-ts-1024x630

这里解释一下,p value越低(理论上需要低于0.05)证明序列越稳定。这里这个结果表明这些序列很不稳定,所以下一章考虑如何处理数据,使得序列相对稳定。

使序列平稳 Stationary

有两个主要的因素导致序列不稳定:

* 趋势 Trend
* 季节性 Seasonality

这章主要考虑如何去掉两个因素,然后可以找到一个稳定的序列。

为了减少序列的不稳定,我们转换数据到另外一个空间log,这样太大的数值,影响相对较少。

9-ts-log-1024x431

这里我们可以明显看到一个上升的趋势,但是混杂在噪音当中,所以需要去除杂音。这里简单平滑一下数据。平滑的窗口取值12,因为一年有12个月。

平滑后的数据:

10-smooth-1-1024x434

求diff后的数据,看来已经很稳定了

2-dfuller-smooth-1-1024x636

趋势trend已经被去掉了,然后看到p value很低,低于0.05。

刚刚说到平滑窗口为12,但是实际上很难知道12这个周期,特别是在股票这些数据上面。还有下面这种方法平滑数据, exponentially weighted moving average。

3-dfuller-smooth-2-1024x628

可以看出上面的稳定性更加好。

如何去掉趋势和季节性

上面的两种方法不是经常能用,下面介绍一些方法去除趋势和季节性。

14-ts-diff-1024x427

4-dfuller-diff-1024x625

趋势几乎被去掉。

分解 Decomposing

16-decompose-1024x408

趋势和季节性,还有残差值都被分解出来,然后我们计算残差值的稳定性。

5-dfuller-decompose-1024x624

残差值非常稳定。。

预测时间序列值

文章采用了一个叫ARIMA(Auto-Regressive Integrated Moving Averages)的模型。模型有三个主要参数:

* Number of AR (Auto-Regressive) terms (p): 现在点使用多少个过往数据计算。
* Number of MA (Moving Average) terms (q):使用多少个过往的残余错误值。
* Number of Differences (d):非季节性的个数(小编:其实是否求导数)。

20-model-both-1024x446

这个diff的序列还是稳定的。

最后回归到原来的空间

24-final-plot-1024x440

最后拟合出来的数据有点偏低。

《读书笔记:时序数据预测 Time Series Forecast》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注