blog details

 

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

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

Что такое анализ временных рядов?

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

Временные ряды. Анализ или прогнозирование?

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

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

К задаче прогнозирования временного рядя и будущих тенденций аналитик подходит на основе анализа и понимания исторических закономерностей временного ряда.

Таким образом, описание и прогнозирование временных рядов идут рука об руку опираясь друг на друга.

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

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

Составляющие временного ряда

Любой временной ряд состоит из нескольких составляющих, которые могут быть полезными для анализа и прогнозирования временных рядов. Этот процесс называется декомпозиция временного ряда.

На интуитивном уровне мы с вами сразу можем предположить что у временного ряда есть две основные составляющие

  1. Системная составляющая, а именно когда временной ряд ведёт себя предсказуемо. Хороший пример температура воздуха на улице в течение года. Мы смело можем сказать что в течение года она очень даже предсказуема.
  2. Не системная составляющая - это какое-то аномальное поведение нашего временного ряда. Например, заморозки в конце весны или оттепель в начале февраля.

Таким образом в теории временной может быть декомпозирован (описан) пятью основными составляющими:

  1. Уровень - наиболее частое значение показателя. Обычно это средняя или медиана.
  2. Тренд - это некая линия описывающая направление изменения временного ряда во времени. Тренд  может быть восходящий, нисходящий или же нейтральный.
  3. Сезонность - это повторение изменения временного ряда с каким-то постоянством таким как месяц или год. Сезонность обязательно имеет заранее определенный временной шаг и повторяется постоянно.
  4. Шум - это некие нерегулярные отклонения временного ряда, которые не могут быть объяснены трендом, сезонностью, уровнем или цикличностью. В идеале аналитики стремятся снизить значение шума, но обычно это возможно до определенного уровня, после чего модель становится либо очень сложной, либо нужно вводить разовые или случайные события.
  5. Цикличность - это определенное поведение временного ряда, которое повторяется в большой промежуток времени, который не всегда можно определить с полной уверенностью. Хороший пример это экономические циклы от кризиса, до восстановления, роста, стагнации и далее спади и новый кризис. На цикл могут уйти годы, но мы не знаем сколько, в отличие от сезонности погоды с которой нам всё более или менее понятно.

Сферы применения временных рядов

Анализ временных рядов применяется во многих сферах анализа, таких как:

  1. Прогнозирование погоды
  2. Прогнозирование продаж
  3. Прогнозирование стоимости акций
  4. Анализ рисков

И во многих других сферах, в том числе медицине, технологиях, социологии и других!

Напишите в комментариях в каких интересных сферах вы встречали анализ временных рядов.

Пример прогнозирования временного ряда на Python

Разберём пример прогнозирования временных рядов на Python на примере более или менее стандартного набора этапов анализа и прогнозирования временных рядов с использованием Python:

  1. Импорт библиотек и загрузка данных.
  2. Визуализация и описательный анализ данных.
  3. Анализ временного ряда
  4. Моделирование и прогнозирование временного ряда
  5. Оценка качества и визуализация прогноза.

Итак, приступим к анализу.

Импорт библиотек и загрузка данных

 Для начала импортируем библиотеки. Мне для анализа пригодились следующие наиболее распространенные библиотеки:

import pandas as pd
import numpy as np
import statsmodels.api as sm
import matplotlib.pyplot as plt
import statsmodels

Для примера возьмем надор данных с Kaggle по производству электричества, а также визуализируем заголовок данных, чтобы убедится в том что данные загрузились без ошибок.

df = pd.read_csv('Electric_production.csv',
                 index_col='DATE',
                 parse_dates=True)
df.head()
Вывод "шапки" данных в VS Code

Если дополнительно визуализировать концовку данных мы увидим, что данные представлены помесячно с 1985 по 2018 год. Дополнительно чтобы разобраться в наборе данных я переименовал столбец, проверил типы данных и вывел на экран описательную статистику с помощью функции describe().

df = df.rename(columns={'IPG2211A2N': 'Value'})
df.dtypes
df.describe()

Визуализация и описательный анализ данных

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

# Визуализация временного ряда
plt.figure(figsize=(15, 6))
plt.plot(df.index, df['Value'])
plt.title('Временной ряд')
plt.xlabel('Дата')
plt.ylabel('Значение')
plt.show()

 

График визуализации временного ряда с помощью Matplotlib.pyplot

Как видим у нас растущий тренд с постепенным угасанием роста.

Дополнительно построим диаграмму рассеяния

import seaborn as sns
# Диаграмма рассеяния
sns.scatterplot(x=df.index, y=df['Value'])
plt.title('Диаграмма рассеяния')
plt.xlabel('Дата')
plt.ylabel('Значение')
plt.show()

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

 

 

blog details

Комментариев: 0

Комментариев пока нет. Ваш может быть первым.

Добавить новый комментарий