Всем привет, с вами Павел Беляев, руководитель команды аналитиков в Яндекс eLama и автор курса «Временные ряды» 👋🏻
Немножко о базе, а точнее — о декомпозиции временных рядов. Что это такое и зачем оно нужно?
Вот перед нами график продаж и на нём ясно видно падение в январе. Это катастрофа? Или так было всегда? А может, это просто случайный выброс?
Чтобы ответить на этот вопрос, нужно понять, из чего вообще состоит любой временной ряд.
Подавляющее большинство рядов в «природе» можно разложить на компоненты. Разберём их на примере продаж интернет-магазина одежды
📈 Тренд — долгосрочное направление измеряемой величины
Если год за годом выручка растёт — это тренд вверх. Если аудитория постепенно уходит — тренд вниз. Тренд отвечает на вопрос: куда движется процесс в целом, если убрать все краткосрочные колебания?
Не следует принимать краткосрочный рост за тренд. Две недели роста после акции — это реакция на разовый шок, а не тренд. Эффект закончится — и ряд вернётся на прежний уровень.
📈 Сезонность — повторяющиеся колебания с фиксированным периодом
Продажи зимней одежды растут каждый октябрь-ноябрь и падают каждый март. И так каждый год. Причём сезонность прослеживается не только в рамках года, но и внутри недели — например, трафик-менеджеры пополняют рекламные сервисы чаще всего в понедельник.
Ключевое слово здесь — фиксированный период. Как правило, он привязан к календарю. Если вы знаете, что каждую пятницу трафик на сайте выше — это сезонность с периодом в одну неделю.
Так что не стоит паниковать из-за январского спада или праздновать декабрьский пик как собственную заслугу.
📈 Цикличность — колебания без фиксированного календарного периода
Звучит похоже на сезонность, но это другое. Экономические циклы, волны спроса, изменения потребительского поведения — всё это цикличность. Период может быть 2 года, а может 7 лет — заранее не угадаешь.
Именно поэтому цикличность сложнее всего выделить и спрогнозировать. Она прячется в данных и часто маскируется под тренд.
📈 Шум (остаток) — всё, что не объяснили первые три компонента
Внезапная публикация у блогера, сбой на сайте, праздник в конкретный вторник. Случайные, непредсказуемые отклонения.
Хороший аналитик стремится к тому, чтобы остаток представлял собой белый шум — без паттернов и без автокорреляции. Если в остатках ещё видна структура, значит модель что-то недоуловила и над её качеством нужно ещё поработать.
Почему это важно на практике?
Если смотреть на смешение всех этих компонентов, можно принять неверные выводы и решения:
— Реагируете на шум как на тренд → ненужные изменения в стратегии;
— Не видите сезонность → неправильное планирование запасов и бюджетов;
— Путаете цикл с трендом → ошибочные долгосрочные прогнозы.
Декомпозиция временного ряда — это первый шаг любого нормального анализа. Прежде чем строить модели, нужно понять что вообще происходит в ваших данных.
Как это делается технически?
В Python достаточно нескольких строк:
from statsmodels.tsa.seasonal import seasonal_decompose
result = seasonal_decompose(df['sales'], model='additive', period=12)
result.plot()
И вы получаете четыре отдельных графика: тренд, сезонность, остаток. То, что раньше выглядело как хаос, вдруг обретает структуру!
Это только первый шаг. Дальше — тесты на стационарность, выбор модели, прогнозирование.
📌 Всё это мы разбираем на курсе «Временные ряды» — от базовых понятий до прогнозирования с помощью Prophet и XGBoost, с практикой на реальных данных в Python. Присоединяйтесь!
📈 Изучить временные ряды: simulative.ru/time-series
📈 Симулейтив | 📱 ВК | 📱 YouTube | 📱 Канал о DS