сеньорчикОткрыть в Telegram
← вся теориятеория к собесу · Временные ряды

Временные ряды: с чего начинают

Зачем это спрашивают

Ряды - отдельный жанр DS: тут не работает половина привычных приёмов, начиная со случайного сплита. Первый вопрос собеса - «с чего начнёшь работу с рядом» - проверяет, есть ли у тебя ритуал разведки.

// Вторая проверка - уважение к наивному бейзлайну: «как вчера» бьёт удивительно много моделей.

Декомпозиция: тренд + сезонность + остаток

Ряд раскладывается на тренд, сезонность и остаток; STL-декомпозиция (seasonal-trend decomposition using loess) - первый взгляд на данные и проверка «модель ловит структуру». Сезонностей бывает несколько сразу: день недели, час дня, год, и поверх них календарные эффекты: праздники, промо.

Рост по понедельникам это сезонность, а не «рост бизнеса»: смешение тренда с сезонностью - классическая ошибка чтения ряда.

// Мультипликативная сезонность (колебания «в процентах от уровня») лечится логарифмом - становится аддитивной, и модели проще.

STL
робастная декомпозиция ряда на тренд/сезонность/остаток

Стационарность и автокорреляция

Стационарность - постоянство статистик во времени: среднее, дисперсия, автокорреляция. Классические модели (ARIMA) требуют её; приводят дифференцированием и преобразованиями.

ACF (autocorrelation function) - корреляция ряда со своими лагами: показывает память ряда и сезонность (пики на лагах 7, 24, 365). PACF (partial autocorrelation function) - «чистый» вклад лага, по нему выбирают порядок AR (autoregression).

// ACF - ещё и генератор фичей: где пики - там осмысленные лаги для ML-модели.

стационарность
статистики ряда не плывут во времени; надо ARIMA-семейству
ACF / PACF
корреляция с лагами / чистый вклад лага

Бейзлайны и подготовка сетки

Наивные бейзлайны обязательны: «как вчера», «как в прошлую неделю», скользящее среднее. Модель, не бьющая наивный прогноз, не нужна, а бьют его не все.

R² около единицы у прогноза «завтра ≈ сегодня» - не достижение: автокорреляция даёт это бесплатно. Сравнивай с наивным, а не с нулём.

// Пропуски и нерегулярная сетка выравниваются до моделирования: ресэмплинг к нужной гранулярности, явные решения по пустым периодам.

наивный прогноз
«как вчера»/«как неделю назад» - обязательная точка отсчёта

Как отвечать: «С чего начнёшь работу с новым временным рядом?»

С разведки, не с модели. STL-декомпозиция - вижу тренд, сезонности и насколько шумный остаток; ACF - память ряда и периоды сезонностей, заодно кандидаты в лаги. Накладываю календарь: праздники и промо объясняют половину «аномалий». Если колебания растут с уровнем - логарифмирую. И сразу ставлю наивные бейзлайны - «как вчера» и «как в прошлую неделю»: они зададут планку, ниже которой любая модель бессмысленна, и уберегут от радости по поводу R², который автокорреляция раздаёт бесплатно.

Ритуал разведки с обоснованием каждого шага и трезвость к метрикам - то, что отличает человека, прогнозировавшего живой спрос.

На чём валят

  • Радоваться R² ≈ 1 у прогноза «завтра ≈ сегодня» - сравнивай с наивным бейзлайном.
  • ARIMA по нестационарному ряду без дифференцирования.
  • Смешивать тренд и сезонность: рост по понедельникам - не «рост бизнеса».
  • Игнорировать праздники и промо - «аномалии» на самом деле календарь.

Проверьте себя

