Рекомендательные системы

Feature Engineering для рекомендаций

Цели урока

  • Разделить user features на сессионные и исторические и понять их динамику
  • Строить item features с дебиасингом position bias
  • Создавать cross features для линейных и нелинейных моделей
  • Использовать learned embeddings как dense признаки для ranking

Netflix в 2009 году выдал приз $1M за улучшение рекомендаций на 10%. Победившая команда Bell использовала не лучший алгоритм, а лучший feature engineering: временные паттерны, признаки взаимодействий, контекст просмотра. Сегодня Netflix оценивает, что хорошие признаки дают +40% к качеству по сравнению с базовыми.

  • **Netflix** - temporal features (время суток, день недели) улучшают предсказание лучше смены алгоритма
  • **Google Play** - Deep & Cross Network для автоматического feature crossing миллионов признаков
  • **Alibaba** - DIN (Deep Interest Network) использует attention over user history embedding

Предварительные знания

  • One-hot encoding и разреженные векторы
  • Embeddings и dot product
  • Линейные и логистические модели
  • Matrix Factorization
  • Candidate Generation

Factorization Machines и эпоха feature engineering

До глубокого обучения точность рекомендаций добывалась в основном из признаков, построенных вручную: feature crosses, перемножающие атрибуты пользователя и товара, бакетизированные счётчики и выученные embeddings для id высокой кардинальности. Беда в том, что число явных crosses взрывается, и большинство из них вообще не встречаются в данных, поэтому их веса невозможно обучить. В 2010 году Steffen Rendle представил Factorization Machines, которые дают каждому признаку латентный вектор и моделируют каждое попарное взаимодействие как скалярное произведение этих векторов. Это позволило модели оценивать силу взаимодействия даже для пар признаков, которые ни разу не встречаются вместе в обучении, решая проблему разреженности, калечившую самодельные crosses. Factorization Machines выиграли несколько соревнований Kaggle и KDD Cup и напрямую вдохновили более поздние гибриды вроде DeepFM, где FM-компонент и глубокая сеть делят одни и те же embeddings.

User Features: сессионные и исторические

Ranking модель видит пользователя как вектор признаков. Качество рекомендаций напрямую определяется тем, насколько хорошо этот вектор описывает текущие намерения пользователя. User features делятся на два типа с разной динамикой: **сессионные** (что пользователь делает прямо сейчас) и **исторические** (что он делал за последние дни и месяцы).

Сессионные признаки критичны для intent detection: пользователь, слушающий джаз утром, может слушать рок вечером. Модель без session features будет рекомендовать усредненное и потеряет текущий контекст.

Почему время суток лучше кодировать через sin/cos, а не как целое число 0-23?

Item Features: контентные и статистические

Айтем - трек, видео, статья - описывается двумя группами признаков. **Контентные** извлекаются из самого контента: жанр, темп, тональность, теги, длительность. **Статистические** - это агрегаты поведения пользователей: CTR за последние 7 дней, средний completion rate, количество добавлений в плейлист. Оба типа необходимы: контентные помогают при холодном старте, статистические - точнее ранжируют популярные айтемы.

Position bias - главная ловушка статистических признаков: CTR айтема зависит от его позиции в выдаче, а не только от качества. Модели, обученные без дебиасинга, учатся показывать то, что уже показывалось на первых позициях - и усиливают популярность популярного.

Зачем рекомендательной системе контентные признаки (жанр, темп аудио), если статистические (CTR, completion rate) дают точный сигнал качества?

Cross Features и Feature Crossing

Модель знает: пользователь слушает рок, и трек в жанре рок. Но отдельно эти признаки не передают взаимодействие. **Feature crossing** создаёт новый признак из комбинации двух: `user_genre=rock * item_genre=rock = 1.0`, что прямо кодирует «матч жанра». Это позволяет линейным моделям ловить нелинейные паттерны.

Зачем создавать cross feature `mobile_x_short_track` вместо того, чтобы передавать `device` и `duration` раздельно?

Embeddings как признаки

User ID и Item ID - это категориальные признаки с миллионами уникальных значений. One-hot кодирование создаст вектор в 100 миллионов измерений - это невозможно. **Embedding** сжимает каждый ID в плотный вектор малой размерности (32-512), где похожие сущности близко в пространстве. Этот вектор и является главным признаком для ranking модели.

Почему для User ID в рекомендательной системе используют learned embedding, а не one-hot кодирование?

Feature Engineering для рекомендаций

  • User features: сессионные (intent) + краткосрочные + долгосрочные исторические
  • Item features: контентные (холодный старт) + статистические (качество) + дебиасинг position bias
  • Feature crossing: явные комбинации для линейных моделей или FM/DCN для автоматического
  • Embeddings: User ID и Item ID в dense векторы 64-256 через two-tower обучение
  • Feature Store: centralized storage для online serving актуальных признаков

Связанные темы

Feature engineering - центральный компонент ranking этапа two-stage pipeline.

  • Candidate Generation — Кандидаты из retrieval обогащаются фичами перед передачей в ranking модель
  • Матричная факторизация — MF обучает item и user embedding, которые затем используются как признаки
  • Multi-Objective и Re-Ranking — Re-ranking использует те же признаки, добавляя diversity и бизнес-правила

Вопросы для размышления

  • Как обнаружить, что модель страдает от position bias, и как это измерить?
  • В каком случае sequence-based user embedding (BERT4Rec) лучше простого среднего по истории?
  • Как Feature Store должен обрабатывать обновление признаков при высоком трафике (>100K RPS)?

Связанные уроки

  • rec-09 — Кандидаты должны существовать до построения признаков
  • rec-04 — Плотные признаки питают глубокие модели ранжирования
  • rec-11 — Качество признаков проверяется через A/B-тесты
  • aie-09-embeddings — Эмбеддинги превращают категории в плотные признаки
  • prob-04-bayes — Target-кодирование опирается на байесовское сглаживание
  • stat-08-correlation
Feature Engineering для рекомендаций

0

1

Войти