概念

在本文中,我们将介绍我们在 Timeseries Insights API 中处理的常见概念,并尝试直观解释这些概念所代表的含义。

事件

事件既是数据点,也是 Timeseries Insights API 处理的原始输入。从概念上讲,它表示某个代理执行的操作(例如客户端的事务或新闻报道的发布)或观察结果(例如温度传感器的读数或机器上的 CPU 使用率)。

事件包含:

  • 来自不同维度的一组值,表示用于描述事件的属性,例如标签或数值测量。
  • 表示事件发生时间的时间戳。此时间戳将用于聚合事件形成时序
  • 群组 ID。

维度

维度表示数据集中事件的媒体资源类型及其可接受的值的域。维度可以是:

  • 分类。此维度上的事件属性可以包含一个有限/有限值(通常为字符串)。示例包括:包含新闻报道的数据集中的国家/地区或发布商名称,包含生产监控数据的数据集中的机器名称。
  • 数值。事件的测量或常规数值属性。 示例:新闻报道的网页浏览量、CPU 使用情况或生产监控数据的错误数。

数据集

数据集是项目中具有唯一名称的事件集合。 查询在同一数据集中执行。

群组

您可以通过指定同一组 ID 来将事件分组(请参阅 Event.groupId)。该组类似于互联网活动的“会话”。

最常见的情况是为每个事件记录指定唯一的组 ID。群组 ID 的使用情形也包括但不限于:

  • 来自多个事件记录中的同一事件(具有相同或相似时间戳)的事件标识符,尤其是当同一事件的不同属性来自不同来源且在进入系统之前未合并时。例如,监控同一设备的多个传感器可能各自生成单独的事件记录。
  • 一系列相关事件的会话标识符(通常具有短时间内的时间戳)。例如,网络浏览会话中的 activity。另一个例子是出租车行程中的日志条目。
  • 用户帐号标识符,因此具有相同组 ID 的所有事件记录都属于同一用户。

该群组的用途是计算同一群组中事件(维度)之间的相关性。例如,如果您的数据集包含监控数据(如 CPU、RAM 等),则一个组可以保存一个进程中的所有监控数据。这样一来,我们最终就可以检测到 CPU 的增加与另一个事件(例如先前某个时刻的二进制版本更新)相关。

如果不确定或不想计算这些类型的相关性,则每个事件都应具有全局唯一的组 ID。省略 groupId 会产生类似的效果,系统会根据内容和时间戳生成内部 groupId

切片

切片是数据集中在一些维度上具有一些给定值的所有事件的子集。对于分类维度,指定值是单个固定值;对于数字维度,指定值是范围。

例如,假设我们有一个包含某国际零售商的销售数据的数据集,每个事件都是一次包含以下分类维度的销售活动:发生销售的国家/地区、产品名称、生产该产品的公司的名称。在这种情况下,切片示例包括:给定产品的所有销售额、给定公司生产的所有产品在给定国家/地区的所有销售额。

时序

我们使用的时序由离散时间组成,由时间相等的点组成。连续时序点之间的时间间隔长度称为时序的粒度

时序的计算方式如下:

  • 对于给定的切片,收集 [detectionTime - TimeseriesParams.forecastHistory, detectionTime + granularity] 时间间隔内的所有事件。
  • 根据事件的时间戳和粒度对其进行分组。如果 E.eventTime 在 [T, T + granularity] 时间间隔内,则事件 E 分配给从时间 T 开始的点。
  • 对于时序中的每个点,汇总基于指定数值维度的事件,并将其设置为指标 (TimeseriesParams.metric),表示这些点的值。聚合操作可通过计算(如果未指定 metric,通常是指事件的所有维度都是分类维度)、求和或求平均值(如果指定了 metric)来完成。

时序点

每个时序点都有一个关联的 timevalue

时间实际上是长度为 granularity 的时间间隔,以 time 为开始时间。

如果指定了 metric (TimeseriesParams.metric),它必须是数值维度。该点的 value 使用 TimeseriesParams.metricAggregationMethod 从内部时间内所有事件的 metric 维度的维度值中汇总。

如果未指定指标,则该点的 value 是相应时间间隔内的事件数量。

预测

预测给定时序的未来值的过程。预测功能使用时序的开头部分作为训练数据,以构建模型。

地平线

我们将预测从检测时间到时间范围(由 ForecastParams.horizonTime 字段提供)的时序值。

直观地说,此字段可以告诉我们未来应该预测多少值。虽然我们最感兴趣的是将切片归类为异常值时的检测点值,但我们允许预测额外的数据点,因为它可以为用户提供有用的信息。

检测时间和检测点

检测时间(由 QueryDataSetRequest.detectionTime 指定)是我们开始分析任何潜在异常的时间点。

检测点是检测时的时序点。

预期偏差

根据时序的稳定性和可预测性,我们对预测的信心可能会降低或更有信心。置信度反映在 EvaluatedSlice.expectedDeviation 字段中,该字段用于指定与我们对检测时间的预测值相比可接受的绝对偏差。

异常值

如果在检测期间某个切片的预测值与实际值之间的偏差高于我们的预期,则可以将其视为异常值。

我们称实际偏差与异常值得分的预期偏差有多远:

anomalyScore = (detectionPointactual - detectedPointForecast) / expectedDeviation

一般来说,低于 1.0 的得分反映了考虑到切片历史的常见变化,而高于 1.0 的得分应该需要关注,分数越高,表示异常的严重性越大。

噪声阈值

之前定义的异常值显示了某个偏差与正常值的偏差的统计显著性。但是,在许多情况下,这种偏差可能并不重要,因为绝对值的变化可能无关紧要。

例如,如果一个时序的所有值在 (9.9, 10.1) 范围内均匀分布,则 expectedDeviation 将约为 0.1。如果 detectionPointForecast10.0,且 detectionPointActual10.3,则 anomalyScore3.0

如果大于绝对值的变化对您更重要,则可以使用噪声阈值来衡量异常得分,以便对变化低于该阈值的切片进行惩罚:

anomalyScore = (detectionPointactual - detectedPointForecast) / (expectedDeviation + noiseThreshold)

后续步骤