Какие классические подходы существуют для заполнения пропусков в матрице взаимодействий в рекомендательных системах
Что проверяют
Понимаете ли вы, что матрица взаимодействий почти пустая и пропуск в ней это не ноль, а неизвестность. Следом обычно спрашивают, чем явный фидбек отличается от неявного и как вы будете оценивать качество.
Как отвечать
Идите от простого к сложному:
- бейзлайны: глобальное среднее плюс смещения пользователя и объекта,
r = μ + b_u + b_i. Простая модель, которую остальные методы обязаны обыгрывать; - соседские методы: user-based и item-based kNN, сходство по косинусу или корреляции Пирсона на общих оценках. Item-based часто стабильнее: сходство объектов меняется медленнее, чем вкусы пользователей, и его можно пересчитывать реже;
- матричная факторизация: пользователь и объект получают векторы латентных факторов, оценка это их скалярное произведение. Обучают только на известных ячейках с регуляризацией, через SGD (FunkSVD, SVD++) или ALS;
- неявный фидбек: клики и просмотры не дают отрицательных примеров. Классика здесь implicit ALS с весами уверенности, BPR с попарной функцией потерь, линейные модели SLIM и EASE;
- NMF: факторизация с неотрицательными факторами, они проще интерпретируются.
Из инструментов назовите surprise для явных оценок, implicit для неявных, LightFM для гибрида с признаками. Контентные методы стоит упомянуть отдельно: они не заполняют матрицу, но выручают при холодном старте.
Оценка: для явных оценок RMSE, для ранжирования precision@k, recall@k, NDCG, MAP на отложенной выборке с разбиением по времени.
Где спотыкаются
Говорят, что к матрице применяют классическое SVD из numpy. Оно требует полной матрицы, пропуски придётся заполнить нулями или средним, и модель выучит именно эти подставленные значения.
Предлагают заполнять пропуски средним как рабочее решение. Это бейзлайн, а не метод: он не различает вкусы пользователей.
Путают неявный фидбек с явным: считают просмотр оценкой «5», а отсутствие просмотра оценкой «0». Отсутствие взаимодействия означает скорее «не видел», чем «не понравилось».