如何检测水流时间序列中的离群峰?

问题描述 投票:2回答:1

TL; DR:需要处理水流时间序列,无法找出消除异常峰的方法。

我目前在一个项目中,在该项目中我收到包含两列的.csv数据集:

  • 日期,datetime时间戳记
  • 值,水流量值

此数据集通常是使用自动灌溉系统的管理实体的水流传感器的测量值的一年,其中包含约402 000原始值。有时候,它可能会有一些与浇水周期不对应的峰值,因为它是正常值之间的守时值,例如image

到目前为止,我已经尝试过计算两个点之间的百分比差异和间距,并计算中值绝对偏差(MAD),但是两者都捕获了误报。

这里的问题是,我需要一种算法,该算法可识别可持续1或2个测量值的自发峰,因为从物理上讲,在2分钟内流量不可能增加300%。

另一个问题是编码。需要有一种动态的方法来检测这些峰,因为根据整体dataset,我们清楚地知道原因:在夏天,流量增加到两倍多,不可能达到0.95%的百分率。

我已经使用上述技术和数据集的1天准备了一个github回购,这是我目前正在使用的回购(大约1000个值)。

python time-series detection
1个回答
0
投票

不是真正的答案,但评论太久:

也许您可以使用峰的prominence。您可以将find_peaksfind_peaksprominence参数一起使用,并尝试调整其他参数(例如窗口大小)以进行突出计算(width)。

以下快速示例仅说明用法。它只是发现峰的最小值最小为中位数的3倍:

wlen

from scipy.signal import find_peaks df = pd.read_csv('https://raw.githubusercontent.com/MigasTigas/peak_removal/master/dataset_simple_example.csv') peaks,_ = find_peaks(df.value, prominence=df.value.median()*3, width=(1,2)) ax = df.plot() df.iloc[peaks.tolist()].plot(style=['x'], ax=ax)

© www.soinside.com 2019 - 2024. All rights reserved.