【Time Series】时间序列基本概念

2020 年 8 月 3 日 AINLP

最近一直在接触时间序列,所以打算写一些有关时间序列的文章,预测部分会从规则开始、到传统模型、到机器学习、再到深度学习,此外也会介绍一些时间序列的基本概念,包括自相关、平稳性、滞后性、季节性等。

1.基本概念

1.1 时间序列预测

预测是商业中的常见统计任务,它可以为生产、运输和人员安排等决策提供信息,并为长期战略规划提供指导。预测是指在考虑到所有可用信息的前提下,包括历史数据和可以影响预测的任何未来事件的知识,尽可能准确地预言。

而时间序列预测是指按照时间顺序观察事物的变换。通常会利用同一变量的历史值预测未来值,或者也可以加入一些预测因子来预测未来值。前者称为单变量时间序列预测,后者称为多变量时间序列预测。

通常我们指的时间序列预测都是考虑定期观察的时间序列(如每分、每小时、每天、每周等)。比较经典的案例有:降水量预测、销售预测、流量预测等。

1.2 时间序列成分

时间序列包含很多特征中包含诸多成分,有:

  • 趋势:指时间序列在较长一段时间内呈现出来的持续向上或者持续向下的变动;
  • 季节性:指时间序列在一年内重复出现的周期性波动,如气候条件、生产条件、节假日等;
  • 残差:也称为不规则波动,指除去趋势、季节性、周期性外的随机波动。不规则波动通常总是夹杂在时间序列中,致使时间序列产生一种波浪形或震荡式的变动。只含有随机波动的序列也称为平稳序列。

下图展示了一个时间序列被分解的过程,第一张图是所观察的时间序列,第二张图是趋势、第三张图是季节性,第四张图是残差:

(以上序列并不存在周期性,这里只是举个例子)

1.3 平稳性

1.3.1 类别

平稳性分为弱平稳和严平稳,我们分别给出定义:

  • 「弱平稳」:若序列 存在有限二阶矩。且满足

    则称序列 为弱平稳序列。

    • 与 t 无关;
    • 与 t 无关;
    • 与 t 无关;
  • 「严平稳」:对于所有可能的 n,所有可能的 ,和所有可能的 k,当 的联合分布与 的联合分布相同时,则序列是强平稳。

值得注意的是,「两种平稳过程并没有包含关系」,即弱平稳不一定是严平稳,严平稳也不一定是弱平稳。(感兴趣的可以自己查资料证明,这里不过多介绍)

由于严平稳的要求过于苛刻,所以我们所说的大部分时间序列预测都是弱平稳的时间序列。

1.3.2 为什么需要平稳性

那么我们为什么要关注序列的平稳性呢?

这是因为有些预测统计方法是以平稳序列为假设前提而进行设计的,比如自回归模型。其假设是变量的历史与现状呈现出基本特性,并在未来阶段的一个时间里会维持不变。

更具体的说,自回归预测模型的本质是“利用序列的滞后阶数(lags)作为自变量”的线性回归模型,比如 lags=2 表示使用变量的 t-1 和 t-2 时刻的值作为自变量来预测 t 时刻的值。那么通过在历史序列上训练模型后,得到的这个线性回归模型的各自变量的系数就代表了各滞后时刻的值与下一时刻值的相关性,如果时间序列接近平稳,这些相关性在未来一段时间内都不会有太大的变化,那么预测未来就成为了可能。

1.3.3 非平稳序列如何预测

对于非平稳时间序列的预测,我们需要将其变换为平稳时间序列,常用的方法有:

  • 差分(一阶/n 阶);
  • 取 log;
  • 开根号;
  • 时间序列分解。

一般来说,做个一阶差分就可以得到接近平稳的时间序列了,如果方差随时间变化较大,那么可以先取 log 再做一阶差分。如下图所示:上面两张图为非平稳的时间序列,经过一阶差分后便得到了相对平稳的时间序列。当然,经过二阶差分后,其效果会更好。

1.3.4 如何测试平稳性

