STL (Seasonal and Trend decomposition using Loess) — один из фундаментальных инструментов анализа временных рядов. Метод разделяет ряд на три компоненты: тренд, сезонность и остаток. Это позволяет анализировать каждую составляющую независимо, строить более точные прогнозы и выделять аномалии.
С момента публикации оригинальной работы Cleveland et al. (1990) метод существенно развился. Современные расширения снимают большинство ограничений классической реализации: поддержку нескольких сезонных периодов, устойчивость к выбросам, работу с пропусками и нерегулярными рядами. Понимание этих расширений и их практических отличий позволяет выбирать правильный инструмент под конкретную задачу.
Классическая STL и ее ограничения
Классическая STL строит декомпозицию итеративно, поочередно обновляя сезонную и трендовую компоненты. Каждая итерация состоит из двух шагов:
- inner loop обновляет компоненты с фиксированными весами;
- 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 для снижения влияния выбросов.
Взаимодействие s-window и t-window нетривиально: слишком узкое t-window «вытягивает» тренд в сторону сезонности, занижая амплитуду сезонной компоненты. Обратная ситуация — широкое s-window при узком t-window — приводит к утечке тренда в остаток. Диагностика: после декомпозиции остаток не должен содержать автокорреляции на сезонных лагах (проверяется через ACF).
Где классическая STL начинает сбоить?
Классическая STL имеет четыре системных ограничения:
- поддерживает только один сезонный период;
- требует регулярного ряда без пропусков;
- аддитивная модель плохо работает с мультипликативной сезонностью (когда амплитуда сезонности растет пропорционально уровню ряда);
- граничные эффекты LOESS искажают декомпозицию на краях ряда.
Мультипликативную сезонность решают логарифмическим преобразованием перед декомпозицией. Граничные эффекты — расширением ряда или переходом на методы с явным граничным условием. Пропуски и несколько периодов требуют более глубоких расширений метода.

Рис. 1: Классическая STL-декомпозиция синтетического ряда с линейным трендом и годовой сезонностью. Видна чистая изоляция компонент при корректных параметрах
Современные расширения STL
Развитие метода шло в 3-х направлениях: поддержка сложной сезонности, регрессионный фреймворк для внешних регрессоров и улучшение робастности. Каждое из расширений решает конкретный класс практических задач и не является универсальной заменой классическому STL.
Ключевая тенденция последних лет — переход от чисто непараметрических методов к гибридным: комбинация LOESS-сглаживания с регрессионными компонентами, байесовскими приорами или матричными разложениями. Это позволяет получить более интерпретируемые результаты при меньшей чувствительности к гиперпараметрам.
MSTL: несколько сезонных периодов
MSTL (Multiple Seasonal-Trend decomposition using Loess) расширяет классический алгоритм на случай нескольких сезонных периодов. Метод разработан Bandara, Hyndman и Bergmeir (2021) и вошел в библиотеку statsmodels начиная с версии 0.14.
Алгоритм итеративно применяет одномерный 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 — предпочтительный режим по умолчанию.

Рис. 2: Сравнение стандартного и робастного STL на ряде с тремя выбросами. В стандартном режиме тренд искажен в точках выбросов; в робастном — выбросы изолированы в остатке, тренд остается гладким
Альтернативные методы декомпозиции
STL — это не единственный подход к декомпозиции временных рядов. Для задач, где STL показывает себя системно плохо, существуют методы с принципиально иными математическими основаниями. Понимание их механики позволяет выбирать инструмент осознанно, а не по принципу «используем то, что знаем».
Сравнение методов имеет смысл по 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 заметно точнее классификатора на сырых доходностях, особенно для активов с выраженной сезонностью объема.
Выбор параметров для биржевых данных
Выбор периода очевиден для данных с явной сезонностью (суточный цикл для внутридневных рядов). Сложнее — выбор ширины окна тренда. Слишком узкое окно превращает тренд в сглаженную версию цены, не отделяя его от цикла. Слишком широкое — делает тренд негибким и бесполезным для среднесрочных задач.
Практические рекомендации:
- для дневных данных акций t-window в диапазоне 121–251 (полгода–год) соответствует типичному горизонту среднесрочного тренда;
- для внутридневных данных (1m) t-window = 61–121 минута сохраняет внутрисессионный тренд без поглощения сессионной сезонности;
- s-window = «periodic» — разумный старт для стабильных сезонных паттернов (объем по дням недели); числовое s-window предпочтительно для паттернов, меняющихся со временем (волатильность по часам в разные рыночные режимы);
- robust=True по умолчанию для любых рядов с потенциальными выбросами — вычислительная стоимость минимальна, а защита от загрязнения тренда шумом существенна.
Диагностика качества декомпозиции строится на 3-х проверках:
- ACF остатка (не должно быть значимых пиков на сезонных лагах);
- распределение остатка (симметричность, отсутствие тяжелых хвостов при робастном режиме);
- визуальная проверка изоляции компонент.
Автоматический подбор параметров через минимизацию AIC остатка работает для прогностических задач, но не гарантирует интерпретируемую декомпозицию.

Рис. 4: Влияние параметра t-window на выделение тренда и остатка. Узкое окно (21) следует за краткосрочными колебаниями; широкое (251) выделяет долгосрочный тренд, перекладывая среднесрочные движения в остаток
Заключение
STL-декомпозиция прошла путь от единственного алгоритма к семейству методов с разными компромиссами. MSTL закрывает задачу множественных периодов, STR — задачу внешних регрессоров и пропусков, робастный режим защищает от выбросов без изменения архитектуры метода. HP-фильтр и TBATS занимают свои ниши там, где STL принципиально не подходит.
Декомпозиция — это инструмент для получения чистого тренда, изолированной сезонности и идиосинкратического остатка — это три независимых сигнала, каждый из которых несет информацию, недоступную в сыром ряду. Правильно параметризованная декомпозиция превращает многомерный хаос финансовых данных в структурированный набор компонент, пригодный как для интерпретации, так и для построения признаков в ML-задачах.