Как работать с категориальными признаками в ранжировании
В модели есть категориальные признаки товара и пользователя. Как их кодировать и где возникают риски?
Ответить самому
Сначала сформулируйте ответ как на собеседовании, затем откройте разбор и оцените себя.
Короткий ответ
Для деревьев часто работают one-hot, count/frequency и target encoding с защитой от leakage. Для нейросетей - embeddings. Для high-cardinality признаков нужны smoothing, rare buckets, hashing или регуляризация.
Полный разбор
Выбор кодирования зависит от модели. Для бустинга можно использовать one-hot для малой кардинальности, count/frequency encoding, target encoding или встроенную обработку категорий, если библиотека ее поддерживает. Target encoding обязательно делается out-of-fold или по прошлым данным, иначе модель увидит таргет.
Для нейросетевых ранкеров обычно используют embedding table: id категории превращается в плотный вектор. Для редких значений нужен unknown/rare bucket, hashing trick, регуляризация и мониторинг новых категорий в проде. Иногда полезно добавить hierarchy: category, subcategory, brand, seller.
Риск в RecSys - popularity leakage и переобучение на частые категории. Поэтому кодирование надо проверять по time split и срезам: новые товары, новые продавцы, редкие категории, long tail.
Теория
Категориальный признак несет сильный сигнал, но легко превращается в leakage или memorization.
Типичные ошибки
- Делать target encoding на всей выборке сразу.
- Не иметь стратегии для новых категорий в проде.
- Путать category id как число с осмысленным числовым признаком.