如何检测油箱上的事件

数据挖掘 时间序列 数据清理
2022-03-01 12:58:27

燃料行为

嗨,大家好。我不是数据分析师,我需要一些指导。我正在寻找一种方法来了解一段时间内燃料的事件,可能是一天或一个月等。如果消耗量像上图那样会很容易。

问题是我拥有的数据就像这张照片一样。 在此处输入图像描述

我需要承担燃料和可能的盗窃,考虑到我有虚假数据,这可能会上升或下降。我可以看到那些突然的变化是假的,因为它总是回到原来的值,主要的问题是我不知道他们会保持假多久。可能只是一点或 n 点的坏点。

那么,如何在不将错误计为事件的情况下检测这些事件(加油和可能的盗窃)?我可以在这里应用哪些算法或公式?

2个回答

欢迎来到 SO!看起来你有一个时间序列问题。通常,处理时间序列的第一步是考虑差异。让我们将的燃料水平您需要计算f(t)tdifffuel(t)=f(t)f(t1)

在此步骤之后,您可能会看到您识别为不良数据的峰值是异常值。例如,您可以通过查看低于和高于 2.5 个百分位或 5 个百分位的所有数据来检测这些。通常这需要一些仔细的分析工作,以确保您不会删除太多。一旦您确定了最佳可行百分位数是多少,您就可以对数据进行Winsorize

最后,您将查看结果分布底部的数据点。这些很可能是您认定为盗窃的点。

我希望这有帮助。

因此,正如我的评论所建议的那样,我认为有一种相对简单的方法可以解决这个问题。那是傅里叶变换。我现在回想起来,在频域中表示信号时,删除部分基于时间的信号很容易。因为只需对信号应用滤波器以去除信号中不需要的分量。在您的情况下,这些尖峰(突然变化)看起来像频域中的高频信号。所以理论上,您应该能够对转换后的数据应用低通滤波器以消除尖峰(假货),然后将滤波后的信号转换回时域。然后就像这样,您已经摆脱了数据中的所有这些突然变化。

重申。

  1. 使用傅里叶变换的一些变体将现有信号(您的数据)转换为频域。
  2. 对变换后的信号(变换后的数据)应用低通滤波器。请注意,您需要为低通滤波器选择合适的截止频率。这应该相对简单,因为您的大部分数据变化非常缓慢。

  3. 将傅里叶变换的逆变换应用于变换后的数据,以将其带回时域。你的峰值现在应该在你的数据中消失了。

这是一个非常简单的过程,使用 DSP 库的任何语言都只需要大约 3~4 行代码。