Современные методы STL декомпозиции (STL Decomposition)

STL (Seasonal and Trend decomposition using Loess) — один из фундаментальных инструментов анализа временных рядов. Метод разделяет ряд на три компоненты: тренд, сезонность и остаток. Это позволяет анализировать каждую составляющую независимо, строить более точные прогнозы и выделять аномалии.

С момента публикации оригинальной работы Cleveland et al. (1990) метод существенно развился. Современные расширения снимают большинство ограничений классической реализации: поддержку нескольких сезонных периодов, устойчивость к выбросам, работу с пропусками и нерегулярными рядами. Понимание этих расширений и их практических отличий позволяет выбирать правильный инструмент под конкретную задачу.

Классическая STL и ее ограничения

Классическая STL строит декомпозицию итеративно, поочередно обновляя сезонную и трендовую компоненты. Каждая итерация состоит из двух шагов:

  1. inner loop обновляет компоненты с фиксированными весами;
  2. outer loop пересчитывает веса наблюдений на основе остатков.

Схема итераций определяет баланс между гибкостью подгонки и устойчивостью к шуму. Метод параметризован через ширину окна LOESS для тренда (t-window) и сезонности (s-window). Выбор этих параметров напрямую определяет характер результата — и именно здесь начинаются практические сложности.

Алгоритм LOESS-сглаживания в основе STL

LOESS (Locally Estimated Scatterplot Smoothing) — непараметрический метод локальной полиномиальной регрессии. В каждой точке ряда строится полином степени 1 или 2, обученный на ближайших наблюдениях с трикубическими весами. Чем ближе наблюдение к целевой точке, тем больше его вес в локальной регрессии.

Ширина окна задается параметром bandwidth (доля наблюдений, участвующих в локальной регрессии):

  • Узкое окно — гибкое сглаживание, следующее за локальными колебаниями;
  • Широкое окно — жесткое, приближающееся к глобальному полиному.

Для тренда в финансовых данных типичный диапазон bandwidth: 0.2–0.5 от длины ряда.

Вычислительная сложность LOESS — O(n²) в наивной реализации. Современные реализации (statsmodels, R stl) используют аппроксимацию через B-сплайны, снижая сложность до O(n log n). Для рядов длиной более 10⁵ наблюдений это принципиально.

Параметры и их влияние на результат

Три основных параметра STL:

  • s-window — ширина окна LOESS для сезонной компоненты. Значение «periodic» фиксирует сезонность постоянной во времени. Числовое значение (нечетное, ≥ 7) позволяет сезонности эволюционировать;
  • t-window — ширина окна для тренда. Автоматически выбирается как наименьшее нечетное число, большее 1.5 × period / (1 − 1.5 / s-window), если не задано явно;
  • robust — булев флаг, включающий итерации outer loop для снижения влияния выбросов.
👉🏻  Чем отличается финансовый ML от других видов машинного обучения

Взаимодействие s-window и t-window нетривиально: слишком узкое t-window «вытягивает» тренд в сторону сезонности, занижая амплитуду сезонной компоненты. Обратная ситуация — широкое s-window при узком t-window — приводит к утечке тренда в остаток. Диагностика: после декомпозиции остаток не должен содержать автокорреляции на сезонных лагах (проверяется через ACF).

Где классическая STL начинает сбоить?

Классическая STL имеет четыре системных ограничения:

  1. поддерживает только один сезонный период;
  2. требует регулярного ряда без пропусков;
  3. аддитивная модель плохо работает с мультипликативной сезонностью (когда амплитуда сезонности растет пропорционально уровню ряда);
  4. граничные эффекты LOESS искажают декомпозицию на краях ряда.

Мультипликативную сезонность решают логарифмическим преобразованием перед декомпозицией. Граничные эффекты — расширением ряда или переходом на методы с явным граничным условием. Пропуски и несколько периодов требуют более глубоких расширений метода.

