Ваши ненормальные значения ненормальны в том смысле, что
- значения сильно отклоняются от значений вокруг него
- значение меняется очень быстро от одного временного шага к другому
Таким образом, необходим фильтр, который смотрит на короткий временной контекст, чтобы отфильтровать их.
Одним из самых простых и эффективных является медианный фильтр .
filtered = pandas.rolling_median(df, window=5)
Чем длиннее окно, тем сильнее фильтр.
Альтернативой может быть фильтр нижних частот. Хотя установка соответствующей частоты среза может быть сложнее, и это наложит плавность на сигнал.
Конечно, можно также создать больше настраиваемых фильтров. Например, вычислите разницу первого порядка и отклоните изменения, превышающие определенный порог. Вы можете построить гистограмму различий, чтобы определить порог. Отметьте их как отсутствующие (NaN), а затем введите недостающие значения с использованием медианы / среднего.
Если вашей целью является обнаружение аномалий, вы также можете использовать автоматический кодировщик. Я ожидал бы, что выход PV будет иметь очень сильную дневную модель. Так что тренировка его на ежедневных последовательностях должна работать достаточно хорошо (при условии, что у вас достаточно данных). Это намного сложнее, чем простой фильтр, но имеет то преимущество, что он может обнаруживать и многие другие виды аномалий, а не только паттерн, указанный здесь.