Какие типы рекомендательных моделей вы знаете?

«Какие типы рекомендательных моделей вы знаете?» — вопрос из категории Рекомендательные системы, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В моей практике построения рекомендательных систем я применял следующие основные подходы:

1. Коллаборативная фильтрация (Collaborative Filtering, CF): Рекомендации строятся на основе исторических взаимодействий пользователей с объектами (просмотры, покупки, оценки).

  • User-Based CF: «Найди пользователей, похожих на тебя, и порекомендуй то, что понравилось им». Уязвима к проблеме масштабируемости.
  • Item-Based CF: «Людям, которым понравился этот товар, также нравились вот эти». Более стабильна и широко применяется (например, в Amazon).
    # Упрощенный пример расчета схожести товаров (косинусная мера)
    from sklearn.metrics.pairwise import cosine_similarity
    item_similarity_matrix = cosine_similarity(user_item_matrix.T)  # Транспонируем для item-item

2. Контентная фильтрация (Content-Based Filtering): Рекомендации основаны на характеристиках (фичах) самих объектов и профиле предпочтений пользователя.

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import linear_kernel
# Создаем профиль товаров на основе текстовых описаний
tfidf = TfidfVectorizer(stop_words='english')
tfidf_matrix = tfidf.fit_transform(df['description'])
# Находим похожие товары для товара с индексом 0
cosine_sim = linear_kernel(tfidf_matrix[0:1], tfidf_matrix).flatten()

3. Матричная факторизация (Matrix Factorization): Сводит задачу к разложению матрицы взаимодействий R в произведение матриц пользовательских (P) и товарных (Q) латентных факторов: R ≈ P * Q.T.

  • SVD (Singular Value Decomposition), ALS (Alternating Least Squares): Классические методы.
  • Пример с библиотекой surprise:
    from surprise import SVD, Dataset, Reader
    reader = Reader(rating_scale=(1, 5))
    data = Dataset.load_from_df(df[['user_id', 'item_id', 'rating']], reader)
    algo = SVD(n_factors=100, n_epochs=20, lr_all=0.005, reg_all=0.02)
    algo.fit(data.build_full_trainset())

4. Гибридные модели: Комбинируют несколько подходов для компенсации их слабых сторон (например, CF + контентная фильтрация для решения проблемы холодного старта).

5. Нейросетевые архитектуры:

  • Two-Tower (Dual-Encoder): Отдельные нейросети для пользователей и товаров, обучаемые на задаче поиска похожих пар.
  • Wide & Deep (Google): Широкая часть для запоминания правил (например, co-visitation), глубокая — для обобщения.
  • Sequence-Based (BERT4Rec, SASRec): Используют трансформеры для учета последовательности действий пользователя.

В продакшене мы часто начинаем с item-based CF или матричной факторизации как с надежного бейзлайна, а затем экспериментируем с гибридными и нейросетевыми подходами для увеличения точности.