Простое и интуитивно понятное объяснение необходимости стационарности в моделировании временных рядов.

Введение

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

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

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

  • Что такое стационарный временной ряд
  • Как сделать временной ряд стационарным
  • Как проверить, что временной ряд действительно стационарен
  • Зачем нам нужен стационарный временной ряд

Если вы хотите узнать больше о временных рядах и прогнозировании в целом, обратитесь к книге, ссылку на которую я дал в разделе ссылок: «Принципы и практика прогнозирования».

Что такое Стационарность?

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

  • Постоянное отклонение во времени
  • Постоянное среднее во времени
  • Статистические свойства временного ряда не меняются

Например, рассмотрим зависимость количества авиапассажиров от времени, представленную ниже с помощью простого скрипта Python:

Данные получены из Kaggle с лицензией CC0.

Является ли этот временной ряд стационарным? Нет.

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

Создание стационарного временного ряда

Чтобы сделать временной ряд стационарным, мы можем применить преобразования к данным.

Разностное преобразование

Наиболее распространенным преобразованием является различение временного ряда. Это вычисление численного изменения между каждой последующей точкой данных. Математически это записывается так:

Где d(t) – это разница во времениt между точками данных y. (t) и y(t-1).

Мы можем построить разностные данные, используя метод pandas diff(), чтобы просто вычислить разностные данные как столбец нашего фрейма данных:

Стационарны ли данные? Нет.

Среднее значение теперь постоянно и колеблется около нуля. Однако мы можем ясно видеть, что дисперсия все еще увеличивается с течением времени.

Логарифмическое преобразование

Чтобы стабилизировать дисперсию, мы применяем преобразование натурального логарифма к исходным данным:

Колебания сейчас в постоянном масштабе, но тенденция все же есть. Поэтому теперь нам снова нужно применить разностное преобразование.

Логарифмическое и разностное преобразование

Применение как логарифмического, так и разностного преобразования:

Стационарны ли данные? Да!

Как мы видим, среднее значение и дисперсия теперь постоянны и не имеют долгосрочного тренда.

Тестирование на стационарность

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

Одним из таких методов является расширенный тест Дики-Фуллера (ADF). Это проверка статистической гипотезы, где нулевая гипотеза заключается в том, что ряд нестационарен (также известный как проверка единичного корня).

Пакет statsmodels предоставляет простую в использовании функцию для проведения теста ADF:

Запустив эту функцию, мы получим следующий вывод:

ADF Statistic: -2.717131
P-Value: 0.071121
Critical Values:
        1%: -3.48
        5%: -2.88
        10%: -2.58

Наше P-значение ADF (7,1%) находится между 5% и 10%, поэтому в зависимости от того, где вы устанавливаете свой уровень значимости, мы либо отвергаем, либо не можем отвергнуть нулевую гипотезу.

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

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

Тест ADF — не единственный доступный тест на стационарность, существует также Тест Квятковского-Филлипса-Шмидта-Шина (KPSS). Однако в этом тесте нулевая гипотеза состоит в том, что тренд является стационарным.

Чтобы узнать больше о процессе проверки гипотез, см. раздел ссылок.

Зачем нам нужна стационарность?

Вопрос по-прежнему заключается в том, зачем нам нужно обеспечивать стационарность нашего временного ряда?

Ну, есть несколько причин:

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

Заключение

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

Полный код, который сгенерировал данные, графики и тест ADF в этом посте, можно посмотреть здесь:



Ссылки и дополнительная литература

Свяжись со мной!

(Все эмодзи разработаны OpenMoji — проект эмодзи и иконок с открытым исходным кодом. Лицензия: CC BY-SA 4.0)