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

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

  • Количественные соображения. При меньшем количестве выборок качество прогнозов, которые мы делаем, может значительно пострадать. Для составления точных прогнозов требуется приличное количество выборок, отражающих основные элементы временного ряда (тенденции, уровень, сезонность).
  • Агрегация: более высокий уровень агрегации обеспечивает более точные прогнозы просто потому, что агрегированные данные имеют меньшую дисперсию и, следовательно, меньший шум. Следовательно, следует помнить о прогнозах на очень детальном уровне.
  • Соображение об обновлении: это правило подходит для долгосрочных активаций, когда может потребоваться регулярное обновление прогнозов для сбора любой поступающей новой информации. Если частота обновления слишком грубая, иметь возможность фиксировать изменения в окружающей среде и их предполагаемое или непреднамеренное влияние на будущие прогнозы.
  • Рассмотрение горизонта: при определении проблемы необходимо также помнить о горизонте своего прогноза (будущее окно прогноза). Чем дальше человек уходит в будущее, тем более неуверенными он, вероятно, будет в своих прогнозах.

Чтобы прогнозы были точными, необходимо убедиться, что данные актуальны, точны и достаточно длинные (чтобы иметь возможность фиксировать все изменения в данных).

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

  • Уровень. Это базовый уровень временного ряда. Это дает базовую линию, к которой мы добавляем различные другие компоненты.
  • Тенденция. В долгосрочной перспективе это дает представление о том, движется ли временной ряд вниз или вверх.
  • Сезонность. Это закономерность во временных рядах данных, которая повторяется через определенный период времени.
  • Цикличность. Это также повторяющийся шаблон данных, который периодически повторяется.
  • Шум. Шум – это совершенно случайное колебание данных, и мы не можем использовать этот компонент для прогнозирования будущего. Это та составляющая данных временного ряда, которую никто не может объяснить и которая является совершенно случайной.

Чтобы извлечь различные элементы из временного ряда, можно выполнить декомпозицию временного ряда. Разложение может быть либо аддитивным, либо мультипликативным (т. е. различные компоненты могут быть либо добавлены, либо перемножены для получения исходного временного ряда).

import pandas as pd
import statsmodels.api as sm
from matplotlib import pyplot as plt
df = pd.read_csv('sales.csv')
df['time'] = pd.to_datetime(df['time'], format='%Y-%m')
df = df.set_index('time')
ad_decomposition = sm.tsa.seasonal_decompose(df.Sales, model='additive') #additive seasonal index
fig = ad_decomposition.plot()
plt.show()

Предварительная обработка данных временных рядов

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

  • Лечение отсутствующих значений

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

  1. Вменение среднего значения: вменение отсутствующих значений общему среднему значению данных.
  2. Последнее наблюдение переносится вперед: мы вменяем пропущенным значениям их предыдущее значение в данных.
  3. Линейная интерполяция. Вы рисуете прямую линию, соединяющую следующую и предыдущую точки отсутствующих значений в данных.
  4. Сезонная + линейная интерполяция. Этот метод лучше всего подходит для данных с трендом и сезонностью. Здесь отсутствующее значение вменяется средним значением соответствующей точки данных в предыдущем сезонном периоде и следующем сезонном периоде отсутствующего значения.

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

  • Обработка выбросов

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

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

  • Удаление выбросов — удаление выбросов из набора данных.
  • Ограничение выбросов — ограничение максимального и минимального значений в наборе данных предопределенным пороговым значением.
  • Биннинг

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