Многокомпонентный ряд по анализу временных рядов с применением Python к наборам финансовых данных

Исходный код этой статьи можно скачать с Github: Ссылка

Временная последовательность

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

Паттерны временных рядов

Временные ряды обычно могут иметь разные формы и формы, но в целом временные ряды имеют 3 различных шаблона или компонента:

  1. Тенденция существует, когда наблюдается долгосрочное увеличение или уменьшение данных. Тренд может быть линейным или нелинейным.
  2. Шаблоны Сезонности возникают, когда на временной ряд влияют сезонные факторы, такие как время года или день недели. Сезонность всегда фиксированная и известная частота. Приведенные выше ежемесячные продажи противодиабетических препаратов показывают сезонность, которая частично вызвана изменением стоимости препаратов в конце календарного года.
  3. Шаблоны Цикл возникают, когда данные показывают подъемы и спады, которые не имеют фиксированной частоты. Эти колебания обычно связаны с экономическими условиями и часто связаны с «деловым циклом». Продолжительность этих колебаний обычно составляет не менее 2 лет.
  4. Случайный / необъяснимый - это оставшаяся часть временного ряда после тренда, сезонности и циклических тенденций, которые нельзя объяснить последовательным образом.

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

Декомпозиция паттернов с помощью Python

В этом разделе мы пытаемся разложить временной ряд на тренд, сезонность, цикл и случайные компоненты с помощью Python. statsmodels - это основной модуль Python для оценки множества различных статистических моделей, а также для проведения статистических тестов и исследования статистических данных [подробнее здесь]. Модуль анализа временных рядов statsmodels.tsa содержит классы моделей и функции, которые полезны для анализа временных рядов.

Среди других методов есть два основных метода декомпозиции сезонности: линейные модели, такие как statsmodels.tsa.seasonal.seasonal_decompose с аддитивными или мультипликативными моделями, и декомпозиция сезонных трендов с использованием LOESS с использованием statsmodels.tsa.seasonal.STL.

Модель seasonal_decompose использует скользящие средние для разложения сезонных трендов. Аддитивные модели имеют следующий формат:

Time Series = Trend + Seasonality + Residual

Модель мультипликативных временных рядов имеет следующий формат:

Time Series =  Trend * Seasonality * Residual

Аддитивная модель предполагает линейное поведение тренда, тогда как мультипликативная модель увеличивает или уменьшает амплитуду и / или частоту с течением времени. Преимущество seaonal_decompose model - объяснимость и постоянное извлечение паттернов. Этот метод представляет собой наивную декомпозицию, и часто более сложный метод, такой как STL , предпочтителен для декомпозиции временных рядов. Методы STL используют преимущества LOESS (локальной регрессии) - непараметрического метода, который использует локальную взвешенную регрессию для подгонки плавной кривой через точки на диаграмме рассеяния. Сезонная составляющая может изменяться со временем, и скорость изменения может регулироваться пользователем. Следующие ниже примеры демонстрируют обе вышеупомянутые обсуждаемые модели.

Пример 1. Данные о пассажирах авиакомпании

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

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

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

Пример 2: данные о ценах на природный газ

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

Функция STL использует LOESS (сглаживание локально оцененной диаграммы рассеяния) для извлечения оценок сглаживания трех компонентов. Ключевые входы в STL:

  • season: Длина сезонного сглаживания. Должно быть нечетное число.
  • period: Периодичность последовательности.

Сезонная разложенная тенденция цен на природный газ с использованием STL видна из следующего рисунка. Как видно, величина сезонности меняется и не является постоянной, в отличие от seasonal_decompose метода. На цены на природный газ, похоже, влияют сезонные тенденции в период 2000–2010 годов и самые низкие цены в 2012–2016 годах. Несколько фундаментальных факторов могут способствовать изменению сезонности цен на природный газ, например, увеличение добычи газа из сланцевых залежей.

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

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



Ключевые выводы

Анализ сезонности диаграммы может дать понимание при анализе временных рядов. Основной пакет для разложения временных рядов на сезонные и тренды - это Statsmodels. seasonal_deompose предполагает модель с определенной формулой (аддитивной или мультипликативной). STL methods использует преимущество LOESS (локальная регрессия) и является предпочтительным методом выбора для большинства задач анализа сезонности временных рядов. Следите за обновлениями и следите за нами, чтобы получать уведомления о будущих выпусках.

Больше от QuantJam





Спасибо за внимание! Меня зовут Амир Неджад, доктор философии. Я специалист по анализу данных и редактор журнала QuantJam, и мне нравится делиться своими идеями и сотрудничать с другими коллегами по анализу данных. Вы можете связаться со мной в Github, Twitter, и LinkedIn.

QuantJam:



Вы можете увидеть другие мои работы по адресу:



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

  • Хайндман, Р.Дж., и Атанасопулос, Г. (2018) Прогнозирование: принципы и практика, 2-е издание, OTexts: Мельбурн, Австралия.
  • Statsmodels: https://www.statsmodels.org/stable/index.html

О QuantJam

Quantjam - издательская компания среднего размера, цель которой - делиться воспроизводимыми исследованиями, посвященными финансам и данным фондового рынка.

Подпишитесь на нас, чтобы быть в курсе всех статей и мероприятий: https://medium.com/quantjam

Отказ от ответственности

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

Все изображения созданы автором, если не указано иное.