Как учитывать сезонность в рекомендациях и прогнозах
Ты упомянул сезонность. Как с ней работать в фичах для рекомендационных систем, прогнозов или продуктовой аналитики?
Короткий ответ
Сезонность кодируют через календарные признаки, rolling statistics, события/праздники, time-aware embeddings и отдельную temporal validation схему. Главное — не считать агрегаты с заглядыванием в будущее.
Полный разбор
Можно начать с простых календарных признаков: час, день недели, месяц, праздник, рабочий/выходной, сезон, локальные события. Для ресторанов и e-commerce полезны промо, payday, погода, school holidays, спортивные события и локальные ограничения.
Дальше идут агрегаты: спрос по ресторану/категории/товару за прошлые окна, тренды, rolling mean, rolling conversion, freshness товара. Такие признаки нужно считать только из прошлого относительно момента предсказания.
Валидация должна быть temporal: train на прошлом, validation на будущем, иногда с gap между train и validation, если признаки используют скользящие окна. Иначе модель увидит будущие периоды через агрегаты.
Теория
Сезонность — это не один признак, а набор периодических и событийных факторов. Для RecSys она влияет и на пользователя, и на item supply, и на бизнес-метрики: например, пицца вечером, бизнес-ланчи днем, промо по праздникам.
Типичные ошибки
- Считать rolling features по всему датасету до split.
- Использовать random split для временного процесса.
- Не отделять глобальную сезонность от локальной сезонности ресторана/категории.
Как отвечать на собеседовании
- Обязательно произнеси temporal split и leakage.
- Приводи примеры из домена: ресторан, категория, гео, промо, доставка.