判断一个序列是否是平稳的,除了通过肉眼判断和上面提到的定义外,还有两种比较科学的基于单位根检验的方法:

  • Augmented Dickey Fuller test (ADF Test):其零假设为序列有单位根,是非平稳的,P-Value如果小于显著级别(0.05),则可以拒绝零假设;
  • Kwiatkowski-Phillips-Schmidt-Shin – KPSS test (trend stationary):与 ADF 正好相反,零假设为序列是平稳的。另外,在 Python 中,可以通过指定 regression='ct' 参数来让 kps 把“确定性趋势(deterministic trend)”的序列认为是平稳的。

1.4 滞后算子

先给出定义:如果算子运算是将一个时间序列的前一期值转化为当期值,则称此算子为滞后算子,记做 L。即对任意时间序列 ,滞后算子满足:

类似也可以定义高阶滞后算子,例如二阶滞后算子为

高阶滞后算子有:

1.5 自相关函数

首先,我们先来介绍下相关系数,公式:

根据样本的估计得到公式:

可以看到,相关系数其实就是计算了向量空间中两个向量的夹角,而协方差是去均值后两个向量的内积。

如果两个向量平行,相关系数等于 1 或者 -1,垂直则为 0。

相关系数度量了两个向量的线性相关性,而在平稳时间序列 中,我们有时候很想知道, 与它的过去值 的线性相关性。这时候我们便把相关系数的概念推广到自相关系数。

的相关系数称为 的间隔为 l 的自相关系数,通常记为 。具体的:

这里用到了弱平稳序列的性质:

对一个平稳的时间序列的样本 ,1≤t≤T,则间隔为 l 的样本自相关系数的估计为:

则函数 称为 的样本自相关函数(ACF)。

假设现在有这样一个时间序列:

其自相关图为:

  • 自相关系数值随着滞后阶数增加而缓慢降低,是因为原时间序列中具有趋势变化;
  • 图中的“圆齿状”形状是来源于原时间序列中的季节性变化;
  • 蓝色虚线之内的区域自相关性可近似看做0。

1.6 白噪声

如果弱平稳序列额 满足 为白噪声序列。

如果随机变量序列 独立且期望和方差不随时间而变,则称 为独立白噪声。

如果独立白噪声还是同分布的,称为独立同分布白噪声。

简单来说“白噪声”是一个对所有时间其自相关系数为零的随机过程。下图展示了白噪声的例子:

其自相关系数为:

对于白噪声而言,我们期望它的自相关值接近 0。但是由于随机扰动的存在,自相关值并不会精确地等于 0。对于一个长度为 T 的白噪声序列而言,我们期望在 0.95 的置信度下,它的自相关值处于 之间。我们可以很容易的画出 ACF 的边界值(图中蓝色虚线)。如果一个序列中有较多的自相关值处于边界之外,那么该序列很可能不是白噪声序列。

在上例中,序列长度 T=50,边界为 。所有的自相关值均落在边界之内,证明序列是白噪声。

2.规则

在介绍模型之前,我们可以先简单了解一些时间序列的规则,一来可以快速上手作为 baseline,二来规则本身也可以作为模型的特征使用。

2.1 简单预测方法

  • 均值法:均值法很简单,即字面意思,利用历史的均值作为未来的预测值;
  • 季节性均值法:利用历史同期均值作为未来的预测值,一般效果会比均值法好很多;
  • 朴素法:即将最后一次观测值作为未来的预测值;
  • 季节性朴素法:利用同期最后一次观测值作为未来同期的预测值;
  • 漂移法:在起始观测值和最后一次观测值之间画一条连接线,延伸到预测时间点,作为预测值。

2.2 变换和调整

  • 「日历调整」:季节性数据中的某些变化可能是来自简单的日历效应。这种情况下,在拟合预测模型之前消除这些变化因素往往会使预测更简单。如每个月的牛奶产量,产量会随着季节性进行变化,但也会随着天数发生变化:

可以看到,日均产量图的季节性模式比月均产量图更简洁明了。日均产量图有效消除了不同月份天数不同造成的影响。简单的模式往往更易于建立模型并得出更精确的预测结果。对于交易天数随着月份改变的销售数据,我们可以做相似的调整。在这种情况下,可以用每个交易日的销量而非每月的总销量来建立模型。

  • 「人口调整」:任何受人口数量影响的数据都可以调整为人均数据,换句话说,考虑每人(或每千人,或每百万人)而非所有人。比如说研究医院的床位数随时间的变化,通过采用人均数据来消除人口数量变化的情况;
  • 「通膨调整」:受货币价值影响的数据在建立模型之前经过最好经过通胀调整;
  • 「数学变换」:数据波动范围会随着数据数值范围的变换而变大或者变小,此时可以进行些数学变换。一个比较经典方法是取对数。对数变换之所以有用,是因为其数值的变化与原始值的变化成正比,且幅度更小;此外也可以用幂变换。Box-Cox 变换既包含对数变换,又包含幂变换的依赖于参数 的变换族,定义如下:

Box-cox 变换中的对数变换通常以自然对数 e 为底,因此如果 λ=0,则进行自然对数变换,否则会进行幂变换,然后简单缩放。下图为某一事件序列:

时,整个时间序列范围内的周期性变化大小差不多相同,因此会让预测更加简单:

选择好变换后,我们还需要利用逆变换得到原始测度上的预测值,逆 Box-Cox 变换如下表示:

  • 「偏差调整」:使用 Box-Cox 变换来调整数据分布,其问题在于逆变换后得到的预测值不是预测分布的平均值,而是预测分布的中位数。很多情况下这可以接受,但有时的的确确需要预测均值。此时,就需要调整一下逆变换,以得到逆变换的均值:

是 h 步预测方差,预测方差越大,均值和中位数之间的差异越大。

简单逆变换和逆变换的均值之间的差异,我们称之为偏差(Bias)。当我们需要用均值而非中位数时,称预测点是经过“偏差调整”(Bias-adjusted)的。下图展示了两者的区别:

其中,蓝线表示预测值中位数,红色线表示预测值均值,

2.3 周期因子法

这里主要想着重介绍一下周期因子法。

周期因子法很简单,我们先来看一段数据:

可以看到起明显具有周期性。而预测的核心任务便是尽可能准确的提取这种周期性。所以我们:

  • 首先除以周均值得到一个比值;
  • 然后按列去中位数,得到一组鲁棒的周期因子。

做预测时只需要将周期因子乘以一个 base,便可作为下一周的预测。比如我们取最后一周的平均客流量 100 作为 base,那么我们直接乘上周期因子,就得到下一周的预测:

这里只拿了三周来举例。实际应用当然要取更长的时段啦。具体取几周以测试集的效果来确定。

按列提取中位数是一种简单而有效的提取周期因子的方法。中位数十分鲁棒,不受极端值的影响。但中位数损失了很多信息。实践中,可以在此基础上进一步优化。比如可以提取一个均值和一个中位数,然后将均值和中位数融合。融合的比例按照测试集的表现来确定。也可以根据与预测周的时间距离来赋予不同的权重。

除了对周期因子进行优化外,我们还可以针对 Base 进行优化。

直接用最后一周的平均客流量作为base并不一定是最好的方法。也许最后三天或最后五天的均值能更好的反映最新的情况。但是,我们不能直接对最后三天客流量取均值(最后三天是周末,这样取的base就偏大了)。需要去掉周期性因素后,再取平均。具体做法,就是用客流量除以周期因子。

这样我们就可以取最后三天的平均,(108+91.4+120)/3=106.5,作为 base。具体取多少天的,也要通过测试集的表现来确定。当然也可以按某些函数形式来给每天赋予不同的权重。

3.Reference

  1. 用python做时间序列预测四:平稳/非平稳时间序列
  2. 如何深入理解时间序列分析中的平稳性?
  3. 金融时间序列分析入门(一)
  4. 如何理解自相关和偏自相关图
  5. 时间序列规则法快速入门

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
2

相关内容