Классическая STL-декомпозиция синтетического ряда с линейным трендом и годовой сезонностью. Видна чистая изоляция компонент при корректных параметрах

Рис. 1: Классическая STL-декомпозиция синтетического ряда с линейным трендом и годовой сезонностью. Видна чистая изоляция компонент при корректных параметрах

Современные расширения STL

Развитие метода шло в 3-х направлениях: поддержка сложной сезонности, регрессионный фреймворк для внешних регрессоров и улучшение робастности. Каждое из расширений решает конкретный класс практических задач и не является универсальной заменой классическому STL.

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

MSTL: несколько сезонных периодов

MSTL (Multiple Seasonal-Trend decomposition using Loess) расширяет классический алгоритм на случай нескольких сезонных периодов. Метод разработан Bandara, Hyndman и Bergmeir (2021) и вошел в библиотеку statsmodels начиная с версии 0.14.

👉🏻  Прогнозирование трафика и конверсий сайта с помощью SVM, SVR (опорных векторов)

Алгоритм итеративно применяет одномерный STL для каждого сезонного периода. На каждой итерации из ряда вычитаются все сезонные компоненты, кроме текущей, и STL применяется к остатку. Процесс повторяется до сходимости. Итоговая декомпозиция:

y(t) = T(t) + S₁(t) + S₂(t) + … + Sₖ(t) + R(t)

где:

  • T(t) — тренд,
  • Sᵢ(t) — i-я сезонная компонента,
  • R(t) — остаток.

Практические применения MSTL: почасовые данные с суточной (period=24) и недельной (period=168) сезонностью, трафик сайтов с недельным и месячным циклами, внутридневные биржевые объемы с сессионной и недельной структурой. В отличие от TBATS, MSTL сохраняет интерпретируемость каждой компоненты и значительно быстрее в вычислении.

STR: регрессионный подход к декомпозиции

STR (Seasonal-Trend decomposition using Regression) — альтернативный фреймворк, предложенный Dokumentov и Hyndman. Вместо итеративного LOESS-сглаживания метод формулирует декомпозицию как задачу регуляризованной регрессии. Его формула:

min ‖y − Xβ‖² + λ₁‖D₁β_T‖² + λ₂‖D₂β_S‖²

где:

  • X — матрица дизайна,
  • β — вектор коэффициентов,
  • D₁ и D₂ — матрицы конечных разностей для тренда и сезонности,
  • λ₁ и λ₂ — параметры регуляризации.

Регуляризация через конечные разности штрафует за нерегулярность тренда (λ₁) и за изменчивость сезонного паттерна (λ₂). При λ₂ → ∞ сезонность вырождается в постоянную — поведение, аналогичное s-window=»periodic» в STL.

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

STL с робастным режимом и выбросы

Робастный STL (параметр robust=True) использует биквадратные веса в outer loop: наблюдения с большими остатками получают низкий вес при следующей итерации. Веса вычисляются как:

w(t) = (1 − (r(t) / 6MAD)²)² × I(|r(t)| < 6MAD)

где:

  • r(t) — остаток,
  • MAD — медианное абсолютное отклонение остатков,
  • I — индикаторная функция.

Эффект: выбросы изолируются в компоненту остатка и не искажают тренд и сезонность. Стандартный (нероботастный) STL с широкими окнами распределяет выброс между всеми компонентами, что маскирует аномалию и искажает тренд.

👉🏻  Анализ временных рядов с помощью нейросетей: полный обзор подходов

Число итераций outer loop по умолчанию: 0 (неробастный режим) или 15 (робастный). Увеличение числа итераций inner loop (по умолчанию 2) повышает точность при неробастном режиме, но почти не влияет на результат при включенной робастности. Для финансовых рядов с редкими, но значительными выбросами (флэш-креши, начало войн, значимые корпоративные события) robust=True — предпочтительный режим по умолчанию.

