← Назад к вопросам

Что такое рекомендательные системы?

2.2 Middle🔥 191 комментариев
#Машинное обучение#Рекомендательные системы

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

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

Рекомендательная система — это приложение, которое предсказывает и предлагает релевантный контент пользователям. Используется в Netflix, Spotify, Amazon для увеличения engagement и revenue.

Основные подходы

1. Content-Based Filtering

Рекомендует товары, похожие на те, что понравились пользователю раньше:

from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer

movies = ['sci-fi action', 'sci-fi adventure', 'sci-fi thriller']
vectorizer = TfidfVectorizer()
vectors = vectorizer.fit_transform(movies)

# Если пользователю понравился первый фильм
user_likes = vectors[0]
similarity = cosine_similarity([user_likes], vectors)[0]
print(similarity.argsort()[::-1])  # Индексы похожих

Плюсы: Нет cold start, легко объяснить Минусы: Нужны качественные признаки, ограничена serendipity

2. Collaborative Filtering

Использует рейтинги от других пользователей:

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity

# Матрица рейтингов
ratings = np.array([
    [5, 4, 0, 2],
    [4, 5, 3, 0],
    [0, 4, 5, 3],
    [2, 3, 4, 5],
])

# Похожие пользователи
user_sim = cosine_similarity(ratings)
similar_users = user_sim[0].argsort()[-2::-1][:2]

# Рекомендуем товары от похожих
for u in similar_users:
    for item in range(4):
        if ratings[0, item] == 0 and ratings[u, item] > 3:
            print(f'Item {item}')

Плюсы: Работает без признаков, находит новое Минусы: Cold start problem, popularity bias

3. Matrix Factorization

Разложение матрицы рейтингов:

from surprise import SVD, Dataset

model = SVD()
model.fit(train_set)
prediction = model.predict(user_id=0, item_id=2)
print(prediction.est)

4. Гибридные подходы

final_score = 0.3 * content + 0.4 * collab + 0.3 * neural

Deep Learning

Neural Collaborative Filtering:

import tensorflow as tf
from tensorflow.keras import layers

user_in = layers.Input(shape=(1,))
item_in = layers.Input(shape=(1,))

user_emb = layers.Embedding(n_users, 50)(user_in)
item_emb = layers.Embedding(n_items, 50)(item_in)

user_vec = layers.Flatten()(user_emb)
item_vec = layers.Flatten()(item_emb)

x = layers.Concatenate()([user_vec, item_vec])
x = layers.Dense(128, activation='relu')(x)
x = layers.Dense(64, activation='relu')(x)
out = layers.Dense(1)(x)

model = tf.keras.Model([user_in, item_in], out)
model.compile('adam', 'mse')

Метрики

  • NDCG (Normalized Discounted Cumulative Gain) — качество ранжирования
  • Recall@K — процент релевантных в топ-K
  • Precision@K — точность в топ-K
  • MAP (Mean Average Precision) — средняя точность

Best Practices

  1. Начни с Content-Based
  2. Добавь Collaborative, если есть данные
  3. Комбинируй методы
  4. Решай Cold Start через контент
  5. Борись с bias популярности
  6. A/B тестируй в production
  7. Мониторь diversity рекомендаций