Ответ вслух Senior Окна и сдвиги обновлено

Окна во временных рядах: ловушки

Вопрос

Какие ошибки чаще всего делают с shift и rolling на временных рядах и как их избежать?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Первое: данные должны быть отсортированы по времени, иначе shift и cumsum считают ерунду. Второе: если рядов несколько, все окна делаю через groupby, иначе значения перетекают между клиентами.

Что должно прозвучать в ответе

  • Не отсортированы данные по времени

  • Сдвиг через границы групп: нужен `groupby().shift`

  • Пропуски дат: окно по строкам вместо `"7D"` или `asfreq`

  • Утечка будущего: `center=True`, `shift(-1)`, окно, включающее текущий день

  • `min_periods` и NaN в начале ряда

  • MultiIndex после `groupby().rolling()`

Что могут спросить следом

  • Как построить признак «среднее за прошлую неделю» без утечки?
  • Как обработать дни без продаж: 0 или пропуск?

Разбор

Первое: данные должны быть отсортированы по времени, иначе shift и cumsum считают ерунду. Второе: если рядов несколько, все окна делаю через groupby, иначе значения перетекают между клиентами. Третье: пропуски дат. rolling(7) это семь строк, а не семь дней, поэтому либо достраиваю календарь через asfreq("D") или reindex с явным решением, ноль это или пропуск, либо беру окно "7D". Четвёртое, самое опасное для моделей: утечка будущего. center=True, shift(-1) и окно, включающее день прогноза, дают отличную валидацию и плохой прод, поэтому признаки строю как shift(1).rolling(7). И мелочи: NaN в начале ряда из-за min_periods и MultiIndex после groupby().rolling(), который надо сбросить перед присвоением.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.