从多元时间序列间隔中检测罕见事件

Posted

技术标签:

【中文标题】从多元时间序列间隔中检测罕见事件【英文标题】:Detecting rare incidents from multivariate time series intervals 【发布时间】:2011-04-19 19:43:31 【问题描述】:

给定传感器状态间隔的时间序列,如何实现一个分类器,该分类器从受监督的训练数据中学习,以根据一系列状态间隔检测事件?为了简化问题,传感器状态被减少到truefalse

更新:我在 Mining Sequences of Temporal Intervals 上找到了this paper (PDF),它解决了类似的问题。 Another paper (Google Docs) 关于在多元时间序列中挖掘分层时间模式采用了一种新颖的方法,但处理分层数据。

训练数据示例

以下数据是事件的训练示例,表示为随时间变化的图表,其中/¯¯¯\ 表示true 状态间隔,\___/ 表示传感器的false 状态间隔。

 Sensor   |  Sensor State over time
          |  0....5....10...15...20...25...  // timestamp
 ---------|--------------------------------
 A        |  ¯¯¯¯¯¯¯¯¯¯¯¯\________/¯¯¯¯¯¯¯¯
 B        |  ¯¯¯¯¯\___________________/¯¯¯¯
 C        |  ______________________________  // no state change
 D        |  /¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯
 E        |  _________________/¯¯¯¯¯¯¯¯\___

事件检测 vs 序列标签 vs 分类

我最初将我的问题概括为两类序列标记问题,但我的类别确实代表“正常操作”和罕见的“警报事件”,因此我将我的问题重新表述为事件检测。训练数据可用于“正常操作”和“报警事件”。

为了降低问题的复杂性,我已将传感器事件离散化为布尔值,但不必如此。

可能的算法

隐马尔可夫模型似乎是一种可能的解决方案,但它能够使用状态区间吗?如果序列标记器不是解决此问题的最佳方法,我们将不胜感激其他建议。

贝叶斯概率方法

传感器活动在一天中的不同时间会有很大差异(早上忙碌,晚上安静)。我最初的方法是在几天内测量正常的传感器状态,并按一天中的时间(小时)计算状态概率。在不太可能的时间超过“不可能阈值”的传感器状态的组合概率将表明发生了事件。但是,如果传感器嘈杂,这似乎会引发错误警报。我还没有实现这个,但我相信这种方法是有好处的。

特征提取

向量状态可以表示为在特定时间发生并持续特定持续时间的状态间隔变化。

struct StateInterval

    int sensorID;
    bool state;
    DateTime timeStamp;
    TimeSpan duration; 

例如。进程表中的一些状态间隔:

[ D, true, 0, 3 ]; [ D, false, 4, 1 ]; ...
[ A, true, 0, 12 ]; [ B, true, 0, 6 ]; [ D, true, 0, 3 ]; etc.

一个好的分类器会考虑状态值区间和最近的状态变化,以确定状态变化的组合是否与某个类别的训练数据非常匹配。

编辑:关于如何从多个传感器的警报数据中提取特征以及如何将其与以前的数据进行比较的一些想法......

首先计算每个传感器在一天中每个小时的以下数据:

平均状态间隔长度(对于truefalse 状态) 状态变化的平均时间 状态随时间变化的次数

然后可以将每个传感器与矩阵中的每个其他传感器进行比较,数据如下:

传感器 B 在传感器 A 更改为真实状态后所需的平均时间。如果平均值是 60 秒,那么等待 1 秒会比等待 120 秒更有趣。 当传感器 A 处于一种状态时,传感器 B 经历的平均状态变化次数

给定两组训练数据,分类器应该能够从这些特征集中确定最有可能进行分类的类别。

这是一种明智的方法吗?比较这些特征的好算法是什么?


编辑:状态变化的方向(false->true vs true-false)很重要,因此任何功能都应考虑到这一点。

【问题讨论】:

"将一系列状态变化分类为两类".. 这两类的标准是什么? “考虑状态更改间隔”.. 这将需要每个状态更改的时间戳,而您的表格中没有提供。 我已将我的 Time 列澄清为时间戳而非持续时间。 @FreshCode:如果没有“不寻常”和“罕见事件”的精确定义,我不知道如何回答这个问题。也许这是你的问题?如何指定这两个模糊的概念? @Tergriver:在这种情况下,“罕见”和“正常”只是两个可能分类类别的标签。训练数据将可用于教导分类器哪些传感器数据最匹配其中之一。 显着改变了我的问题陈述,使其更笼统。 【参考方案1】:

一个简单的解决方案是折叠数据的时间方面并将每个时间戳作为一个实例。在这种情况下,传感器的值被视为您的特征向量,其中每个时间步都标记有类别 A 或 B 的类值(至少对于标记的训练数据):

   sensors      | class
A  B  C  D  E   |
------------------------- 
1  1  1  0  0   |  catA
1  0  0  0  0   |  catB
1  1  0  1  0   |  catB
1  1  0  0  0   |  catA
..

这个输入数据被馈送到通常的分类算法(ANN、SVM、...),目标是预测未标记时间序列的类别:

   sensors      | class
A  B  C  D  E   |
------------------------- 
0  1  1  1  1   |   ?
1  1  0  0  0   |   ?
..

降维/特征提取的中间步骤可以改善结果。

显然,这可能不如对序列的时间动态进行建模,特别是因为隐马尔可夫模型 (HMM) 等技术考虑了各种状态之间的转换。


编辑

根据您在下面的评论,似乎获得较少目标类临时预测的最佳方法是在预测阶段结束时应用后处理规则,并将分类输出视为一个序列连续预测。

它的工作方式是计算类的后验概率(即:实例属于每个类标签的概率分布,在二进制 SVM 的情况下很容易从决策函数导出),然后给定一个指定的阈值,您检查预测类的概率是否高于该阈值:如果是,我们使用该类来预测当前时间戳,如果不是,则保留先前的预测,未来实例也是如此。这具有给当前预测增加一定惯性的效果。

【讨论】:

尽管在我的特定用例中忽略时间序列并使用概率状态模型最终可能是最优雅的解决方案,但我还是特别要求对时间序列进行分类。状态变化的顺序很重要,因此应该推断传感器状态变化(与简单的状态值相反)不是条件独立的。 Kevin 已正确地将我的问题识别为序列标记问题。 我正在 SVM 上对此进行试验。我遇到的问题是某些传感器状态是暂时的,而另一些则更持久,如果暂时状态与更多事件重叠,它将被不同地分类。所以,我必须以某种方式“锁定”局部最大值和最小值,并使用这些状态。 @FreshCode:我添加了一条关于如何获得更“稳定”预测的注释 我最终在原型中使用了折叠状态值,但我想在未来实现时间序列。【参考方案2】:

这听起来不像是分类问题。分类器并不是真的要考虑“状态变化的组合”。这听起来像是一个序列标签问题。研究使用隐马尔可夫模型或条件随机场。您可以在 http://leon.bottou.org/projects/sgd 找到后者的有效实现。

编辑: 我已经更详细地阅读了你的问题,我不认为 HMM 是最好的模型,因为你想用特性做些什么。它会炸毁你的状态空间,并可能使推理变得棘手。你需要一个更具表现力的模型。你可以看看动态贝叶斯网络。他们通过允许以分解形式表示状态空间来概括 HMM。凯文墨菲的论文是我遇到的最全面的资源。

不过,我还是会喜欢 CRF。就像一个简单的起点一样,将一天中的时间和每个传感器读数定义为每次观察的特征,并使用二元特征函数。您可以从那里看到它的执行情况并增加功能的复杂性。我会从简单的开始。我认为您低估了您的某些想法实施的难度。

【讨论】:

+1 用于更准确地命名我的问题:序列标记。我正在研究 HMM。【参考方案3】:

为什么要重新发明***?查看TClass

如果这不适合您,您还可以找到许多指针。我希望这会有所帮助。

【讨论】:

嗯,没发现这个。不过,我必须使用 IKVM 从 C# 运行它。 C#中有类似的库吗? 什么是 C#?说真的,对于我们这些 COM 时代的幸存者来说,这是不受限制的东西(不是孩子,它不是 .com,而是 COM)。

以上是关于从多元时间序列间隔中检测罕见事件的主要内容,如果未能解决你的问题,请参考以下文章

用于罕见事件时间序列预测的LSTM模型体系结构

《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测

《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测

《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测

《异常检测——从经典算法到深度学习》13 MAD: 基于GANs的时间序列数据多元异常检测

《异常检测——从经典算法到深度学习》13 MAD: 基于GANs的时间序列数据多元异常检测