Отфильтровать часть временного ряда без использования порога

У меня есть следующий временной ряд: введите здесь описание изображения

Что я хочу сделать, так это отфильтровать точки (возможно, присвоив им значение nan), которые я обвел оранжевым цветом. Предположим, что основная причина их отфильтровать заключается в том, что они не следуют общему шаблону остальных временных рядов и имеют очень разные значения. Есть ли какой-нибудь фильтр, например фильтр нижних частот или любая другая идея, которую можно применить для их фильтрации?

В этом случае вместо этого все было бы нормально, поэтому я не буду отфильтровывать какую-либо часть временного ряда:

введите здесь описание изображения

Поскольку меня интересует только часть временного ряда с красными точками, то есть та, которая показывает этот конкретный шаблон, мне все равно, если в процессе фильтрации частей, обведенных оранжевым, также начало и конец временной ряд будет отфильтрован.

Причина, по которой я не хочу использовать порог, заключается в том, что диапазон значений различен для каждого временного ряда.


person Marco Miglionico    schedule 21.02.2019    source источник
comment
Разве не будет неявного порога при использовании любого фильтра?   -  person gaganso    schedule 21.02.2019
comment
Да, но основная проблема заключается в том, что каждый временной ряд имеет различный диапазон значений, поэтому я хочу найти что-то, что может сделать это без ручного выбора порогового значения для каждого временного ряда.   -  person Marco Miglionico    schedule 21.02.2019
comment
Вас волнует живая фильтрация поступающих данных? или у вас уже есть все данные и вы хотите сделать фильтрацию постов?   -  person ohlr    schedule 21.02.2019
comment
У меня есть окно данных, подобное тому, которое вы видите, поэтому мне просто нужно выполнить фильтрацию сообщений.   -  person Marco Miglionico    schedule 21.02.2019
comment
Есть ли периодичность в ваших данных?   -  person ohlr    schedule 21.02.2019
comment
Да, этот повторяющийся шаблон, который вы видите, имеет более или менее одинаковую продолжительность каждый раз   -  person Marco Miglionico    schedule 21.02.2019


Ответы (1)


Итак, поскольку ваши данные являются периодическими, вы можете попытаться подобрать комбинацию нескольких синусов в ваши данные.

Как показано здесь, любая осциллирующая функция может быть аппроксимирована через Комбинация синусоидальных функций.

Итак, что вам нужно сделать, это анализ Фурье.


Кроме:

Что я могу придумать, так это вычислить среднее значение за относительно длительный период. Затем вы можете указать интервал вокруг этого среднего значения. Все, что находится за пределами этого интервала, указывается как выброс.

Вы также можете использовать фильтр Калмана. В предположении, что ваши данные постоянны + некоторый гауссовский шум. Затем он всегда адаптируется к новому уровню и какое-то время остается постоянным.

Учебник по фильтру Калмана

person ohlr    schedule 21.02.2019
comment
Да, единственная проблема, которую я вижу в вашем подходе, заключается в том, что, возможно, на среднее значение слишком сильно повлияют начало и конец временного ряда с низкими значениями. - person Marco Miglionico; 21.02.2019
comment
Например, вы можете аккумулировать данные с течением времени и создать гистограмму. Тогда у вас будет пара пиков на гистограмме с большим количеством данных. и некоторые промежуточные точки с очень небольшим количеством данных. - person ohlr; 21.02.2019