"Машинное обучение"

Обнаружение сезонности с помощью быстрого преобразования Фурье (БПФ) и Python

Быстрое определение сезонности с помощью БПФ в Python

Прогнозирование

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

Некоторые проблемы легче предсказать, чем другие. Предсказуемость события или количества зависит от нескольких факторов, некоторые из которых:

  1. понимание факторов, способствующих результату;
  2. доступность данных;
  3. метод прогнозирования или алгоритм обучения.

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

Сезонность и варианты использования

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

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

где Y - метрика; S представляет сезонность; T представляет тенденции; и е - член ошибки.

Ниже приведены некоторые ключевые варианты использования:

  • Поведение при пополнении счета;
  • Конкретная страница или поведение при просмотре приложения;
  • Прогнозирование продаж и спроса;
  • Прогноз температуры.

Существует множество подходов к обнаружению сезонности в данных временных рядов. Однако в этом посте мы сосредоточимся на БПФ (быстрое преобразование Фурье).

БПФ в Python

Быстрое преобразование Фурье (БПФ) - это алгоритм, который вычисляет дискретное преобразование Фурье (ДПФ) последовательности. Он преобразует сигнал из исходных данных, которые в данном случае являются временем, в представление в частотной области.

Проще говоря, преобразование Фурье берет временные данные, измеряет каждый возможный цикл и возвращает общий «рецепт цикла» (амплитуду, смещение и скорость вращения для каждого найденного цикла).

Давайте продемонстрируем это в реализации Python с помощью синусоиды.

Из сценария я сгенерировал синусоидальную волну продолжительностью 2 секунды и имел 640 точек (волна с частотой 12 Гц, дискретизированная с 32-кратным коэффициентом передискретизации, что составляет 2 x 32 x 10 = 640). Затем мы можем вычислить FT этих данных и визуализировать результат.

Из результата мы видим, что FT обеспечивает частотную составляющую, присутствующую в синусоиде. На следующем рисунке показано, как мы складываем несколько волн в одну и используем БПФ для обнаружения пика.

Чтобы дополнительно продемонстрировать, как FT может помочь в обнаружении сезонности, на следующем рисунке показано, как две разные волны объединяются и используются FT для обнаружения сезонности. FT генерирует два пика соответственно волне Гц.

Теперь давайте посмотрим, как это работает на реальных примерах использования. В этой демонстрации мы определим сезонность выбросов CO2 в природном газе.

Затем мы нормализовали оригинал путем вычитания методом median() и умножения на значение функции window (используя blackman для этих данных). Обратите внимание, что оконная функция должна соответствовать имеющемуся у вас набору данных. Для дальнейшего изучения доступных оконных функций вы можете обратиться к этому, чтобы изучить различные типы оконных функций.

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

На основе выходных данных мы можем увидеть сильные сигналы при x = 1,010, которые мы можем превратить в год, который составляет 0,99 года (или 11,89 месяцев, в зависимости от цели реализации).

Конец примечания

Как мы видим, FT может помочь нам уловить сезонность и может использоваться для разложения данных временных рядов. Метод БПФ также встроен в различные программные пакеты и может быть прост в использовании на любых языках программирования.

Спасибо за чтение и приятного обучения !!! Вы можете просмотреть записную книжку с полной реализацией кода здесь.