Из чего состоит ряд: тренд, сезонность, шум
Регрессия из прошлого модуля отвечала на вопрос «что влияет на метрику». Второй вопрос бизнеса — «а что будет дальше», и подставить в ту же регрессию время вместо фактора не выйдет. Линия на дашборде складывается сразу из нескольких движений: медленного роста, недельного цикла и случайных колебаний. Пока они не разделены, воскресный подъём легко принять за результат своей работы. Ползунки задают силу каждой составляющей, кнопка «разложить» показывает их по отдельности.
Верхняя линия — сумма трёх нижних. Бирюзовая поверх неё — тренд, оценённый скользящим средним по 7 дням.
Перед вами выручка по дням за три месяца — обычный график из отчёта. Линия идёт вверх, но дёргается: то подъём, то провал, и не сразу понятно, где закономерность, а где случайность. Первый шаг работы с рядом — не строить прогноз, а разобрать эту линию на части. Нажмите «разложить».
Что это значит
Первое, что стоит сделать с любой метрикой в динамике, — посмотреть на неё в разложении, а не в исходном виде. В pandas и statsmodels это одна строка: seasonal_decompose или STL. Дальше обсуждать «упало ли» имеет смысл только по тренду.
Период задаётся предметной областью, а не подбирается: для дневных данных это 7, для часовых — 24, для месячных — 12. Ошиблись с периодом — сезонность утечёт в остаток, и разложение станет бессмысленным.
Календарные эффекты сезонностью не описываются: 8 марта, чёрная пятница, перенос выходных. Они попадут в остаток и будут выглядеть выбросами, пока их не завести в модель отдельным признаком — этим займёмся в уроке про SARIMAX.
Где это встречается
Розница живёт недельным циклом: пятница и суббота дают заметно больше будней. Доставка еды — ещё и дневным: обеденный и вечерний пики.
Тренд и сезонность легко перепутать, если смотреть в короткое окно. Три растущих дня подряд внутри недельной волны — не тренд, а участок подъёма цикла.
Государственная статистика публикует показатели «с исключением сезонности» именно поэтому: без такой поправки сравнивать январь с декабрём бессмысленно, а решения принимаются по сравнению.
Определения
Когда метод врёт (допущения)
Разложение предполагает, что период цикла известен и постоянен. Плавающие праздники (Пасха, лунный календарь) и переносы выходных ломают эту предпосылку — их обычно вводят отдельными признаками.
Скользящее среднее как оценка тренда не определено на краях ряда: у первых и последних дней нет полного окна. Именно на краю прогнозисту нужнее всего, и именно там оценка тренда наименее надёжна.
Подробный разбор: математика и механизм (необязательно)
Классическое разложение скользящим средним — простейший из способов. STL (Seasonal-Trend decomposition using Loess) устроен гибче: тренд и сезонность оцениваются локальной регрессией итеративно, сезонная форма может медленно меняться со временем, а к выбросам метод устойчив. Для рядов длиннее пары лет обычно берут именно его.
Разделение на «тренд» и «сезонность» — это соглашение, а не свойство природы. Один и тот же ряд можно разложить по-разному, изменив длину окна: короткое окно отнесёт часть медленных колебаний к тренду, длинное — к остатку. Поэтому корректно говорить «тренд при таком-то сглаживании», а не «истинный тренд ряда».