Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

Анализ сезонности во временных рядах преобразованием Фурье. Python.

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

Буду писать максимально просто, без формул. Если нужно более детальное описание — в конце статьи дан список ссылок.

Для начала смоделируем временной ряд. Предположим, что у нас есть данные о продажах за years = 3 года с периодом взятия выборки (семплирование) T = 1 день.

Если бы такой временной ряд был аналоговым (непрерывным) сигналом, то T — был бы период дискретизации. Именно с таким интервалом исходный сигнал перемножался бы на дельта-функцию (гребенки Дирака). В случае с временным рядом данные уже дискретные.

Предположим, что в графике продаж присутствуют следующие сезонные факторы:

  • Годовой — на Новый Год/Рождество продажи растут, люди затариваются подарками.
  • Квартальный — ежеквартально люди получают бонусы, у них появляется больше денег, и они склонны больше тратить.
  • Еженедельный — на субботу и воскресение продажи подрастают, поскольку люди склонны шататься по торговым центрам, закупаясь на неделю продуктами и параллельно заходя в смежные магазины.
  • Есть некоторый искажающий фактор (шум), влияющий на объем продаж.

Поскольку я хочу построить на Python красивый график временного ряда с отложенными по оси x датами, а не номером отсчета, то временной ряд создам с помощью Pandas.DataFrame.

Я взял исходную дату 01.01.2017 в качестве начала временного ряда и добавил количество years = 3, задав частоту дискретизации freq = ‘D’ равной T = 1 день.

В случае с временным рядом, описывающим продажи за определенный промежуток времени, аналогом общепринятого в цифровой обработке сигналов промежутка в 1 сек., выступает весь интервал взятия выборок, т.е. SR = количеству дней за 3 года.

Фаза fi = pi/2 смещает максимальное значение на начало года, делая более физичным, поскольку максимум продаж приходится на дату в районе 1 января каждого года. Можно было вместо sin взять cos, чтобы не добавлять фазовый сдвиг.

Для аналогового сигнала, подвергающегося цифровой обработке, важен параметр N — количество отсчетов в последовательности. Например, частота дискретизации 44,1 кГц, но для обработки подали данные не за 1 секунду, а полсекунды, т.е. N = 44100/2 = 22050 шт. В моем случае N = SR.

Дискретное преобразование Фурье

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

Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

Преобразование Фурье из временной в частотную область

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

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

Нередко расширение (augmentation) временного ряда дополнительными рядами с некоторой матобработкой перед подачей на нейронную сеть позволяет существенно улучшить качество прогноза нейронкой. Поэтому предварительный анализ временного ряда различными преобразованиями, в т.ч. Фурье весьма полезны.

Как уже упоминалось ранее, частота дискретизации и длина входного массива равны: N = SR. Я воспользовался встроенными функциями Python numpy для дискретного преобразования Фурье. Поскольку сигнал действительный, то для ускорения использовалась функция rfft.

Амплитуда 0-й гармоники (постоянная составляющая — сдвиг по оси y) не требует преобразования по амплитуде. Амплитуду других гармоник необходимо умножить на 2, чтобы получить корректное значение амплитуды исходного гармонического сигнала.

Поскольку речь идет о временных рядах, а не о сигнале, использовать размерность Гц некорректно. В данном случае частота, равная 144, говорит не о 144 изменениях гармонической функции в секунду, а о 144 изменениях за период в 3 года.

Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

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

Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

Как видно по графику, на частоте, равной 144, выявлена гармоника с амплитудой 0.5, что соответствует заданной при моделировании временного ряда.

Если сделать преобразование Фурье для смешанного временного ряда, заменив аргумент на y_mix

Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

На спектре хорошо различима 0-я гармоника с величиной 6.5 и 3 другие гармоники. Если отбросить нулевую, то видно, что амплитуда самой низкой (годовая с частотой = 3) в районе 1, квартальная в районе 0.7 и недельная в районе 0.5 на фоне гармоник «белого шума» с низкой амплитудой.

Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

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

Так выглядит восстановленный сигнал с шумом без фильтрации.

Фильтруем шумы в частотной области, убрав гармоники с амплитудой меньше 70 (цифра в исходном ряде до деления амплитуды на N)

Теперь спектр сигнала чистенький, без вкраплений шума.

Преобразование Фурье в Excel Как Построить График • Выберите библиотеки Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

Важный момент. После преобразования Фурье помимо амплитуды и частоты сигнала для восстановления важна фаза.

Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

Значение фазы в преобразовании Фурье

Честно говоря, не понимаю, почему значения фазы получились такие. В исходном случае фазовый сдвиг для всех гармоник равен pi/2.

Знайка, самый умный эксперт в Цветочном городе
Мнение эксперта
Знайка, самый умный эксперт в Цветочном городе
Если у вас есть вопросы, задавайте их мне!
Задать вопрос эксперту
Нам требуется построить двумерную диаграмму рассеяния на плоскости , хотя у нас имеется 3 переменных производительность, температура и режим. Если же вы хотите что-то уточнить, я с радостью помогу!
Для построения диаграммы рассеяния в файле примера использована диаграмма График , т.к. шаг по Х у нас задан постоянным. В случае реальных данных (переменная Х является случайной величиной, а не жестко заданной, как в нашем примере) используйте диаграмму типа Точечная. В файле примера реализовано оба варианта.
Преобразование Фурье в Excel Как Построить График • Выберите библиотеки

MATLAB и быстрое преобразование Фурье

  • Годовой — на Новый Год/Рождество продажи растут, люди затариваются подарками.
  • Квартальный — ежеквартально люди получают бонусы, у них появляется больше денег, и они склонны больше тратить.
  • Еженедельный — на субботу и воскресение продажи подрастают, поскольку люди склонны шататься по торговым центрам, закупаясь на неделю продуктами и параллельно заходя в смежные магазины.
  • Есть некоторый искажающий фактор (шум), влияющий на объем продаж.

Диаграмма рассеяния ( scatter plot ) используется для отображения возможной взаимосвязи между двумя переменными. Диаграмма рассеяния незаменима при проведении корреляционного и регрессионного анализа.

Оставить отзыв

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