时间序列预测(1)-什么是时间序列预测

时间序列基础

1 概述

什么是时间序列?

时间序列是按时间的先后顺序排列的⼀串数值。
以上描述,是时间序列⼀个⽐较直观的感受。从严格的数学意义上来讲,我们把时间序列 看成了⼀串随机变量。

(X1, X2, ⋯ , Xt)每⼀个 Xi
都代表了⼀个随机变量(注意这⾥和机器学习问题的区别P(Y|X))。⼀个随机变量⼀般需要采样到多次才能⽐较好的估计这个随机变量的⼀些性质。但对于时间序列问题,我们只能采样到⼀次(因为历史不可回溯,也就是观察到它的值⼀次),采样到的就 是时间序列的观察值。这⼀条观察值形成的序列,也称为轨道。假设我们从上帝视⻆来 看,如果我们可以回到过去,那么这条时间序列理论上有⽆数条观察值序列(轨道),但 现实中我们只能观察到⼀条轨道。所以时间序列的难点就是如何从⼀条轨道,尽量的得到更多的“信息”。

我们研究时间序列的⽬的,主要是为了去对时间序列进⾏预测。时间序列的预测分为两种:
● 点预测
● 区间预测
点预测,就是预测时间序列未来的值。
区间预测,就是预测时间序列未来值的范围。

前⾯说过,在数学上,我们可以把时间序列观测值看成是随机变量的采样。那么时间序列的建模就是想办法通过观测值还原这些随机变量。所以时间序列未来的值,也应该是随机变量。那么点预测⼀般就会是这个随机变量的均值。区间预测就是这个随机变量的⽐较⼤的概率下的取值范围。

什么样的时间序列可预测

● 我们知道哪些因素会影响时间序列
● 有大量的数据是可用的
● 预测不会反向影响我们试图预测的事物

什么样的时间序列可定量建模

如果我们想定量的来预测时间序列,本质上会有如下的假设:
● 关于过去的数据是可以用的
● 有理由假设过去的一些模式会在未来延续下去

1.2建模方式

● 回归模型
当下时刻的预测变量由当下时刻的其他变量所决定。
这⾥的误差包含两部分,⼀部分是随机波动,另⼀部分是没有被其他变量所解释的信息。
● 自回归模型
自己跟自己回归,对未来的预测是基于变量的过去值,⽽不是基于可能影响系统的外部变量。“误差”项允许 随机波动和不包含在模型中的相关变量的影响。
● 动态回归模型 (该模型在实际情况中使用比较多)
回归模型与自回归模型的结合

1.3 名词释义

  • 趋势性(Trend)
    当⼀个时间序列数据⻓期增⻓或者⻓期下降时,表示该序列有 趋势 。在某些场合,趋势代表着“转换⽅向”。例如从增⻓的趋势转换为下降趋势。

  • 季节性(Season)
    当时间序列中的数据受到季节性因素(例如⼀年的时间或者⼀周的时间)的影响时,表示 该序列具有 季节性 。季节性总是⼀个已知并且固定的频率。注意,季节性可能是复合的。

  • 周期性
    当时间序列数据存在不固定频率的上升和下降时,表示该序列有 周期性

一般数据包含趋势性、季节性、和周期性,分析时间数据的特征,分别对趋势性、季节性、周期性预测,然后求总的预测值

  • 如何辨别趋势性和周期性
    许多初学者都不能很好的区分季节性和周期,然⽽这两个概念是完全不同的。当数据的波动是⽆规律时,表示序列存在周期性;如果波动的频率不变并且与固定⻓度的时间段有关,表示序列存在季节性。⼀般⽽⾔,周期的⻓度较⻓,并且周期的波动幅度也更⼤。
    许多时间序列同时包含趋势、季节性以及周期性。当我们选择预测⽅法时,⾸先应该分析 时间序列数据所具备的特征,然后再选择合适的预测⽅法抓取特征。
    后⾯,我们⽤ T(Trend) 表示趋势,S(Season) 表示季节和周期,R(Residual) 表示误差。

1.4常用关键名词数学释义

滞后

当下时刻和以前的某个值之间的关系
y t y_t yt y t − 1 y_{t-1} yt1

# df 为 pandas 中的 DataFrame 类型或者 Series 类型
df.shift(1)

自相关

y t y_t yt与滞后k阶的自相关系数(ACF)
● 自相关包含 直接和间接两种关系,求出滞后k自相关系数p(k)时,实际上得到并不是x(t)与x(t-k)之间单纯的相关关系
● x(t)同时还会受到中间k-1个随机变量x(t-1)、 x(t-2)、 ……、 x(t-k+1)的影响而这k-1个随机变量又都和x(t-k)具有相关关系所以自相关系数p(k)里实际掺杂了其他变量对x(t)与x(t-k)的影响

