Рассмотрим способ разложения временного ряда на трендовую, сезонную и остаточную составляющие. Под трендом понимаем общую закономерность ряда (изменение среднего значения со временем), под сезонностью — повторяющуюся закономерность в определенных периодах (чтобы говорить о сезонности, в датасете должно быть несколько периодов).
Для демонстрации загрузим набор данных о статистике пассажирских перелетов с 1949 по 1960 из библиотеки pmdarima:
Разложение на перечисленные выше составляющие можно произвести с помощью функции seasonal_decompose из модуля statsmodels.tsa.seasonal:
В атрибутах возвращаемого seasonal_decompose объекта хранятся нужные нам тренд, сезонность и остатки. Проверим, что разложение в сумме (так как модель аддитивная) дает исходный ряд (для наглядности отобразил ряд с первого заполненного члена, так как в результате подсчета составляющих по умолчанию получаются пропуски):
Тренд
Теперь подробнее рассмотрим составляющие разложения и попробуем получить их вручную. Тренд извлекается путем подсчета скользящих средних с центрированным окном. Сравните:
и
Ручной результат немного отличается ввиду использования в seasonal_decompose незначительно отличающейся функции свертки.
Сезонность
Автоматически полученная сезонность для всех компонентов такая:
Для получения сезонности вручную достаточно вычесть из исходного ряда тренд и получить среднее по "сезонным" периодам (в данном случае месяцам):
Остатки
Остатки получаем как разность между исходным рядом с одной стороны и трендом и сезонностью с другой:
А вот остатки, полученные с seasonal_decompose:
Можно заключить, что графики почти идентичны.