Пять вопросов из банка по этой подтеме. Всего их 13, остальные разбираются в тренажёре.

  1. #ts_foundations1 / 5
    Зачем раскладывать ряд на тренд, сезонность и остаток (декомпозиция)?
    A)Ради красивого графика для презентации — на саму модель прогноза это не влияет
    B)Чтобы удалить из ряда выбросы и очистить его от шума
    C)Понять структуру ряда и работать с компонентами отдельно — снять сезонность, смоделировать тренд, изучить остаток
    D)Чтобы превратить нестационарный ряд в стационарный одним лишь фактом разложения
    показать ответ и разбор
    +C)Понять структуру ряда и работать с компонентами отдельно — снять сезонность, смоделировать тренд, изучить остаток

    // разбор: Декомпозиция разделяет ряд на тренд, сезонную компоненту и остаток — это диагностика и подготовка: видно, есть ли рост, какова периодичность, что осталось в шуме. Компоненты моделируют отдельно (детренд, десезонализация), а на остатке проверяют, не осталось ли структуры. Выбросы она не чистит и стационарность сама по себе не гарантирует.

  2. #ts_foundations2 / 5
    Ряд с явным растущим трендом подали в ARIMA с порядком интегрирования d=0. Что не так?
    A)Ничего: ARIMA сама по себе автоматически убирает тренд независимо от заданного значения d
    B)Проблема лишь в том, что для трендовых рядов нужно обязательно брать на порядок больше обучающих данных
    C)D=0 просто немного замедлит обучение модели, но на качество итогового прогноза это никак не повлияет
    D)AR/MA-часть требует стационарности; при тренде нужно дифференцирование (d≥1), иначе оценки поедут
    показать ответ и разбор
    +D)AR/MA-часть требует стационарности; при тренде нужно дифференцирование (d≥1), иначе оценки поедут

    // разбор: Буква I в ARIMA — это дифференцирование (порядок d), которое как раз убирает тренд и приводит ряд к стационарному. С d=0 модель считает нестационарный ряд стационарным: оценки параметров и доверительные интервалы прогноза становятся невалидными, а прогноз систематически смещён. Для трендового ряда берут d=1 (или детрендинг) и проверяют остатки на стационарность.

  3. #ts_foundations3 / 5
    Что подсказывают графики ACF и PACF при подборе порядков ARMA?
    A)ACF и PACF — два взаимозаменяемых названия одного графика автокорреляции, и смотрят обычно один из них на выбор
    B)Оба графика показывают лишь наличие тренда в ряде и никак не помогают выбрать порядки p и q модели ARMA
    C)ACF помогает оценить порядок MA (q), PACF — порядок AR (p)
    D)ACF задаёт порядок дифференцирования d, а PACF напрямую определяет длину сезонного периода ряда
    показать ответ и разбор
    +C)ACF помогает оценить порядок MA (q), PACF — порядок AR (p)

    // разбор: ACF и частная автокорреляция PACF — диагностика ARMA. Резкий обрыв ACF после лага q при затухающей PACF указывает на MA(q); зеркально, обрыв PACF после лага p при затухающей ACF — на AR(p). Порядок интегрирования d определяют отдельно (тесты стационарности), сезонный период — по сезонным пикам ACF. Это подсказки, финальный выбор по AIC и остаткам.

  4. #ts_foundations4 / 5
    Что делает операция дифференцирования ряда (y_t − y_{t−1})?
    A)Сглаживает ряд скользящим средним, убирая из него весь высокочастотный шум отдельных наблюдений
    B)Убирает тренд, переходя к приращениям — часто делает нестационарный ряд стационарным
    C)Нормирует ряд в диапазон от нуля до единицы для удобства подачи его в модель прогноза
    D)Заполняет пропуски в ряде линейной интерполяцией между соседними известными точками наблюдений
    показать ответ и разбор
    +B)Убирает тренд, переходя к приращениям — часто делает нестационарный ряд стационарным

    // разбор: Дифференцирование заменяет уровни ряда приращениями y_t−y_{t−1}. Линейный тренд при этом исчезает (приращения около постоянной), и ряд часто становится стационарным — это буква I (integrated) в ARIMA. Сезонное дифференцирование (на лаг сезона) убирает сезонность. Это не сглаживание, не нормировка и не заполнение пропусков.

  5. #ts_foundations5 / 5
    Чем грозит избыточное дифференцирование (взяли d=2, хотя хватало d=1)?
    A)Ничем: лишнее дифференцирование безопасно и надёжнее убирает тренд из ряда
    B)Ряд станет строго возрастающим и потеряет всякую сезонность, которую потом уже не получится восстановить
    C)Модель начнёт требовать в разы больше обучающих данных, но качество прогноза при этом вырастет
    D)Раздувается дисперсия и вносится искусственная MA-структура — прогноз шумит, интервалы шире
    показать ответ и разбор
    +D)Раздувается дисперсия и вносится искусственная MA-структура — прогноз шумит, интервалы шире

    // разбор: Каждое дифференцирование усиливает шум: избыточное (over-differencing) раздувает дисперсию ряда и вносит искусственную отрицательную автокорреляцию первого порядка (лишнюю MA-компоненту), которой в данных не было. Прогноз становится шумнее, доверительные интервалы шире, модель усложняется без пользы. Признак — резкий отрицательный лаг 1 в ACF остатков. Берут минимальное d, проходящее тест стационарности.

дальше

Теорию прочитали. Навык ставится повторением

В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.