Модуль III·Статья III·~3 мин чтения
Архитектуры для временных рядов и прогнозирование
Рекуррентные нейронные сети
Превратить статью в подкаст
Выберите голоса, формат и длину — AI запишет аудио
Архитектуры для временных рядов и прогнозирование
Временные ряды — финансовые данные, IoT-сенсоры, метеонаблюдения, энергопотребление — требуют специализированных архитектур. Нейронные сети конкурируют с классическими методами (ARIMA, ES) и часто превосходят их при достаточном объёме данных.
Специфика временных рядов
Ключевые свойства: Автокорреляция (значения зависят от прошлого). Тренд (долгосрочное направление). Сезонность (периодические паттерны: суточная, недельная, годовая). Нестационарность (статистика меняется во времени: среднее, дисперсия).
Препроцессинг: Нормализация: x̂ₜ = (xₜ − μ)/σ. Дифференцирование (устраняет нестационарность): Δxₜ = xₜ − xₜ₋₁. Сезонное дифференцирование: xₜ − xₜ₋ₛ. Log-трансформация: ln(xₜ) — стабилизирует дисперсию при мультипликативной сезонности.
Train/test split: Нельзя рандомно перемешивать! Только хронологическое разделение: train = первые 80%, test = последние 20%.
Seq2Seq для прогнозирования
Encoder-Decoder (Sutskever et al., 2014): Encoder (LSTM): обрабатывает входную последовательность (T шагов) → bottleneck вектор z = h_T. Decoder (LSTM): генерирует прогноз на H шагов, начиная с z.
Проблема: вся история сжимается в один вектор z — потеря информации для длинных историй. Решение: механизм внимания позволяет decoder «смотреть» на все шаги encoder.
Temporal Fusion Transformer (TFT, Lim et al., 2020): SOTA для многошагового прогнозирования временных рядов. Компоненты: Gated Residual Networks (GRN) для переменной важности признаков. LSTM для кратко- и долгосрочных паттернов. Temporal self-attention для выявления важных временных шагов. Quantile loss для предсказания интервалов неопределённости.
N-BEATS (Oreshkin et al., 2020)
Идея: Чистая нейронная сеть — без рекуррентности, без свёрток. Стек блоков: каждый блок предсказывает «компоненту» ряда и «остаток». Две архитектуры: Generic (без ограничений) и Interpretable (тренд + сезонность, как разложение Хольта-Уинтерса). Победитель M4 Competition (2018) с интерпретируемостью.
Блок N-BEATS:
- FC слои: xₜ → (θᵇ, θᶠ) (backcast и forecast параметры)
- Backcast: gb(θᵇ) — реконструкция входа (что блок «объяснил»)
- Forecast: gf(θᶠ) — прогноз блока
- Остаток: xₜ₊₁ = xₜ − gb(θᵇ) передаётся следующему блоку
PatchTST и трансформеры для рядов
PatchTST (Nie et al., 2023): разбиваем временной ряд на патчи (L последовательных точек). Каждый патч = «токен». Применяем трансформер. Patch позиционное кодирование. Эффективнее, чем применение трансформера к каждой точке — меньше токенов, лучше локальная семантика.
TimesNet (2023): преобразует 1D временной ряд в 2D «изображение» (используя периодичность) → CNN обрабатывает как изображение → SOTA на нескольких задачах.
Сравнение с классическими методами
ARIMA(p,d,q): p — AR порядок, d — порядок дифференцирования, q — MA порядок. Хорошо для стационарных рядов, малого объёма данных, интерпретируемости. Не масштабируется на тысячи рядов.
Prophet (Facebook, 2017): y(t) = trend + seasonality + holidays + ε. Trend: кусочно-линейный или логистический. Seasonality: Fourier ряды. Хорошо для бизнес-рядов с праздниками и изменениями тренда.
LSTM vs ARIMA: При > 500–1000 точках обучения LSTM обычно лучше. При малом объёме — классические методы конкурентоспособны. Ensemble (LSTM + ARIMA + Prophet) часто превосходит любой из методов в отдельности.
M4 Competition (2018, 100K рядов): Победитель — Exponential Smoothing + LSTM. Чистые нейронные сети (без ES) заняли только 5–6 место. Гибридный подход > чисто нейронный.
Численный пример
Прогноз потребления электроэнергии Австралии (часовые данные, 5 лет): 43800 точек.
SARIMA(2,1,2)(1,1,1,24): MASE = 1.24 (baseline). LSTM (2 слоя × 64, 72ч лаг): MASE = 1.08 (-13%). TFT: MASE = 0.96 (-23%). Ensemble (TFT + SARIMA): MASE = 0.89 (-28%).
MASE < 1 означает лучше naive seasonal (предсказываем то же, что вчера в то же время).
Задание: Используйте датасет M4 Competition (100K рядов разных частот). (1) Для 10 случайных месячных рядов: обучите SARIMA(1,1,1)(1,1,1,12) — автоматически через pmdarima. (2) Обучите LSTM с 12 лагами, 2 слоя × 64 нейрона. (3) Ensemble с весами 0.5/0.5. Оцените MASE на тестовой выборке (последние 18 точек). (4) Визуализируйте прогнозы на 6 случайных рядах — когда LSTM превосходит SARIMA, и наоборот?
§ Акт · что дальше