"Машинное обучение"
Обнаружение сезонности с помощью быстрого преобразования Фурье (БПФ) и Python
Быстрое определение сезонности с помощью БПФ в Python
Прогнозирование
Прогнозирование - это один из процессов прогнозирования будущего на основе прошлых и настоящих данных. Большая часть проблем прогнозирования связана с данными временных рядов (то есть, какова продажа продукта A в следующем месяце).
Некоторые проблемы легче предсказать, чем другие. Предсказуемость события или количества зависит от нескольких факторов, некоторые из которых:
- понимание факторов, способствующих результату;
- доступность данных;
- метод прогнозирования или алгоритм обучения.
Часто существует множество методов точного расчета прогнозов, хорошие прогнозы фиксируют подлинные закономерности и взаимосвязи, существующие в исторических данных, но не воспроизводят прошлые события, которых не произойдет. опять таки.
Сезонность и варианты использования
В данных временных рядов сезонность относится к наличию некоторых определенных регулярных интервалов или предсказуемых циклических изменений в зависимости от конкретных временных рамок (т.е. еженедельно, ежемесячно). Некоторые примеры сезонности - это более высокие продажи во время Рождества и более высокие заказы в праздничные дни.
Обнаружение сезонности в данных временных рядов может улучшить прогноз, выявить некоторые скрытые идеи и привести к пониманию и рекомендациям. В общем, прогноз данных временных рядов может быть представлен на;
где 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 может помочь нам уловить сезонность и может использоваться для разложения данных временных рядов. Метод БПФ также встроен в различные программные пакеты и может быть прост в использовании на любых языках программирования.
Спасибо за чтение и приятного обучения !!! Вы можете просмотреть записную книжку с полной реализацией кода здесь.