时间序列(或称动态数列)是指将同一统计指标的数值按其发生的时间先后顺序排列而成的数列。时间序列分析的主要目的是根据已有的历史数据对未来进行预测。经济数据中大多数以时间序列的形式给出。根据观察时间的不同,时间序列中的时间可以是年份、季度、月份或其他任何时间形式。
【TAMU】最新《时间序列分析》课程笔记,527页pdf
专知会员服务
179+阅读 · 2020年9月12日
【干货书】用Python构建概率图模型,173页pdf
专知会员服务
111+阅读 · 2020年8月23日
【经典书】概率统计导论第五版,730页pdf
专知会员服务
237+阅读 · 2020年7月28日
【硬核书】不完全信息决策理论,467页pdf
专知会员服务
351+阅读 · 2020年6月24日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
你真的懂时间序列预测吗?
腾讯大讲堂
104+阅读 · 2019年1月7日
R语言时间序列分析
R语言中文社区
12+阅读 · 2018年11月19日
干货 :数据分析师的完整流程与知识结构体系
数据分析
8+阅读 · 2018年7月31日
基于 Keras 用深度学习预测时间序列
R语言中文社区
23+阅读 · 2018年7月27日
R语言之数据分析高级方法「时间序列」
R语言中文社区
17+阅读 · 2018年4月24日
【入门】数据分析六部曲
36大数据
18+阅读 · 2017年12月6日
如何用TensorFlow预测时间序列:TFTS库详细教程
人工智能头条
9+阅读 · 2017年8月30日
PCA的基本数学原理
算法与数学之美
11+阅读 · 2017年8月8日
回归预测&时间序列预测
GBASE数据工程部数据团队
43+阅读 · 2017年5月17日
Arxiv
7+阅读 · 2020年3月1日
Arxiv
6+阅读 · 2020年2月15日
Arxiv
7+阅读 · 2019年10月6日
Deep Learning for Energy Markets
Arxiv
10+阅读 · 2019年4月10日
Image Captioning based on Deep Reinforcement Learning
Arxiv
11+阅读 · 2018年5月13日
Arxiv
7+阅读 · 2018年4月21日
VIP会员
相关VIP内容
【TAMU】最新《时间序列分析》课程笔记,527页pdf
专知会员服务
179+阅读 · 2020年9月12日
【干货书】用Python构建概率图模型,173页pdf
专知会员服务
111+阅读 · 2020年8月23日
【经典书】概率统计导论第五版,730页pdf
专知会员服务
237+阅读 · 2020年7月28日
【硬核书】不完全信息决策理论,467页pdf
专知会员服务
351+阅读 · 2020年6月24日
机器学习速查手册,135页pdf
专知会员服务
338+阅读 · 2020年3月15日
相关资讯
你真的懂时间序列预测吗?
腾讯大讲堂
104+阅读 · 2019年1月7日
R语言时间序列分析
R语言中文社区
12+阅读 · 2018年11月19日
干货 :数据分析师的完整流程与知识结构体系
数据分析
8+阅读 · 2018年7月31日
基于 Keras 用深度学习预测时间序列
R语言中文社区
23+阅读 · 2018年7月27日
R语言之数据分析高级方法「时间序列」
R语言中文社区
17+阅读 · 2018年4月24日
【入门】数据分析六部曲
36大数据
18+阅读 · 2017年12月6日
如何用TensorFlow预测时间序列:TFTS库详细教程
人工智能头条
9+阅读 · 2017年8月30日
PCA的基本数学原理
算法与数学之美
11+阅读 · 2017年8月8日
回归预测&时间序列预测
GBASE数据工程部数据团队
43+阅读 · 2017年5月17日
相关论文
Arxiv
7+阅读 · 2020年3月1日
Arxiv
6+阅读 · 2020年2月15日
Arxiv
7+阅读 · 2019年10月6日
Deep Learning for Energy Markets
Arxiv
10+阅读 · 2019年4月10日
Image Captioning based on Deep Reinforcement Learning
Arxiv
11+阅读 · 2018年5月13日
Arxiv
7+阅读 · 2018年4月21日
Top
微信扫码咨询专知VIP会员