Сравнение стандартного и робастного STL на ряде с тремя выбросами. В стандартном режиме тренд искажен в точках выбросов; в робастном — выбросы изолированы в остатке, тренд остается гладким

Рис. 2: Сравнение стандартного и робастного STL на ряде с тремя выбросами. В стандартном режиме тренд искажен в точках выбросов; в робастном — выбросы изолированы в остатке, тренд остается гладким

Альтернативные методы декомпозиции

STL — это не единственный подход к декомпозиции временных рядов. Для задач, где STL показывает себя системно плохо, существуют методы с принципиально иными математическими основаниями. Понимание их механики позволяет выбирать инструмент осознанно, а не по принципу «используем то, что знаем».

Сравнение методов имеет смысл по 4-м осям:

  1. гибкость модели тренда,
  2. поддержка нескольких периодов,
  3. обработка пропусков,
  4. интерпретируемость компонент.

Ни один метод не доминирует по всем осям одновременно.

HP-фильтр и его связь со STL

Фильтр Ходрика–Прескотта (HP-фильтр) выделяет тренд как решение задачи минимизации. Его формула:

min_τ Σ(yₜ − τₜ)² + λ Σ(Δ²τₜ)²

где:

  • τₜ — трендовая компонента (близость тренда к исходному ряду),
  • λ — параметр сглаживания (штраф за кривизну тренда),
  • Δ² — оператор второй разности.

При λ = 0 тренд совпадает с исходным рядом; при λ → ∞ тренд вырождается в линейный. Стандартное значение λ = 1600 для квартальных данных, λ = 100 для годовых, λ = 129 600 для месячных.

Математически HP-фильтр эквивалентен кубическому сплайну со специфической регуляризацией и близок к STR с λ₂ → ∞ (постоянная сезонность). Отличие от STL: HP-фильтр не выделяет сезонную компоненту явно — он только разделяет ряд на тренд и цикл (y − τ). Для финансовых рядов HP-фильтр полезен именно как инструмент выделения циклической компоненты: отклонение цены от тренда служит мерой потенциала возврата к среднему.

👉🏻  Эконометрика в биржевой аналитике: современные подходы и методы

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

TBATS и работа со сложной сезонностью

TBATS (Trigonometric seasonality, Box-Cox transformation, ARMA errors, Trend, Seasonal components) — метод, ориентированный на ряды с дробными и множественными периодами. Сезонность представляется рядом Фурье конечной длины; количество гармоник подбирается автоматически по AIC.

Ключевые возможности TBATS:

  • поддержка нецелых периодов (например, 365.25 для дневных данных с учетом високосных лет);
  • автоматический подбор преобразования Box-Cox для стабилизации дисперсии;
  • моделирование ошибок через ARMA-компоненту;
  • корректная обработка нескольких периодов без итеративной схемы.

Недостаток TBATS — вычислительная стоимость подбора модели и слабая интерпретируемость компонент. Синусоидальное представление сезонности не дает прямого ответа на вопрос «каков типичный паттерн по дням недели?». Для задач прогнозирования TBATS конкурентоспособен; для анализа и инжиниринга признаков MSTL или STR все-же предпочтительнее.

Сравнительная таблица методов

Визуальное сравнение основных методов декомпозиции по ключевым характеристикам:

Сравнительные характеристики методов декомпозиции. Оценки отражают типичное поведение метода при стандартных настройках; конкретные реализации могут отличаться

Рис. 3: Сравнительные характеристики методов декомпозиции. Оценки отражают типичное поведение метода при стандартных настройках; конкретные реализации могут отличаться

Практическое применение в финансовых временных рядах

Финансовые ряды — сложный случай для декомпозиции: выраженный тренд нередко отсутствует, сезонность слабее и менее регулярна, чем в макроэкономических данных, а выбросы системны. При этом декомпозиция решает здесь конкретные задачи: детрендинг для оценки потенциала возврата к среднему, выделение сезонных паттернов объема и волатильности, построение признаков для ML-моделей.

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

