【问题标题】:How can I find collective anomalies for a data?如何找到数据的集体异常?
【发布时间】:2025-12-12 13:45:02
【问题描述】:

我有一个带有时间戳和值的数据。我需要使用无监督算法找到集体异常。

# DD MM YYYY HH mm 值 0 14 02 2014 14 27 51.846 1 14 02 2014 14 32 44.508 2 14 02 2014 14 37 41.244 3 14 02 2014 14 42 48.568 4 14 02 2014 14 47 46.714 5 14 02 2014 14 52 44.986 6 14 02 2014 14 57 49.108 7 14 02 2014 15 02 40.470 8 14 02 2014 15 07 53.404 9 14 02 2014 15 12 45.400 10 14 02 2014 15 17 43.216 11 14 02 2014 15 22 49.720 12 14 02 2014 15 27 46.370 13 14 02 2014 15 32 43.756 14 14 02 2014 15 37 47.582 15 14 02 2014 15 42 40.738 16 14 02 2014 15 47 51.216

我尝试使用 X 均值的多阶段聚类处理数值数据。但是这里的时间戳似乎令人困惑。任何帮助将不胜感激。

【问题讨论】:

  • 您能以数字格式分享您的数据吗?这样,任何想要解决这个问题的人都可以简单地复制/粘贴这些值,而不必从图像中输入它们。

标签: python anomaly-detection


【解决方案1】:

也许集群并不是解决这个特定问题的最佳方法。 我喜欢尽可能保持简单。

对于您的问题,我建议使用指数移动平均值平滑数据,测量滚动偏差,并在当前值与预期值相差太远时将条目标记为异常。

https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average

这是您的数据(标记为蓝色),上面绘制了指数移动平均值(alpha 为 0.5)。使用指数移动平均线的优势变得很明显,它允许数据逐渐变化,同时抑制任何突然的变化。

我会做什么:

  • 根据时间戳对数据进行排序
  • 应用指数移动平均线来获得曲线的连续近似值
  • 检查新/下一个值时,将其与 EMA 进行比较
  • 如果该值超出 [EMA - std_dev, EMA + std_dev] 那么您可以将其归类为异常

要调整的参数:

  • alpha(用于 EMA)
  • 使用 std_dev ?还是先将 std_dev 与某个系数相乘?

【讨论】: