Компенсация тренда в моделях экспоненциального сглаживания

Фон

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

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

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

Теория модели линейного тренда Холта

Простое экспоненциальное сглаживание

Давайте начнем с повторения простого уравнения экспоненциального сглаживания:

Здесь ŷ_{t+1} — временной шаг, который мы прогнозируем, y_t — самое последнее наблюдаемое значение. временного ряда, ŷ_{t-1} – это предыдущий прогноз, а α – коэффициент сглаживания, который принимает значения 0 ≤ α ≤ 1.Мы видим, что прогноз представляет собой просто средневзвешенное значение ранее наблюдаемых значений, в этом суть экспоненциального сглаживания.

Приведенное выше уравнение можно переписать в компонентной форме:

Где hэто будущий временной шаг, который мы прогнозируем, и мы допускаем l_t= ŷ_{t+1}, чтобы явно продемонстрировать, что это компонент уровня. Если вы хотите узнать больше о простом экспоненциальном сглаживании, обратитесь к моей предыдущей статье здесь:



Добавление тренда

Как указывалось ранее, эта модель не имеет трендового или сезонного компонента и приводит к плоскому прогнозу (все прогнозы будут одинаковыми и равными самому последнему наблюдаемому значению). Поэтому в 1957 году Чарльз Холт расширил эту модель, включив в нее компонент тренда b_t:

Где b_t – компонент прогнозируемой тенденции,b_{t-1} – предыдущая прогнозируемая тенденция, а β – коэффициент сглаживания тренда, который может принимать значения 0 ≤ β ≤ 1.

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

Для этой модели нам нужно установить начальное значение для компонента тренда, общий выбор:

Где t — некоторый произвольный временной шаг во временном ряду. По сути, это всего лишь модель среднего прогноза.

демпфирование

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

Где значение ϕможет быть 0 ‹ ϕ ‹ 1. Причина, по которой он не может быть 0 или 1, заключается в том, что действительно происходит некоторое затухание. Если ϕ=1, то модель будет просто ванильным методом линейного тренда Холта.

Давайте теперь реализуем эту новую модель экспоненциального сглаживания на Python!

Реализация Python

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

Данные представляют собой набор данных о пассажирах авиакомпаний США и получены из Kaggle с лицензией CC0.

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

Подогнанную модель Холта можно дополнительно диагностировать, вызвав следующий метод для подогнанного объекта модели:

model_holt.summary()

Здесь smoothing_level относится к параметру уровня сглаживания, α, и очень велико, что указывает на очень частые изменения уровня. Однако значение smoothing_trend, которое относится к параметру сглаживания тренда, β, очень низкое, что означает, что тренд практически не меняется. Наконец, damping_trend, то есть ϕ,большой, указывает на то, что нам нужно прогнозировать на длительный срок в будущее, прежде чем мы сможем наблюдать растущую тенденцию затухания.

Резюме и дальнейшие мысли

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

Полный код, используемый в этой статье, можно найти на моем GitHub здесь:



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

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

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