from statsmodels.graphics.tsaplots import plot_acf 
plot_acf(data)

靠近1: 线性正相关,靠近-1:线性负相关,靠近0:不相关

如何确认季节性周期频率?
通过上图,可以发现季节性周期为7,每相隔7,相关性又达到高点
深色区域为置信度区间,有5%处于深色颜色内,95%处于外面,外面的代表相关性高,简单理解就是这个深⾊区域外的就可以认为是相关的

偏自相关

剔除了中间k-1个随机变量x(t-1)、 x(t-2)、 ……、 x(t-k+1)的干扰之后x(t-k)对x(t)影响的相关程度

● ACF还包含了其他变量的影响,而偏自相关系数PACF是严格这两个变量之间的相关性

平稳性

并不是所有时间序列都具有平稳性。但有平稳性的时间序列,能帮助我们更好的通过观察 值来估计随机变量的性质。
在统计学习中,有⼀个核⼼的假设,就是假设样本是独⽴同步分布,这样通过⼤数定理, 就可以通过有限的样本(观察值)来估计⼀些性质(e.g ⽤经验⻛险去逼近期望⻛险)。为什么要假设独⽴同步分布,是因为我们只能采集到有限的样本。
在时间序列中,也是⼀样的,理论上⼀条时间序列,能有⽆穷条轨道。但是我们只能采样 到⼀条轨道。所以如何才能通过⼀条轨道的信息(有限的样本),来进⾏有效的估计?
⼤数定理是空间上的⽤有限逼近⽆限的保障。
在时间序列上也有⼀个类似的定理,是让时间序列能从时间上⽤有限来逼近⽆限。
这个定理就是时间序列遍历性定理。所以如果⼀条时间序列满⾜遍历性,我们就可以通过 对⼀条轨道在时间上有限样本来估计⼀些性质。那如何保证时间序列具有遍历性呢? 那就是这条时间序列是平稳的,且任意两点的相关性随着间隔的⻓度会逐渐降低。
简单点说,平稳的时间序列的性质不随观测时间的变化⽽变化,⽐如⽅差和均值。所以平稳的时间序列,⼀定是没有趋势和季节性的。

判断下面哪些是平稳的?
● 1. 看原始时序图,是否有固定的方差
● 2.看acf和pacf的图,相关性会快速下降到0附近

● 2. 数学方法:单位根检验:
p 越⼩代表代表我们拒绝原假设,那么该时间序列就越该平稳(⼀般是threshold 取0.05 或者0.01)(越小越平稳)
如果不平稳,通过做差分使得其变平稳
如:

from statsmodels.stats.diagnostic import unitroot_adf
print('P_value:{}'.format(unitroot_adf(total_sum[-200:])[1]))

P_value:0.1753988166862852 (大于0.05 0.01 所以不平稳)
通过差分使其变得平稳

  • 做差分 再做单位根检验
print('P_value:{}'.format(unitroot_adf(np.diff(total_sum[-200:]))[1]))

P_value:1.7133196516519583e-05 – 平稳
如果一阶还不平稳,则继续做差分,直至平稳。

白噪声

“⽩噪声”是⼀个对所有时间其⾃相关系数为零的随机过程。即⽩噪声是完全随机的,不可 预测的。所有可预测的信息都已经被我们蕴含到了模型之中。

2. 时间序列预测的一般范式

时间序列数据通常有很多种潜在模式,因此⼀种有效的处理时间序列的⽅式是将其分解为 多个成分,其中每个成分都对应某⼀种基础模式。
当我们想要把时间序列分解为多个成分时,我们通常将趋势和周期组合为“趋势-周期”项
(有时也简单称其为趋势项)。因此,我们认为时间序列包括三个成分:趋势-周期项, 季节项和残差项(残差项包含时间序列中其它所有信息)。
时间序列⼀般可以写成两种分解模式:

yt = St + Tt + Rt
yt = St × Tt × Rt
乘法模式和加法模式可以通过取 log 进⾏转换。

(也有说法 y = level + trend + seasonality + noise)

3 常见建模方式

时间建模方案,根据使用方法可以大体分为5类:

  • 规则建模
  • 自回归建模
  • 趋势建模
  • 机器学习建模
  • 深度学习建模

你可能感兴趣的:(时间序列分析,深度学习,机器学习,机器学习)