如何检测每个特征中的异常 - 时间序列

数据挖掘 时间序列 数据集 异常检测 数据框 异常
2022-03-15 01:38:12

我有一个包含 5 个特征的数据集,对应于 5 个传感器,每三秒测量一次加速器的状态。它的结构也是:

Sensor 1 | Sensor 2 | Sensor 3 | Sensor 4 | Sensor 5 | Label
   1.5       1.1        0.8        1.2        1.2       0
   1.2       1.4        1.4        1.4        1.1       0
   1.2       1.1        1.2        1.3        1.5       0

标签指示时间序列是异常(=1)还是非异常(=0)。我有一个异常检测任务,我选择的框架 ( 1 , 2 ) 给我一个长度为 3 的数组作为输出,其中我预测了标签:(0, 1, 0)。我通常使用异常检测框架,它给了我一个阈值,我可以很容易地将高于它的值标记为异常。

在这种特定情况下,使用这个长度为 3 的数组,假设我可以这样重写以下数据集是否正确?(真 = 异常,假 = 正常)

Sensor 1 | Sensor 2 | Sensor 3 | Sensor 4 | Sensor 5 |
 False       False      False     False       False    
 True        True       True      True        True    
 False       False      False     False       False     

那么,不是一次标记一个值,而是直接将所有时间序列标记为异常?

1个回答

我相信您所做的假设是不正确的(整行是否异常)。

为了彻底解释这一点,您需要知道您正在使用哪种算法来检测最终标签是否为01

对于异常检测,您可以将问题作为监督(几乎是分类问题)、无监督或半监督来处理。假设根据您的数据,您选择了无监督方法。

无监督异常检测

无监督异常检测具有过多的算法子集;基于距离、统计、分类、基于角度、DBscan、神经网络等。在这些子集之下是可以帮助检测异常值的算法,例如独特的 NN 架构等。

一些算法(我使用的大多数算法)具有某种形式的降维,例如 PCA。由于这个事实,很难掌握一个特定的列(例如Sensor 1,它本身是异常的)

更好地了解数据点如何/为什么被标记为异常的更好方法是绘制t-SNE图表。

如果您有兴趣我编辑我的答案以创建异常检测模型,该模型将数据点标记为异常(以及异常分数,以便您能够设置您的个人阈值)并绘制 t-SNE 图,让我知道。