👉🏻  Градиентный бустинг: концепция и механизм работы

Детрендинг и выделение циклической компоненты

Циклическая компонента (цена минус тренд) — основа большинства mean-reversion стратегий. HP-фильтр и STL дают схожие результаты для тренда при корректных параметрах, но STL позволяет дополнительно изолировать сезонную компоненту, что позволяет лучше видеть начало и конец циклов.

Для внутридневных рядов (1m, 5m, 15m баров) актуальна V-образная внутридневная структура объема и волатильности. Первые и последние 30–60 минут торговой сессии системно отличаются от середины дня. MSTL с периодами 390 (минуты в сессии) и 1950 (недельный цикл для 5-дневной недели) выделяет оба паттерна одновременно.

Детрендованный ряд используется как мера отклонения от «справедливого уровня»: статистически значимые отклонения остатка от нуля — потенциальные точки входа. Пороги устанавливаются через стандартное отклонение остатка, дополнительно нормированное на волатильность периода. Сигнал без нормировки на волатильность приводит к избыточным сделкам в периоды высокой дисперсии.

Построение признаков для ML-моделей

Декомпозиция создает 3 класса признаков, каждый из которых несет независимую информацию:

  • Трендовая компонента — направление и скорость долгосрочного движения. Производная тренда (разность соседних значений) как признак режима рынка;
  • Сезонная компонента — периодические паттерны. Значение сезонности в текущей точке как признак типичного поведения в данный момент периода;
  • Остаток — идиосинкратическое поведение, очищенное от структурных компонент. Автокорреляция и дисперсия остатка как меры неэффективности и режима волатильности.

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

Остаток STL — хороший кандидат для детекции аномалий: наблюдения с |R(t)| > 3σ могут соответствовать корпоративным событиям, ошибкам данных или реальным рыночным аномалиям. Классификатор на остатках STL заметно точнее классификатора на сырых доходностях, особенно для активов с выраженной сезонностью объема.

Выбор параметров для биржевых данных

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

👉🏻  Поиск аномалий в данных с Python

Практические рекомендации:

  1. для дневных данных акций t-window в диапазоне 121–251 (полгода–год) соответствует типичному горизонту среднесрочного тренда;
  2. для внутридневных данных (1m) t-window = 61–121 минута сохраняет внутрисессионный тренд без поглощения сессионной сезонности;
  3. s-window = «periodic» — разумный старт для стабильных сезонных паттернов (объем по дням недели); числовое s-window предпочтительно для паттернов, меняющихся со временем (волатильность по часам в разные рыночные режимы);
  4. robust=True по умолчанию для любых рядов с потенциальными выбросами — вычислительная стоимость минимальна, а защита от загрязнения тренда шумом существенна.

Диагностика качества декомпозиции строится на 3-х проверках:

  1. ACF остатка (не должно быть значимых пиков на сезонных лагах);
  2. распределение остатка (симметричность, отсутствие тяжелых хвостов при робастном режиме);
  3. визуальная проверка изоляции компонент.

Автоматический подбор параметров через минимизацию AIC остатка работает для прогностических задач, но не гарантирует интерпретируемую декомпозицию.

Влияние параметра t-window на выделение тренда и остатка. Узкое окно (21) следует за краткосрочными колебаниями; широкое (251) выделяет долгосрочный тренд, перекладывая среднесрочные движения в остаток

Рис. 4: Влияние параметра t-window на выделение тренда и остатка. Узкое окно (21) следует за краткосрочными колебаниями; широкое (251) выделяет долгосрочный тренд, перекладывая среднесрочные движения в остаток

Заключение

STL-декомпозиция прошла путь от единственного алгоритма к семейству методов с разными компромиссами. MSTL закрывает задачу множественных периодов, STR — задачу внешних регрессоров и пропусков, робастный режим защищает от выбросов без изменения архитектуры метода. HP-фильтр и TBATS занимают свои ниши там, где STL принципиально не подходит.

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