时间序列数据分析
2025 年的定义和最佳技术
在这篇技术文档中,InfluxData 首席技术官 Paul Dix 将带您了解什么是时间序列(以及不是什么),它与流处理、全文搜索和其他解决方案的不同之处,以及如何交付实时分析。

时间序列数据和分析
时间序列分析着眼于随时间收集的数据。例如,时间序列指标可以是商店从一天到另一天售出的库存量。通常会出现可以预测和预防问题的模式。销售额的突然下降对公司来说是昂贵的,因此了解哪些事件先于并预测这种变化将有所帮助。时间序列数据无处不在。随着我们的世界变得越来越仪器化,传感器和系统不断发出时间序列数据流。
时间序列分析的例子
- 大脑中的电活动
- 降雨量测量
- 股票价格
- 太阳黑子的数量
- 年度零售额
- 每月订阅用户
- 每分钟心跳次数
关键时间序列概念
- 时间序列数据是随时间推移的数据点集合。
- 时间序列分析是识别趋势,如季节性,以帮助预测未来事件。
时间序列示例
天气记录、经济指标和患者健康演变指标——所有这些都是时间序列数据。时间序列数据也可能是服务器指标、应用程序性能监控、网络数据、传感器数据、事件、点击和许多其他类型的分析数据。理解时间序列的最佳方法是开始在 InfluxDB Cloud 中使用一些示例数据进行探索。
注意时间——在下图底部描绘——是轴。
在下面的下一个图表中,请注意时间是衡量股票价格变化的轴。在投资中,时间序列跟踪数据点的移动,例如在指定时间段内证券的价格,数据点以规则的时间间隔记录。这可以短期跟踪(例如,在一个工作日的过程中,证券的价格按小时计算)或长期跟踪(例如,在五年过程中,每个月最后一天收盘时证券的价格)。
下面的集群监控示例,描绘了磁盘操作写入和使用数据,对于网络运营中心团队来说会很熟悉。请记住,监控数据是时间序列数据。
另一个熟悉的时间序列数据示例是患者健康监控,例如心电图 (ECG),它监控心脏活动以显示其是否正常工作。
除了以规则的时间间隔捕获外,时间序列数据还可以在任何发生时捕获——无论时间间隔如何,例如在日志中。日志是软件应用程序和操作系统之间事件、进程、消息和通信的注册表。每个可执行文件都会生成一个日志文件,其中记录了所有活动。日志数据是分类和解决问题的重要上下文来源。例如,在网络中,事件日志有助于提供有关网络流量、使用情况和其他条件的信息。
跟踪(应用程序在执行期间执行的子程序调用的列表)也是时间序列数据。在下面跟踪图表中的彩色条带上,您可以看到时间序列数据的示例。跟踪的目标是跟踪程序的流程和数据进展。跟踪包含应用程序的广泛、连续的视图,以查找程序或应用程序中的错误。
上面的例子包含了两种不同类型的时间序列数据,如下所述。
时间序列数据的类型
时间序列数据可以分为两种类型
- 以规则时间间隔收集的测量值(指标)
- 以不规则时间间隔收集的测量值(事件)
在上面“时间序列数据示例”部分中
- 示例 3(集群监控)和 4(健康监控)描绘了指标。
- 示例 5(日志)和 6(跟踪)描绘了事件。
因为事件以不规则的时间间隔发生,所以事件是不可预测的,并且无法建模或预测,因为预测假设过去发生的任何事情都是未来会发生的事情的良好指标。
时间序列数据示例可以是任何在特定时间间隔(无论规则与否)获取的信息序列。常见的数据示例可以是任何内容,从心率到商店商品的单价。
线性与非线性时间序列数据
线性时间序列是指,对于每个数据点 Xt,该数据点可以被视为过去或未来值或差异的线性组合。非线性时间序列由非线性动力学方程生成。它们具有线性过程无法建模的特征:随时间变化的方差、不对称周期、高阶矩结构、阈值和中断。以下是在处理线性和非线性时间序列数据时的一些重要注意事项
- 如果回归方程不遵循线性模型的规则,那么它必须是非线性模型。
- 非线性回归可以拟合各种各样的曲线。
- 两种模型类型的决定性特征是函数形式。
时间序列分析
分析时间序列数据可以提取有意义的统计数据和其他数据特征。顾名思义,时间序列数据是通过重复随时间推移的测量而创建的观察结果的集合。一旦您掌握了这些信息,您就可以将其绘制在图表上,并更精确地了解您正在跟踪的内容。
一个非常直接的时间序列分析示例可能是一天中温度的上升和下降。通过每小时间隔跟踪室外特定温度 24 小时,您可以全面了解您所在地区温度的上升和下降。然后,假设您知道第二天在降水和湿度等方面将相对相似。在这种情况下,您可以更准确地猜测特定时间的温度。是的,这个分析是一个过于简化的例子——但无论您在谈论什么,其底层结构都是相同的。
这种分析需要识别观察到的时间序列数据集的模式。一旦建立模式,就可以对其进行解释,与其他数据集成,并用于预测(机器学习的基础)。机器学习是一种人工智能,它允许计算机程序真正地“学习”并在一段时间内变得“更智能”,所有这些都无需显式编程即可实现。
时间序列分析的重要性
随着更多连接设备的实施以及期望实时收集和处理数据,处理时间序列数据的能力变得越来越重要。在未来几年,随着物联网、人工智能和设备在我们所有人的生活中发挥越来越重要的作用,这将变得越来越关键。
从本质上讲,物联网是一个术语,用于描述一个由数十亿个连接设备组成的网络——这些设备始终都在创建和共享数据。在个人背景下,我们已经在美国各地的“智能”住宅中看到了这种转变的开始。您的恒温器知道,当温度达到一定程度时,它需要降低房间的遮阳帘以帮助控制温度。或者您的智能家居中心知道,一旦最后一个人离开家,它就会锁定所有门并关闭所有灯。如果没有传感器互连网络始终交换信息,它将无法达到这一点——这使得时间序列分析变得更加关键。
除此之外,时间序列分析可以有效地 - 说明随时间推移获取的数据点可能具有某种趋势或模式,否则可能不会被发现。- 让用户更好地了解过去,从而使他们能够更好地预测未来。
最后一点至关重要,也是时间序列分析被用于经济学、统计学和类似领域的重要原因。例如,假设您有特定股票的历史数据,并且您知道在某些世界事件发生时它的传统表现如何。在这种情况下,当未来发生类似事件时,您可以更好地预测价格。如果您知道经济衰退即将来临,您可以利用这种洞察力来做出更好、更明智的购买股票的决定。
由于分析是基于针对时间绘制的数据,因此第一步是绘制数据并观察可能随时间发生的任何模式。
想要了解更多?注册时间序列基础知识培训或比较存储和分析时间序列数据的选项。
什么是时间序列图?
时间序列图只是将时间序列数据绘制在一个轴上(通常是 Y 轴),并将时间绘制在另一个轴上(通常是 X 轴)。时间序列数据点的图表通常可以以更易于访问、更直观的方式说明趋势或模式。
什么是时间图统计?
时间序列图是以时间度量为 x 轴的图形。实际上,x 轴被标记为时间轴。y 轴表示被测量的变量。数据点通常以直线显示和连接,从而可以解释生成的图形。
时间序列数据可以在不同类型的图表中可视化,以方便洞察力提取、趋势分析和异常检测。时间序列可视化和仪表板工具包括 InfluxDB UI 和 Grafana。
术语“时间序列模式”描述了序列的长期变化。无论是作为趋势、季节性还是周期性模式来衡量,相关性都可以通过多种方式(线性、指数等)计算,并且方向可能在任何给定时间发生变化。
时间序列数据用于时间序列分析(历史或实时)和时间序列预测,以检测和预测模式——本质上是查看随时间的变化。以下是每个的简要概述。
时间序列分析方法
时间序列分析是一种分析在一段时间内收集的一系列数据点的方法。在时间序列分析中,数据点是在设定的时间段内以规则的时间间隔记录的,而不是间歇性或随机记录的。
时间序列分析是使用统计方法来分析时间序列数据并提取有关数据的有意义的统计数据和特征。 TSA 帮助识别趋势、周期和季节性差异,以帮助预测未来事件。与 TSA 相关的因素包括平稳性、季节性和自相关性。
时间序列分析可用于查看给定变量如何随时间变化(而时间本身在时间序列数据中通常是自变量)。时间序列分析还可用于检查与选定数据点相关的变化与同一时间段内其他变量的变化相比如何。
时间序列预测方法
时间序列预测使用有关历史值和相关模式的信息来预测未来活动。
时间序列预测方法包括
- 趋势分析
- 周期性波动分析
- 季节性模式分析
与所有预测方法一样,成功并非得到保证。机器学习通常用于此目的。它的经典前辈也是如此:误差、趋势、季节性预测 (ETS)、自回归积分滑动平均 (ARIMA) 和 Holt-Winters。
为了“提前看到事物”,时间序列建模(一种基于时间序列数据的预测方法)涉及处理基于时间的数据(年、天、小时、分钟),以得出为决策提供信息的隐藏见解。当您拥有串行相关数据时,时间序列模型是非常有用的模型。大多数企业都使用时间序列数据来分析明年、网站流量、竞争定位等的销售预测。
了解更多关于时间序列预测方法的信息,包括分解模型、基于平滑的模型和包括季节性的模型。
用于分析时间序列的编程语言
用于时间序列分析和数据科学的众多编程语言包括
识别时间序列数据
时间序列数据的独特之处在于它具有自然的时间顺序:观察数据的顺序很重要。时间序列数据与常规数据的关键区别在于,您始终在询问有关其随时间推移的问题。确定您正在使用的数据集是否为时间序列的一种通常简单的方法是查看您的轴之一是否为时间。
时间序列注意事项
不可变性 – 由于时间序列数据按时间顺序排列,因此几乎总是记录在新条目中,因此,应该是不可变的并且仅附加(附加到现有数据)。它通常不会更改,而是按照事件发生的顺序附加。此属性将时间序列数据与关系数据区分开来,后者通常是可变的,并且存储在进行在线事务处理的关系数据库中,其中数据库中的行在事务运行时更新,并且或多或少是随机的;例如,为现有客户下单会更新客户表以添加购买的项目,并更新库存表以显示这些项目不再可供销售。
时间序列数据之所以在数据空间中独一无二,是因为它通常表现出序列依赖性。当一个时间点的数据点值在统计学上依赖于另一个时间点的另一个数据点时,就会发生序列依赖性(阅读“时间序列数据中的自相关性”,以详细了解此主题)。
虽然不存在时间之外的事件,但有些事件与时间无关。时间序列数据不仅仅是关于按时间顺序发生的事情,而是关于当您将时间添加为轴时其值会增加的事件。时间序列数据有时以非常高的粒度级别存在,频率高达微秒甚至纳秒。对于时间序列数据,随时间的变化至关重要。
时间序列数据的不同形式 – 时间序列数据不总是数字形式——它可以是 int64、float64、bool 或字符串。
时间序列数据 vs. 横截面数据和面板数据
要确定您的数据是否为时间序列数据,请弄清楚您需要什么来确定数据集中的唯一记录。
- 如果您只需要时间戳,则很可能是时间序列数据。
- 如果您需要时间戳以外的其他内容,则很可能是横截面数据。
- 如果您需要时间戳加上其他内容(如 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 的关系。
参数化 vs. 非参数化检验
参数化检验假设数据中存在潜在的统计分布。因此,必须满足几个有效性条件,以便参数化检验的结果是可靠的。非参数化检验比参数化检验更稳健。它们在更广泛的情况下有效(有效性条件更少)。
非参数化检验不依赖于任何分布。因此,即使不满足参数有效性条件,也可以应用它们。参数化检验将比非参数化检验具有更高的统计功效。参数化检验更能够导致拒绝 H0。在大多数情况下,与在相同数据上运行的非参数化等效检验相关的 p 值将低于与参数化检验相关的 p 值。
时间序列分析最佳实践
为了在时间分析方面获得最佳结果,重要的是首先更好地理解您最初尝试做什么。请记住,在时间序列中,自变量通常是时间本身,并且您通常使用它来尝试预测未来可能发生的事情。
要达到这一点,您必须了解时间是否平稳、是否存在季节性以及变量是否自相关。
自相关定义为观测值的相似性,它是观测值之间经过的时间量的函数。季节性着眼于特定的周期性波动。如果时间序列是平稳的,则其自身的统计特性不会随时间变化。换句话说,无论自变量时间本身发生什么,时间序列都具有恒定的均值和方差。这些都是您在执行时间序列分析之前应该回答的所有问题。
时间序列模型
一般来说,在执行时间序列分析时,您将使用三个核心模型:自回归模型、积分模型和移动平均模型。
自回归模型是一种用于表示随机过程类型的模型。它最常用于在经济学、自然等背景下执行时间序列分析。移动平均模型通常用于对单变量时间序列进行建模,因为输出变量的表示方式线性地取决于不完全可预测项的当前值和过去值。传统的积分模型是按时间顺序列出所有数据点的模型。
如何进行时间序列分析显然会因您选择使用的模型而异。
了解 Nobl9 如何通过 InfluxDB 节省时间和金钱
关于时间序列数据的常见问题 (FAQ)
时间序列数据存储在哪里?
时间序列数据通常以海量方式摄取,并且需要一个专门构建的数据库来处理其规模。使时间序列数据与其他数据工作负载非常不同的属性是数据生命周期管理、摘要和许多记录的大范围扫描。这就是为什么时间序列数据最好存储在专门为处理指标和事件或时间戳测量而构建的时间序列数据库中。
详细了解时间序列数据存储以及关于存储、收集和分析时间序列数据的最佳方法。
什么是时间序列统计量?
时间序列统计量是指从时间序列模型中提取的数据。信息必须以规则的时间间隔记录,并且可以与横截面数据结合使用以得出相关的预测。
什么是时间图统计?
时间图统计量是指序列在特定时间间隔内的演变。它通常在分析开始时使用,以便快速解释从趋势到异常的任何内容。
时间序列数据库与数据仓库或数据湖仓是否相同?
不,但是数据仓库过程可帮助您分析组织中所有系统和软件工具中存在的数据,包括时间序列数据库。阅读更多关于InfluxDB 如何与您的数据湖仓协同工作的信息。
如何理解和使用时间序列数据?
时间序列数据被收集、存储、可视化和分析,用于各个领域的各种目的
- 在数据挖掘、模式识别和机器学习中,时间序列分析用于聚类、分类、按内容查询、异常检测和预测。
- 在信号处理、控制工程和通信工程中,时间序列数据用于信号检测和估计。
- 在统计学、计量经济学、定量金融学、地震学、气象学和地球物理学中,时间序列分析用于预测。