Многокомпонентный ряд по анализу временных рядов с применением Python к наборам финансовых данных
Исходный код этой статьи можно скачать с Github: Ссылка
Временная последовательность
Временной ряд - это ряд точек данных, индексированных во временном порядке. Разрешение временного ряда - это частота записи данных. Например, измерения частоты пульса (в единицах ударов в минуту) происходят с интервалом 0,5 секунды, так что продолжительность каждой серии составляет ровно 15 минут. Разрешение складских данных может быть разным в зависимости от частоты записи данных, например: секунда, минута, час и т. Д.
Паттерны временных рядов
Временные ряды обычно могут иметь разные формы и формы, но в целом временные ряды имеют 3 различных шаблона или компонента:
- Тенденция существует, когда наблюдается долгосрочное увеличение или уменьшение данных. Тренд может быть линейным или нелинейным.
- Шаблоны Сезонности возникают, когда на временной ряд влияют сезонные факторы, такие как время года или день недели. Сезонность всегда фиксированная и известная частота. Приведенные выше ежемесячные продажи противодиабетических препаратов показывают сезонность, которая частично вызвана изменением стоимости препаратов в конце календарного года.
- Шаблоны Цикл возникают, когда данные показывают подъемы и спады, которые не имеют фиксированной частоты. Эти колебания обычно связаны с экономическими условиями и часто связаны с «деловым циклом». Продолжительность этих колебаний обычно составляет не менее 2 лет.
- Случайный / необъяснимый - это оставшаяся часть временного ряда после тренда, сезонности и циклических тенденций, которые нельзя объяснить последовательным образом.
В этой статье мы собираемся рассмотреть сезонные тенденции в данных временных рядов. Циклическое поведение временного ряда будет обсуждаться в следующих статьях этой серии публикаций.
Декомпозиция паттернов с помощью 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 не содержат рекомендаций по инвестициям. Прошлые результаты не являются гарантией будущих результатов. Пожалуйста, проконсультируйтесь со своим финансовым консультантом, прежде чем принимать какое-либо инвестиционное решение. Инвестирование сопряжено с риском, и вы можете понести прибыль или убыток независимо от выбранной стратегии, включая диверсификацию и распределение активов. Упомянутые инвестиции могут подходить не всем инвесторам.
Все изображения созданы автором, если не указано иное.