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

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。具体取多少天的,也要通过测试集的表现来确定。当然也可以按某些函数形式来给每天赋予不同的权重。

公众号:AI蜗牛车

保持谦逊、保持自律、保持进步

【时间序列】时间序列基本概念总结相关推荐

  1. 第十六章 时间序列数据分析基本概念

    16.1 相关概念 时间序列数据存在的意义即是通过过去预测未, 以下数据都属于时间序列数据: (1)遥感数据: (2)气象数据: (3)金融数据(股票,期货,外汇) (4)经济数据(GDP) 时间序列 ...

  2. 时间序列预测-入门概念

    时间序列定义 时间序列(英语:time series)是一组按照时间发生先后顺序进行排列的数据点序列.通常一组时间序列的时间间隔为一恒定值(如1秒,5分钟,12小时,7天,1年),因此时间序列可以作为 ...

  3. 【机器学习基础】时间序列基本概念

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

  4. mongodb数据合并设计_「时间序列数据」和MongoDB(二)-模式设计最佳实践

    在上一篇博客文章时间序列数据与MongoDB:第一部分-简介中,我们介绍了时间序列数据的概念,然后介绍了一些可以用于帮助收集时间序列应用程序需求的发现问题.对这些问题的回答有助于指导支持大容量生产应用 ...

  5. 数学建模学习笔记(十)——时间序列模型

    文章目录 一.时间序列综述 二.时间序列数据以及基本概念 三.时间序列分解 四.指数平滑模型 五.一元时间序列分析的模型 六.AR(p)模型 七.MA(q)模型 八.ARMA(p, q)模型 九.模型 ...

  6. python平稳性检验_Python中非平稳时间序列的处理

    以下应用有什么共同点:预测未来三个月的一个家庭的电力消耗:估计在一定时期内道路的交通量:以及预测一个股票在纽约证券交易所上交易的价格. 以上都涉及时间序列数据的概念!如果没有"时间" ...

  7. 利用python进行数据分析——第11章时间序列

    文章目录 时间序列 一.日期和时间数据类型及工具 1.1字符串与datetime互相转换 二.时间序列基础 2.1索引.选取.子集构造 2.2 含有重复索引的时间序列 三.日期的范围.频率以及移动 3 ...

  8. 【Python】时间序列数据分析与预测之Python工具汇总

    本文中总结了十多种时间序列数据分析和预测工具和python库,在我们处理时间序列项目时,可以翻开本文,根据需要选择合适的工具,将会事半功倍! 在处理时间序列项目时,数据科学家或 ML 工程师通常会使用 ...

  9. python数据分析及可视化(九)pandas数据规整(分组聚合、数据透视表、时间序列、数据分析流程)

    作业 拼接多个csv文件 去除重复数据,重新索引 自动挡和手动挡数目 计算每个城市二手车数量 统计每个汽车品牌平均售价价格(不是原价) 分组与聚合 如下表所示,5行3列的表格,5种水果分别对应的名称, ...

最新文章

  1. Eclipse配置 Maven 异常处理
  2. logback基本入门
  3. [Beego] 内置的模板函数(不同格式的字符串和html的互转)
  4. \pset 、\x命令
  5. python websocket server模块_Python 3.5.2实现websocket服务端(四): WebSocketServer类实现...
  6. Qt与Visual Assitst X的集成问题
  7. PHP数字格式化,每三位逗号分隔数字,可以保留小数
  8. java中查询redis中hash结构的值_阿里面试官:HashMap 熟悉吧?来聊聊 Redis 吧
  9. JVM初识之自定义类加载器
  10. tftp路由器刷机修复工具_小米路由器mini刷写不死breed
  11. 中国各省份省会的坐标
  12. HTB-Antique
  13. Django 框架图
  14. Had I not seen the Sun(如果我不曾见过太阳)
  15. SDNU-1014 页码问题
  16. 5.node.js中的事件循环
  17. 重庆航天职业技术学院计算机系在哪个校区,重庆航天职业技术学院江北校区怎么样...
  18. 12岁的微博回港上市,还有新故事吗?
  19. [FPGA] 1、Artix-7 35T Arty FPGA 评估套件学习 + SiFive risc-v 指令集芯片验证
  20. 验证IBIS模型正确并转换为DML模型图文演示

热门文章

  1. 单机版swarm安装
  2. php.450 pr,pr界面介绍有哪些
  3. Clickhouse求时间差
  4. 【qq机器人】Nonebot2搭建详细教程
  5. Linux知识入门(一)
  6. (四)基于区块链的自动抽奖系统从0到1实现
  7. 利用七参数进行CGCS2000坐标系到西安80坐标系的转换
  8. [iPhone-APP]手机归属地查询软件
  9. HTML网页设计文件的组成
  10. 解决清华大学校园网自动连接问题