Временные ряды: с чего начинают
Ряды - отдельный жанр 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, остальные разбираются в тренажёре.
- Зачем раскладывать ряд на тренд, сезонность и остаток (декомпозиция)?A)Ради красивого графика для презентации — на саму модель прогноза это не влияетB)Чтобы удалить из ряда выбросы и очистить его от шумаC)Понять структуру ряда и работать с компонентами отдельно — снять сезонность, смоделировать тренд, изучить остатокD)Чтобы превратить нестационарный ряд в стационарный одним лишь фактом разложения
показать ответ и разбор
+C)Понять структуру ряда и работать с компонентами отдельно — снять сезонность, смоделировать тренд, изучить остаток// разбор: Декомпозиция разделяет ряд на тренд, сезонную компоненту и остаток — это диагностика и подготовка: видно, есть ли рост, какова периодичность, что осталось в шуме. Компоненты моделируют отдельно (детренд, десезонализация), а на остатке проверяют, не осталось ли структуры. Выбросы она не чистит и стационарность сама по себе не гарантирует.
- Ряд с явным растущим трендом подали в ARIMA с порядком интегрирования d=0. Что не так?A)Ничего: ARIMA сама по себе автоматически убирает тренд независимо от заданного значения dB)Проблема лишь в том, что для трендовых рядов нужно обязательно брать на порядок больше обучающих данныхC)D=0 просто немного замедлит обучение модели, но на качество итогового прогноза это никак не повлияетD)AR/MA-часть требует стационарности; при тренде нужно дифференцирование (d≥1), иначе оценки поедут
показать ответ и разбор
+D)AR/MA-часть требует стационарности; при тренде нужно дифференцирование (d≥1), иначе оценки поедут// разбор: Буква I в ARIMA — это дифференцирование (порядок d), которое как раз убирает тренд и приводит ряд к стационарному. С d=0 модель считает нестационарный ряд стационарным: оценки параметров и доверительные интервалы прогноза становятся невалидными, а прогноз систематически смещён. Для трендового ряда берут d=1 (или детрендинг) и проверяют остатки на стационарность.
- Что подсказывают графики ACF и PACF при подборе порядков ARMA?A)ACF и PACF — два взаимозаменяемых названия одного графика автокорреляции, и смотрят обычно один из них на выборB)Оба графика показывают лишь наличие тренда в ряде и никак не помогают выбрать порядки p и q модели ARMAC)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 и остаткам.
- Что делает операция дифференцирования ряда (y_t − y_{t−1})?A)Сглаживает ряд скользящим средним, убирая из него весь высокочастотный шум отдельных наблюденийB)Убирает тренд, переходя к приращениям — часто делает нестационарный ряд стационарнымC)Нормирует ряд в диапазон от нуля до единицы для удобства подачи его в модель прогнозаD)Заполняет пропуски в ряде линейной интерполяцией между соседними известными точками наблюдений
показать ответ и разбор
+B)Убирает тренд, переходя к приращениям — часто делает нестационарный ряд стационарным// разбор: Дифференцирование заменяет уровни ряда приращениями y_t−y_{t−1}. Линейный тренд при этом исчезает (приращения около постоянной), и ряд часто становится стационарным — это буква I (integrated) в ARIMA. Сезонное дифференцирование (на лаг сезона) убирает сезонность. Это не сглаживание, не нормировка и не заполнение пропусков.
- Чем грозит избыточное дифференцирование (взяли d=2, хотя хватало d=1)?A)Ничем: лишнее дифференцирование безопасно и надёжнее убирает тренд из рядаB)Ряд станет строго возрастающим и потеряет всякую сезонность, которую потом уже не получится восстановитьC)Модель начнёт требовать в разы больше обучающих данных, но качество прогноза при этом вырастетD)Раздувается дисперсия и вносится искусственная MA-структура — прогноз шумит, интервалы шире
показать ответ и разбор
+D)Раздувается дисперсия и вносится искусственная MA-структура — прогноз шумит, интервалы шире// разбор: Каждое дифференцирование усиливает шум: избыточное (over-differencing) раздувает дисперсию ряда и вносит искусственную отрицательную автокорреляцию первого порядка (лишнюю MA-компоненту), которой в данных не было. Прогноз становится шумнее, доверительные интервалы шире, модель усложняется без пользы. Признак — резкий отрицательный лаг 1 в ACF остатков. Берут минимальное d, проходящее тест стационарности.
дальше
Теорию прочитали. Навык ставится повторением
В Сеньорчике эта подтема идёт в ежедневных сессиях: движок возвращает её, пока ответы не станут уверенными, и ведёт прогресс отдельно по каждой подтеме. Теория внутри тоже бесплатна, лимит только на количество вопросов в день.