← Назад к вопросам
Как будешь выполнять задачу создания рекомендательной ленты для приложения?
1.8 Middle🔥 231 комментариев
#Машинное обучение
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как будешь выполнять задачу создания рекомендательной ленты для приложения?
Создание рекомендательной ленты — комплексная задача, требующая системного подхода. Я бы выполнял её в следующей последовательности:
1. Уточнение требований и анализ
Первый этап — понимание задачи:
- Какой контент рекомендуем? (товары, контент, люди)
- Какая целевая аудитория и метрики успеха? (CTR, conversion, time-on-page)
- Какие ограничения по latency? (real-time vs batch)
- Есть ли данные о user-item взаимодействиях?
- Какой объём трафика и данных?
2. Сбор и подготовка данных
Соберу исторические данные:
- User interactions (views, clicks, likes, purchases, time spent)
- Item features (категория, теги, автор, дата создания)
- User features (демография, история поведения, предпочтения)
- Контекстная информация (платформа, время дня, сезонность)
# Пример структуры данных
import pandas as pd
interactions = pd.DataFrame({
"user_id": [1, 1, 2, 2, 3],
"item_id": [101, 102, 101, 103, 102],
"interaction_type": ["view", "click", "purchase", "view", "like"],
"timestamp": pd.date_range("2024-01-01", periods=5),
"duration_seconds": [30, 45, 120, 20, 60]
})
items = pd.DataFrame({
"item_id": [101, 102, 103],
"category": ["Tech", "Books", "Tech"],
"popularity": [1000, 500, 800]
})
3. Выбор подхода к рекомендациям
Есть несколько стратегий, которые я бы комбинировал:
A) Collaborative Filtering — рекомендации на основе схожести пользователей
- User-based: если юзер A похож на B, то A может понравиться то, что нравится B
- Item-based: если user лайкнул item A, рекомендуем похожие items
- Matrix Factorization: разложить матрицу user-item на низкоранговые факторы
B) Content-based — на основе характеристик контента
- Рекомендуем items похожие на те, что уже нравились user'у
- Работает для новых items (нет в истории взаимодействий)
C) Hybrid подход — комбинация методов
- Лучше всего работает на практике
- Миксим CF и content-based подходы
# Пример: простой item-based CF через similarity
from sklearn.metrics.pairwise import cosine_similarity
import numpy as np
# Построим матрицу user-item
user_item_matrix = interactions.pivot_table(
index="user_id",
columns="item_id",
values="duration_seconds",
fill_value=0
)
# Вычислим similarity между items
item_similarity = cosine_similarity(user_item_matrix.T)
# Для user_id=1, который смотрел item_id=101
user_items = user_item_matrix.loc[1]
scores = item_similarity[101] * user_items.values
recommended_items = np.argsort(-scores)[1:6] # Top 5
4. Разработка модели
Я бы начал с базовых методов, потом усложнял:
# Вариант 1: Matrix Factorization (SVD)
from sklearn.decomposition import TruncatedSVD
svd = TruncatedSVD(n_components=50)
latent_factors = svd.fit_transform(user_item_matrix)
# Вариант 2: Neural Collaborative Filtering
from tensorflow import keras
def build_ncf_model(n_users, n_items, embedding_dim=50):
user_input = keras.Input(shape=(1,), name="user_input")
item_input = keras.Input(shape=(1,), name="item_input")
user_embed = keras.layers.Embedding(n_users, embedding_dim)(user_input)
item_embed = keras.layers.Embedding(n_items, embedding_dim)(item_input)
concat = keras.layers.Concatenate()([user_embed, item_embed])
dense = keras.layers.Dense(128, activation="relu")(concat)
output = keras.layers.Dense(1, activation="sigmoid")(dense)
model = keras.Model([user_input, item_input], output)
return model
5. Учёт бизнес-логики
# Фильтрация и ранжирование
def get_recommendations(user_id, model, n_recommendations=10):
# Получить scores из модели
scores = model.predict_for_user(user_id)
# Фильтры
scores[items["category"] == "banned"] = -999 # исключить
scores[user_already_seen] = -999 # не рекомендовать seen
# Diversity: не все top items одной категории
recommendations = apply_diversity_penalty(scores)
# Freshness: бустануть новые items
recommendations += freshness_boost(items["created_at"])
return np.argsort(-recommendations)[:n_recommendations]
6. Оценка качества
Offline метрики:
- Precision@K, Recall@K — что % рекомендаций пользователь лайкнул
- NDCG (Normalized Discounted Cumulative Gain) — порядок имеет значение
- Coverage — % items в каталоге, которые рекомендуются
- Diversity — variety in recommendations
Online метрики (A/B тест):
- CTR (Click-Through Rate)
- Conversion rate
- Time on page / session duration
- User retention
from sklearn.metrics import ndcg_score
# NDCG@10: какова качество ranking top-10
ndcg = ndcg_score([relevant_items], [predicted_ranking])
7. Infrastructure и deployment
Production pipeline:
- Batch: ежедневно генерируем рекомендации для всех users (экономно)
- Real-time: кэшируем результаты, обновляем при новых interactions
- Framework: готовые решения (RecBole, Surprise library) или custom
- Масштабирование: если много users — используем ANN (Annoy, Faiss) для быстрого поиска соседей
8. Итерация и A/B тестирование
- Запустить baseline модель
- Измерить метрики
- Улучшать: добавить features, tune параметры, комбинировать модели
- A/B тест: новая модель vs old
- Развёртывание победителя
Ключ к успеху: начинать просто (popularity-based), потом добавлять сложность на основе данных и feedback-ов.