← Назад к вопросам
Что такое рекомендательные системы?
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
- Начни с Content-Based
- Добавь Collaborative, если есть данные
- Комбинируй методы
- Решай Cold Start через контент
- Борись с bias популярности
- A/B тестируй в production
- Мониторь diversity рекомендаций