时间序列数据与分析
时间序列分析关注随时间收集的数据。例如,时间序列指标可以是商店从一天到下一天销售的库存量。通常会出现可以预测和防止问题的模式。销售额的突然下降对公司来说代价高昂,因此了解导致这种变化的先兆事件会很有帮助。时间序列数据无处不在。随着我们的世界变得越来越智能化,传感器和系统发出一股持续不断的时间序列数据流 (时间序列数据库)。
时间序列分析示例
- 大脑电活动
- 降雨量测量
- 股价
- 太阳黑子数量
- 年度零售销售额
- 每月订阅用户
- 每分钟心跳次数
关键时间序列概念
- 时间序列数据 是随时间收集的数据点的集合。
- 时间序列分析 是识别趋势,如季节性,以帮助预测未来事件。
时间序列示例
气象记录、经济指标和患者健康演变指标都是时间序列数据。时间序列数据还可以是服务器指标、应用程序性能监控、网络数据、传感器数据、事件、点击以及其他许多类型的分析数据。了解时间序列的最佳方式是从一些 示例数据 开始探索,这些数据位于 InfluxDB Cloud。
注意以下图表的底部描绘的是时间轴。
在下图中,请注意时间作为衡量股价变化的轴。在投资中,时间序列跟踪数据点的移动,如证券价格在特定时间段内的变化,这些数据点以固定的时间间隔记录。这可以是短期(如证券在交易日每小时的价格)或长期(如证券在每月最后一个交易日收盘价在五年期间的变化)。
以下集群监控示例,展示了磁盘操作写入和使用数据,对于网络操作中心团队来说将是熟悉的。记住,监控数据是时间序列数据。
另一个熟悉的时间序列数据示例是患者健康监测,如在心电图(ECG)中,它监测心脏活动以显示心脏是否正常工作。
除了在常规时间间隔内捕获外,时间序列数据可以在任何时候捕获——无论时间间隔如何,例如在日志中。日志是事件的登记册,包括软件应用程序和操作系统之间的进程、消息和通信。每个可执行文件都会生成一个日志文件,其中记录了所有活动。日志数据是进行问题分级和解决的重要上下文来源。例如,在网络安全中,事件日志有助于提供有关网络流量、使用和其他条件的信息。
跟踪(应用程序在执行期间执行的子程序调用列表)也是时间序列数据。在下面的跟踪图表中的彩色带中,你可以看到时间序列数据的示例。跟踪的目标是跟踪程序的流程和数据进展。跟踪涵盖了应用程序的广泛连续视图,以找到程序或应用程序中的错误。
上面提到的示例包括两种不同类型的时间序列数据,具体如下所述。
时间序列数据类型
时间序列数据可以分为两种类型
- 在常规时间间隔内收集的度量
- 在不规则时间间隔内收集的度量(事件)
在“时间序列数据示例”部分上述
- 示例 3(集群监控)和 4(健康监控)描述了度量。
- 示例 5(日志)和 6(跟踪)描述了事件。
由于它们发生在不规则的时间间隔内,事件是不可预测的,并且无法建模或预测,因为预测假设过去发生的事情是未来发生的良好指标。
时间序列数据示例可以是任何在特定时间间隔(无论规则或不规则)收集的信息序列。常见的数据示例可以是心率到商店商品的单位价格等。
线性与非线性时间序列数据
线性时间序列是指对于每个数据点 Xt,该数据点可以视为过去或未来值或差异的线性组合。非线性时间序列由非线性动态方程生成。它们具有线性过程无法建模的特征:时间变化的方差、不对称的周期、高阶结构、阈值和中断。以下是处理线性和非线性时间序列数据时的一些重要考虑因素
- 如果回归方程不遵循线性模型规则,则必须是非线性模型。
- 非线性回归可以拟合大量的曲线。
- 这两种类型模型的决定性特征是函数形式。
时间序列分析
分析时间序列数据允许提取有意义的统计和其他数据特征。正如其名所示,时间序列数据是在时间上重复测量创建的观察结果的集合。一旦你有了这些信息,你就可以在图上绘制它,并更准确地了解你正在跟踪的内容。
一个非常简单的时间序列分析示例可能是温度在一天内的升高和降低。通过在 24 小时内每小时记录具体的室外温度,你就有了一幅关于你所在地区温度升高和降低的完整画面。然后,假设你了解到第二天在降水和湿度等方面将与相对相似。在这种情况下,你可以对特定时间的温度做出更明智的猜测。这个分析是一个过于简化的例子——但是无论你谈论的是什么,其基本结构都是相同的。
这种分析需要识别观察到的时序数据集的模式。一旦确定了模式,就可以对其进行解释,与其他数据集成,并用于预测(这是机器学习的基础)。机器学习是一种人工智能,它允许计算机程序真正“学习”并在时间推移中变得更加“聪明”,而无需明确编程来完成。
时序分析的重要性
随着越来越多的连接设备被实施,并且数据需要实时收集和处理,处理时序数据的能力变得越来越重要。在未来几年,随着物联网、人工智能和设备在我们生活中的作用越来越重要,这一点将变得越来越关键。
在本质上,物联网是一个用来描述数以亿计的连接设备网络的术语——它们始终在创造和共享数据。在个人环境中,我们已经看到这种转变在美国的“智能”家庭中开始。你的恒温器知道当温度达到一定值时,它需要降低房间的窗帘以帮助控制温度。或者你的智能家居中心知道当最后一个人离开房子时,它应该锁上所有的门并关闭所有的灯。如果没有一个时刻交换信息的互联传感器网络,它就无法达到这个水平——这使得时序分析变得更加重要。
时序分析可以有效地做到以下几点:- 阐明随着时间的推移所采集的数据点可能存在某种趋势或模式,否则可能无法发现。- 帮助用户更好地理解过去,从而更好地预测未来。
最后一点至关重要,这也是为什么时序分析在经济学、统计学和类似领域被广泛使用的原因之一。假设你有某只特定股票的历史数据,你知道它在某些世界事件发生时通常会表现如何。在这种情况下,你可以更好地预测未来类似事件发生时的价格。如果你知道经济衰退即将到来,你可以利用这个洞察力来更好地做出购买股票的决定。
由于分析是基于时间序列数据,第一步是绘制数据并观察可能随时间发生的任何模式。
想了解更多?注册参加时序基础培训或比较存储和分析时序数据的选项。
什么是时序图?
时序图只是将时序数据在一个轴(通常是Y轴)上绘制,与另一个轴(通常是X轴)上的时间进行对比。时序数据点的图表通常可以以更易于理解、更直观的方式展示趋势或模式。
什么是时序图统计?
时序图是一种图表,其中x轴代表时间的某种度量。实际上,x轴被标记为时间轴。y轴代表被测量的变量。数据点通常用直线连接显示,这有助于解释生成的图表。
时序数据可以用不同类型的图表可视化,以促进洞察力提取、趋势分析和异常检测。时序可视化和仪表板工具包括InfluxDB UI和Grafana。
“时序模式”这个术语描述了序列中的长期变化。无论测量为趋势、季节性或循环模式,相关性都可以用多种方式(线性、指数等)计算,并且在任何给定时间都可能改变方向。
时间序列数据用于时间序列分析(历史或实时)和时间序列预测,以检测和预测模式——本质上是在观察随时间的变化。以下是对每个方面的简要概述。
时间序列分析方法
时间序列分析是分析在一定时期内收集的一系列数据点的方法。在时间序列分析中,数据点在设定的时间段内以固定间隔记录,而不是间歇性或随机记录。
时间序列分析是使用统计方法分析时间序列数据并提取有关数据的有意义统计和特征。时间序列分析(TSA)有助于识别趋势、周期和季节性变化,以帮助预测未来事件。与TSA相关的因素包括平稳性、季节性和自相关性。
时间序列分析可以用来观察给定变量随时间的变化(在时间序列数据中,时间本身通常是自变量)。时间序列分析还可以用来检查与所选数据点相关的变化与同一时间段内其他变量的变化进行比较。
时间序列预测方法
时间序列预测使用有关历史值和相关模式的信息来预测未来的活动。
时间序列预测方法包括
- 趋势分析
- 周期性波动分析
- 季节性模式分析
与所有预测方法一样,成功并不保证。机器学习经常被用于此目的。同样,还有其经典的前辈:[错误、趋势、季节性预测(ETS)](https://influxdb.org.cn/blog/when-you-want-holt-winters-instead-of-machine-learning/)、自回归积分移动平均(ARIMA)和Holt-Winters。
为了“提前看到事物”,时间序列建模(一种基于时间序列数据的预测方法)涉及处理基于时间的数据(年、日、小时、分钟)以推导出隐含的洞察力,这些洞察力可以指导决策。时间序列模型是具有序列相关数据的非常有用的模型。大多数企业都会处理时间序列数据来分析下一年度的销售预测、网站流量、竞争定位等等。
了解有关时间序列预测方法的更多信息,包括分解模型、基于平滑的模型和包含季节性的模型。
用于分析时间序列的编程语言
在用于时间序列分析和数据科学的许多编程语言中
识别时间序列数据
时间序列数据的特点是有自然的时间顺序:数据的观察顺序很重要。与常规数据相比,时间序列数据的关键区别在于你总是对其随时间提出问题。确定你正在处理的数据集是否是时间序列数据的一个简单方法,是看你的轴之一是否是时间。
时间序列注意事项
不可变性 - 由于时间序列数据按时间顺序排列,因此它几乎总是以新条目记录,因此应该是不可变的和可追加的(追加到现有数据)。它通常不会改变,而是按事件发生的顺序附加。这种特性将时间序列数据与通常可变且存储在关系数据库中的关系数据区分开来,这些数据库执行在线事务处理,其中数据库中的行在事务运行时更新,或多或少是随机的;例如,取现有客户的订单会更新客户表以添加购买的物品,并更新库存表以显示它们不再可供销售。
时序数据的有序性使其在数据空间中独树一帜,因为它通常表现出序列相关性。序列相关性是指一个时间点上的数据点的值在统计上依赖于另一个时间点上的数据点(阅读“时序数据中的自相关性”以获取关于此主题的详细解释)。
尽管没有存在于时间之外的事件,但也有一些事件与时间无关。时序数据并不仅仅是关于按时间顺序发生的事情,它是关于当将时间作为一个轴时,其值会增加的事件。时序数据有时存在于很高的粒度级别,如微秒甚至纳秒。对于时序数据,时间的变化是关键。
时序数据的不同形式 – 时序数据不总是数值型 – 它可以是int64、float64、bool或string。
时序数据与横截面数据和面板数据
要确定您的数据是否为时序数据,请考虑您需要确定数据集中唯一记录的内容。
- 如果您只需要时间戳,那么它很可能是时序数据。
- 如果您需要除时间戳之外的其他东西,那么它很可能是横截面数据。
- 如果您需要时间戳加上其他东西,如ID,那么它很可能是面板数据。
通过回忆上述三种数据类型的定义(以及它们之间的区别),上述内容的意义会更加清晰。
时序数据定义
时序数据是对单个主体(实体)在不同时间间隔(通常如度量数据那样等距,或如事件那样不等距)的观察(行为)集合。
例如:在每年的第一天收集纽约市的最高温度、湿度以及风速(所有三个行为)。
时间作为轴的相关性使时序数据与其他类型的数据区别开来。
横截面数据定义
横截面数据是对多个主体(如不同个人或群体)在某个时间点上的观察(行为)集合。
例如:在2015年1月1日,纽约市、旧金山、波士顿、芝加哥(多个实体)的最高温度、湿度以及风速(所有三个行为)。
在横截面研究中,观察没有自然顺序(例如,通过参考各自的教育水平来解释人们的工资,其中个人数据可以以任何顺序输入)。
例如:在特定时间点的一组50只股票的收盘价、特定商店特定产品的库存清单,以及学生在特定考试中获得的分数列表。
面板数据(纵向数据)定义
面板数据通常被称为横截面时序数据,因为它结合了上述类型(即,对多个主体的多个实例的观察集合)。
面板数据或纵向数据是多维数据,涉及随时间进行的测量。面板数据包含对同一公司或个人在多个时间段内获得的多现象的观察。使用面板数据的研究被称为纵向研究或面板研究。
例如:在每年的第一天,在纽约市、旧金山、波士顿、芝加哥(多个实体)的最高温度、湿度以及风速(所有三个行为)。
三种数据类型之间的区别
基于上述定义和示例,让我们回顾一下三种数据类型之间的区别。
- 时间序列是指一个实体随时间变化的观测值集合——例如,单个金融工具一年内每日收盘价,或者在一个一小时手术过程中,每分钟测量一个患者的脉搏。
- 横截面是指在某一时刻对多个实体的观测值集合——例如,今天S&P 500公司中每家公司的收盘价,或者同一手术开始时100个患者的脉搏。
- 如果您的数据在两个维度上都有组织——例如,500家公司的年度每日收盘价——那么您就有面板数据。
使用InfluxDB的时间序列分析示例
为了建立一个实时风险监控系统,Robinhood(无佣金投资的先驱)选择了InfluxDB(一个基于开源技术的时序数据库)和Faust(一个开源Python流处理库)。他们系统背后的架构涉及到时间序列异常检测(InfluxDB)和实时流处理(Faust/Kafka)。
Robinhood使用Faust,一个用于Kafka Streams的实时Python库,对数据进行了警报。
聚合数据(黄色)被上限和下限(蓝色)所限制。
随着时间序列数量的增加,理解或检测时间序列中的异常所需的工作量变得非常昂贵。这就是异常检测系统智能地提醒您当某事不太对劲的地方。
Robinhood尝试的第一种异常检测解决方案是基于阈值的警报,通过这种警报,当底层数据超过或低于阈值时,就会触发警报。基于阈值的警报在非常简单的时间序列中表现良好,但无法处理更复杂的时间序列。如下所示,这里的时间序列有一个趋势。它呈上升趋势,并在该上升趋势中存在一些上下波动。如果使用固定阈值来检测异常,则效果不佳,因为它将超过阈值,并触发警报,然后下降到阈值以下,再次超过阈值。因此,在复杂时间序列的情况下,基于阈值的警报需要与24/7检查仪表盘一样多的努力。
为了解决这个问题,Robinhood对超出三个标准差的数据进行了警报。从标准差定义阈值进行异常检测是有优势的,因为它可以帮助您检测非平稳数据中的异常(如上述示例)。换句话说,标准差定义的阈值将遵循数据趋势。Robinhood将异常定义为任何超出平均数三个标准差之外的数据——因此,99.7%的数据都位于这个范围内。
各个领域的应用
时间序列模型被用来
- 了解产生观测数据的基础力量和结构。
- 拟合模型并进入预测、监控或反馈和前馈控制。
应用范围涵盖以下行业
- 预算分析
- 人口普查分析
- 经济预测
- 库存研究
- 过程和质量控制
- 销售预测
- 股市分析
- 公用事业研究
- 工作量预测
- 产量预测
理解数据平稳性
平稳性是时间序列分析中的一个重要概念。许多有用的分析工具、统计检验和模型都依赖于平稳性来进行预测。对于许多涉及时间序列的情况,有时需要确定数据是否由平稳过程生成,从而产生平稳时间序列数据。相反,有时将非平稳过程转换为平稳过程,以便对其应用特定的预测函数是有用的。平稳化时间序列的常见方法是通过差分过程,这可以用来消除系列中的任何不感兴趣的趋势。
时间序列的平稳性由恒定的均值、方差和自相关定义。虽然一个系列可以通过几种方式非平稳(例如,随着时间的推移,方差增加),但一个系列只能以一种方式平稳(当所有这些属性随时间不变时)。
时间序列数据中可能存在的模式
通过以下三个组成部分可以理解系列中的变化或运动:趋势、季节性和残差。前两个组成部分代表系统性的时间序列变化类型。第三个组成部分代表统计噪声(类似于各种统计模型中包含的误差项)。为了可视化探索一个系列,时间序列通常通过时间序列分解过程正式划分为这三个组成部分,其中时间序列被分解为其组成部分。
趋势
趋势指的是系列水平上的任何系统性变化,即其长期方向。趋势的方向和斜率(变化率)可能在整个过程中保持不变或变化。
季节性
与趋势成分不同,系列的季节成分是系列中重复出现的变化和减少的模式,在整个期间持续发生。季节性通常被认为是一年内季节或月季节中的周期性或重复模式。然而,季节并不局限于该时间尺度——季节也可以存在于纳秒范围内。
残差
残差构成了从数据中移除季节性和趋势后剩余的部分。
分析时间序列数据的关键方法
时间序列分析方法可以分为两大类
- 频域方法(这些包括频谱分析和小波分析)在电子学、控制系统工程和统计学中,频域是指根据频率而不是时间分析数学函数或信号。
- 时域方法(包括自相关和互相关分析)时域是指对数学函数、物理信号或经济或环境数据的时间序列的分析。在时域内,可以通过缩放相关来像滤波器一样进行相关分析和分析,从而减少在频域中进行操作的需要。
此外,时间序列分析方法还可以分为两种其他类型
- 参数化:参数化方法假设基本的平稳随机过程具有某种结构,这种结构可以用少量参数来描述(例如,使用自回归或移动平均模型)。在这些方法中,任务是估计描述随机过程的模型的参数。
- 非参数化:相比之下,非参数化方法明确估计过程的相关性或谱,而不假设过程具有任何特定的结构。
以下是上述每种方法的概述。
频谱分析
许多时间序列显示出非常复杂的时间周期性行为。频谱分析是一种允许我们发现潜在周期性的技术,它是地球物理学、海洋学、大气科学、天文学、工程学和其他领域数据分析中最广泛使用的方法之一。
可以使用称为周期图的对象来估计频谱密度,它是我们的时间序列与系列覆盖的不同频率的正弦/余弦波之间的平方相关性。要进行频谱分析,必须首先将数据从时域转换为频域。
小波分析
什么是小波?小波是一个在时间和频率上局部化的函数,通常具有零均值。它也是一种通过位置和频率分解信号的工具。考虑傅里叶变换:信号只分解为其频率分量。
小波是分析工具,主要用于时间序列分析和图像分析(此处不涉及)。作为一个主题,小波相对较新(1983年至今),并综合了许多新/旧的思想。
自相关
什么是时间序列数据中的自相关?自相关是一种序列依赖性。具体来说,自相关是指时间序列与其滞后版本线性相关。当一组数值可以根据系列中的先前值来预测时,该系列就显示出自相关。相比之下,相关性只是两个独立变量线性相关的情况。
自相关的重要性在于,通常,任何数据分析的第一步是进行回归分析。然而,回归分析的一个假设是数据没有自相关。这可能会让人沮丧,因为如果你尝试对具有自相关的数据进行回归分析,那么你的分析将是误导性的。
此外,一些时间序列预测方法(特别是回归建模)依赖于残差(拟合模型与数据之间的差异)中没有自相关的假设。人们经常使用残差来评估他们的模型是否适合,而忽略了残差没有自相关(或者误差是独立且同分布的,即i.i.d)的假设。这个错误可能导致人们相信他们的模型是合适的,而实际上并不是。
最后,自相关分析最引人注目的方面可能是它如何帮助我们揭示数据中的隐藏模式,并帮助我们选择正确的预测方法。具体来说,我们可以用它来帮助识别时间序列数据中的季节性和趋势。此外,分析自相关函数(ACF)和偏自相关函数(PACF)是选择适合您的时序预测的ARIMA模型所必需的。学习如何确定您的时序数据是否存在自相关。
互相关
互相关是一种测量,用于追踪两个变量或数据集相对于彼此的运动。在其最简单的版本中,可以用独立变量X和两个因变量Y和Z来描述。如果独立变量X影响变量Y,并且两者正相关,那么当X的值上升时,Y的值也会上升。
如果X和Z之间的关系也是如此,那么当X的值上升时,Z的值也会上升。变量Y和Z可以说存在互相关,因为它们的行为了因为各自与变量X的关系而正相关。
参数检验与非参数检验
参数检验假设数据中存在潜在的统计分布。因此,必须满足几个有效性条件,以确保参数检验的结果是可靠的。非参数检验比参数检验更稳健。它们在更广泛的情境中有效(有效性条件更少)。
非参数检验不依赖于任何分布。因此,即使不满足参数检验的有效性条件,也可以应用。参数检验将比非参数检验具有更强的统计功效。参数检验更有可能拒绝H0。大多数情况下,与参数检验相关的p值将低于在相同数据上运行的非参数等价物的p值。
时间序列分析最佳实践
为了在时间分析中获得最佳结果,重要的是要更好地理解您最初试图做什么。记住,在时间序列中,独立变量通常是时间本身,您通常使用它来尝试预测未来可能发生的事情。
要达到这一点,您必须了解时间是否平稳,是否存在季节性,以及变量是否自相关。
自相关定义为观测值作为它们之间时间间隔的函数的相似性。季节性关注特定的、周期性的波动。如果时间序列是平稳的,其统计属性不会随时间改变。换句话说,时间序列的均值和方差是恒定的,无论独立变量时间本身发生了什么。这些问题都是您在进行时间序列分析之前应该回答的问题。
时间序列模型
一般来说,在进行时间序列分析时,您将使用三个核心模型:自回归模型、积分模型和移动平均模型。
自回归模型是一种用于表示随机过程的模型。它最常用于在经济学、自然等领域进行时间序列分析。移动平均模型通常用于建模单变量时间序列,因为输出变量的表示方式线性依赖于一个不可预测的术语的当前值和过去值。传统的积分模型是一种按时间顺序列出所有数据点的模型。
如何进行时间序列分析显然会因你选择的模型而异。
了解Nobl9如何利用InfluxDB节省时间和金钱
关于时间序列数据的常见问题(FAQ)
时间序列数据存储在哪里?
时间序列数据通常以大量形式摄入,需要一种专为处理其规模而设计的数据库。使时间序列数据与其他数据工作负载显著不同的特性包括数据生命周期管理、汇总和大量记录的大范围扫描。这就是为什么时间序列数据最好存储在专为处理带时间戳的指标、事件或测量而构建的时间序列数据库中。
了解更多关于时间序列数据存储以及存储、收集和分析时间序列数据的最佳方式。
什么是时间序列统计?
时间序列统计是指从时间序列模型中提取的数据。信息必须按固定时间间隔记录,并且可以与横截面数据结合以得出相关预测。
什么是时序图统计?
时间序列图统计是指特定时间间隔内序列的演变。它常用于分析初期,以快速解释从趋势到异常的各种内容。
时间序列数据库与数据仓库或数据湖屋是否相同?
不,但数据仓库过程有助于你分析组织中所有系统和软件工具中存在的数据,包括时间序列数据库。阅读更多关于InfluxDB如何与你的数据湖屋协同工作的信息。
如何理解和使用时间序列数据?
时间序列数据被收集、存储、可视化和分析,以在各个领域实现多种目的。
- 在数据挖掘、模式识别和机器学习中,时间序列分析用于聚类、分类、内容查询、异常检测和预测。
- 在信号处理、控制工程和通信工程中,时间序列数据用于信号检测和估计。
- 在统计学、计量经济学、定量金融、地震学、气象学和地球物理学中,时间序列分析用于预测。