Классическая сезонная декомпозиция

Декомпозиция ряда продаж.

 

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

 

Процедура выделения неслучайных компонент модели из фактических данных называется декомпозицией.

 

Первое, чем мы займемся на наших данных — сезонная декомпозиция, т.е. определение числовых значений сезонных коэффициентов. Для определенности возьмем наиболее распространенный случай: данные о продажах сгруппированы помесячно (поскольку требуется прогноз с точностью до месяца), предполагается линейный тренд и мультипликативная сезонность с лагом 12. Другими словами, мы будем тестировать прогнозную модель вида

где Si - коэффициент сезонности месяца, соответствующего t

 

Сглаживание ряда

 

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

  • укрупнение временных интервалов. Очевидно, что ряд продаж, агрегированный помесячно, ведет себя более гладко, чем ряд, основанный на дневных продажах

  • скользящее среднее. Мы уже рассматривали этот метод, когда говорили о наивных методах прогнозирования

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

 

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

 

В качестве иллюстрации наш исходный ряд, сглаженный по 5 и 12 точкам:

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

 

К чему это я все веду?

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

 

Два момента, которые важно отметить.

 

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

 

На картинке результат повторного сглаживания:

 

Теперь делим факт на гладкий ряд:


 

К сожалению, у меня были данные лишь за 36 месяцев, а при сглаживании по 12 точкам один год, соответственно, теряется. Поэтому на данном этапе я получил коэффициенты сезонности лишь по 2 на каждый месяц. Но делать нечего, это лучше, чем ничего. Будем усреднять эти пары коэффициентов:

 

Теперь вспоминаем, что сумма мультипликативных коэффициентов сезонности должна быть =12, поскольку смысл коэффициента — отношение продаж месяца к среднемесячному. Именно это делает последняя колонка:

 

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

 

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


 

Выводы.

 

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

 

Для более точного определения сезонности при помощи классической декомпозиции весьма желательно иметь не менее 4-5 полных циклов данных, так как один цикл не участвует в вычислении коэффициентов.

 

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

In reply to by Karina83

Линия тренда  задается уравнением Y=K*x+B

K - определяет наклон линии. В эксель определяется формулой =НАКЛОН("массив известных значений Y";"массив известных значений X")

В - определяет начальное смещение. В эксель определяется формулой =ОТРЕЗОК("массив известных значений Y";"массив известных значений X")

далее по формуле Y=K*x+B строим линию тренда

In reply to by Karina83

значит только то, линия тренда пересечет ось OY  в точке ниже нуля (-950), и больше ничего не значит.

постройте саму линию  тренда, если она пересечет график исходных данных примерно посередине (на глазок), то формулы введены верно.

Другая проверка - построить ТЕНДЕНЦИЮ, как предложил Валера, и в идеале обе линии тренда должны совпасть.

 

In reply to by Karina83

Классная статья, Стас! Только очищенный от сезонности ряд - по ходу, "колбасит" сильнее чем исходный! ;)

Подскажите, откуда взялись данные для уравнения линейного тренда? Заранее спасибо. Очень полезный сайт.

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

Линия тренда  задается уравнением Y=K*x+B

K - определяет наклон линии. В эксель определяется формулой =НАКЛОН("массив известных значений Y";"массив известных значений X")

В - определяет начальное смещение. В эксель определяется формулой =ОТРЕЗОК("массив известных значений Y";"массив известных значений X")

далее по формуле Y=K*x+B строим линию тренда

Сами значения гораздо проще получить, сразу воспользовавшись функцией Excel "ТЕНДЕНЦИЯ".

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

Их есть у меня: upravlenie-zapasami.ru/excel/index.html#prognoz :)

In reply to by RazVal

Классная статья, Стас! Только очищенный от сезонности ряд - по ходу, "колбасит" сильнее чем исходный! ;)

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

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