时间序列数据分析—概述

概述

随着工业界大规模时间序列数据(例如物联网,医疗数字化,智慧城市等领域)的出现和算力的提升,时间序列数据分析的重要性日益凸显。因此伴随着大量时间序列数据被检测和收集,对于基于统计学和机器学习的具有竞争力的分析方法的需求也越来越强。因此在之后的章节中,我们将对时间序列数据分析进行一个全面的探讨。

时间序列分析的定义

时间序列分析是指从按时间排序的数据点中抽取有价值的总结和统计信息的行为

时间序列分析既包含了对过去数据的诊断,也包括对未来数据的预测。

时间序列分析既包含了对过去数据的诊断,也包括对未来数据的预测。

在最开始,时间序列分析并不是作为一个独立的学科而存在的,而是作为某些学科领域分析方法的一部分,因此有许多领域都对时间序列技术的发展起到了重要贡献。比较典型的例子包括:

  • 医学
  • 天气
  • 经济学
  • 天文学

一直到20世纪20年代,时间序列分析才正式脱离于其他学科独立发展,当时的一个标志是自回归模型的应用,这也奠定了基于统计学的时间序列分析的开端。

而基于机器学习的时间序列分析则最早开始于1969年,集成方法被应用于时间序列数据上,到了80年代更多应用场景涌现出来,如异常检测,动态时间规整,循环神经网络等。

准备和处理时间序列数据

准备数据集

要进行数据分析之前,首先要准备好时间序列数据集。数据集可以通过两种方式获取:

  • 在开源数据仓库中寻找现成数据
  • 从非显式数据中构造时间特征,创造时间序列数据

列举几个常用的开源数据仓库,

UCI Machine Learning Repository:包含约80个时间序列数据集,从意大利城市小时级空气质量,到糖尿病患者的活动饮食记录等各种各样的数据集。

UEA and UCR Time Series Classification Repository:一个更高质量的时间序列数据集网站。

寻找时间轴

时间序列在我们身边是广泛存在的,但有时候在数据存储时并没有一列显式存在的时间列,这时候就需要我们去人为寻找和构造。以下是一些不同的时间列存在形式的例子:

  • 以事件记录的时间构造时间列
  • 以另一个和时间相关的元素构造时间列,例如在一个数据集中行驶距离和时间是正相关的,此时就可以以距离来构造时间列
  • 以物理轨迹的顺序作为时间列,例如在医学,天气等领域有些数据是以图片的形式存储的,此时可以从图像中提取时间列

时间序列可能遇到的问题

在时间序列数据分析中,时间戳是一个十分重要的特征,它能帮我们有效理解数据。

第一个我们会遇到的问题是时间值是在哪个过程产生的,以及何时产生的。通常事件发生的时间和事件被记录的时间往往是不一致的。例如一个研究员先在笔记本上以手写的方式记录,然后在结束研究后再统一以csv的格式录入数据库。那么此时时间戳究竟表示的是手动记录的时间还是录入数据库的时间。

因此在我们看到一个新的时间特征时,总是应当首先确认这个事件时间是如何产生的。作为一个数据分析师,我们应当时刻有这样一种意识,理解数据,理解时间戳的产生过程是我们的责任,只有充分理解了这些,我们才能更好地和其他同事沟通,用数据为业务赋能。

第二个我们会遇到的问题如果我们在处理历史遗留数据,并没有清洗记录的文档说明,也无法找到处理数据流的人来确认时间戳产生的方式。这时需要我们做一些经验上的调查和推断。

有一些通用的方法能帮助我们理解时间特征:1)通过比较不同类别特征(如不同用户)的数据来理解某些时间模式(pattern)是否是共同的。2)使用聚合数据分析来理解时间特征,如该时间戳是本地时间时区还是标准时间时区,该时间反应的是用户行为还是一些外部限制(网络通信)。

第三个值得探讨的问题是什么是一个有意义的时间尺度。当我们拿到一组时间序列数据时,要思考该选择怎么样的时间分辨率,这对于后续特征构造和模型有效性都有很大的影响。通常这取决于你所研究对象的领域知识,以及数据如何被收集的细节。举个例子,假设你正在查看每日销售数据,但如果你了解销售经理的行为就会知道在许多时候他们会等到每周末才报告数字,他们会粗略估计每天的数字,而不是每天记录它们,因为由于退货的存在,每天的数值常常存在系统偏差。所以你可能会考虑将销售数据的分辨率从每天更改为每周以减少这个系统误差。