如何检测整个系列相对于其他系列是否是异常值?

数据挖掘 分类 时间序列 离群值
2021-09-16 21:00:48

我有多个相同资产的价格系列,如下所示。

在此处输入图像描述

从视觉上看,很明显“A”系列(平线)是一个异常值,而“E”系列(带有锯齿形图案的线)也表现不同。

检测整个系列是否为异常值的最佳方法是什么?我应该研究某种分类模型吗?

2个回答

要考虑的一种方法是动态时间规整 (DTW),它测量时间序列之间的相似性。DTW 能够比较不同长度的时间序列,所得分数可用于确定样本中哪些序列最独特。您会在许多文章中发现 DTW 与 KNN 分类配合得很好(我个人可以证明该组合取得了成功),因此您可以编写一个脚本来计算 DTW 分数,然后找到距离最远的系列分数其他。

DTW 的一些介绍和有用的页面:

对于人类观察者来说,很明显“A”和“E”是不同的,因为与“B”、“C”和“D”相比,它们在幅度上表现出不同的模式。“E”的轨迹大部分看起来并没有什么不同,它只是以一定的间隔快速上下跳跃。

我的想法是在你的时间跨度内评估你的线在某些窗口的幅度。假设您将双小时振幅作为该窗口中图形的最高点和最低点之间的差,我们称之为A(t,l), 和 t 代表您的时间窗口的开始,以及 l指示线。然后,您可以在五行之间比较该值。

然后,您可以尝试设置不同的阈值,看看什么效果最好。仅查看此数据后,它将起作用:

  • 设置最小阈值tmin为了A, 在一些低值。低幅度,或0,在财务用例中可能总是错误的。
    这将检测到线“A”是异常值,因为A(t,a)=0<tmin
  • 设置差异阈值tdiff基于上一步中未过滤掉的所有行的值。您可能可以在这里使用标准偏差进行一些数学运算,或者像这样的启发式算法:如果A(t,l)>2mean(A(t,lall)).
    然后你可能会发现A(t,e) 远大于“B”“C”和“D”。

希望这可以帮助!