Эффективные методы освоения предварительной обработки временных рядов в критических сценариях

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

В то время как повторная выборка - это полуавтоматическая процедура, которая в лучших случаях может быть непосредственно получена из изучения частоты ряда, вменение недостающих данных является более важным. Выбор того или иного типа начинки может исказить наши выводы. Это особенно важно для временных рядов, где мы должны позаботиться о возможной временной зависимости при замене «NaN», чтобы получить наилучшие возможные результаты.

В этом посте мы представляем умную и эффективную альтернативу стандартным методам интерполяции для предварительной обработки временных рядов. Эти уловки полезны не только при наличии пропущенных значений, но и при наличии экстремальных событий в потоке данных, которые мы хотим смягчить. Пакет tsmoothie поможет нам выполнить эту задачу. Tsmoothie - это библиотека Python для сглаживания временных рядов и обнаружения выбросов, которая может обрабатывать несколько серий в векторизованном виде. Это полезно, потому что может предоставить все инструменты, необходимые для эффективной работы с предварительной обработкой временных рядов.

УСТАНОВКА ПРОБЛЕМЫ

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

Они представляют собой модель тренда с сезонностью 24 периода. С учетом этих данных мы вводим некоторые недостатки, заменяя интервалы наблюдения пропущенными значениями. Мы принудительно вводим отсутствующие интервалы данных, но это может быть обычным и неожиданным поведением, которое может присутствовать в нашем анализе. Напротив, еще одно неудобство появляется, когда мы наблюдаем период, характеризующийся сильной турбулентностью или необычными перерывами. Безопаснее всего было бы замаскировать эти значения и правильно их заполнить.

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

Наш рабочий процесс очень прост. Мы берем временной ряд и генерируем на нем несколько случайных пропущенных интервалов. Мы стремимся заполнить их наилучшим образом. Это сложная задача, потому что наши временные ряды имеют тенденцию и сезонность, которые мы хотим уважать. Нам необходимо использовать некоторые методы, которые могут наилучшим образом воспроизвести правильный узор. В конце мы проверяем качество нашей работы, вычисляя оценку ошибок, чтобы сравнить качество нашей начинки с истинной реальностью, которую мы ранее подвергали цензуре.

АЛГОРИТМЫ И ЭКСПЕРИМЕНТ

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

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

В нашем конкретном случае мы используем фильтр Калмана и представление в пространстве состояний для построения ненаблюдаемой компонентной модели. Все, что нам нужно сделать, это сделать несколько простых предположений о процессе обработки наших данных. Компонент тренда и простая сезонность из 24 периодов хороши для нас. На данный момент мы готовы «сгладить». Большим практическим преимуществом Kalman Smoother является то, что он может выполнять операции, не заботясь о пропущенных значениях. Эта характеристика оптимальна для нас, чтобы заполнить недостающие интервалы NaN с учетом особенностей наших данных.

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

В нашем случае мы используем разложение временных рядов для изучения тенденции и сезонности наших временных рядов, чтобы наилучшим образом восстановить недостающие части. Этот статистический метод требует, чтобы данные были в полном формате, то есть без «пробелов» из-за отсутствия информации. Таким образом, простая линейная интерполяция может изначально восполнить эти пробелы и позволяет нам выполнять разложение.

Мы экспериментируем с обоими процитированными алгоритмами на нашей смоделированной серии. Мы генерируем интервалы разной длины (100, 200, 300 шагов), состоящие из пропущенных значений, и пытаемся заполнить их методами, представленными выше и доступными в tsmoothie. В конце мы сравниваем восстановленные серии с исходными. Как и ожидалось, с меньшими интервалами пропущенных наблюдений мы можем достичь лучших характеристик реконструкции.

РЕЗЮМЕ

В этом посте мы представили некоторые эффективные методологии, которые следует учитывать при предварительной обработке данных временных рядов. Мы сосредоточились на случае, когда мы сталкиваемся с отсутствующими интервалами данных в потоке наших данных, и мы хотим эффективно восполнить этот пробел. То же самое применимо в случае, если мы сталкиваемся с «нестандартными» периодами, которые мы хотели бы замаскировать нормальным поведением. Приложения могут быть бесчисленными и настраиваемыми в зависимости от наших потребностей.

ПРОВЕРИТЬ РЕПО НА GITHUB

Оставайтесь на связи: Linkedin