Рекомендательные системы
Рекомендательные системы
Рекомендательная система — это не только «модель CTR». Это конвейер данные → кандидаты → ранжирование → политика → действие → обратная связь, оптимизирующий инкрементальную ценность под реальными ограничениями (скорость, частотные капы, разнообразие, этика/комплаенс).
1) Данные, сигналы и представления
События: просмотры/клики/добавления/покупки/депозиты, dwell-time, отмены.
Контент/каталог: атрибуты (категории/жанры/студии/цена/свежесть/волатильность).
Профили пользователей: RFM, предпочтения, устройства/каналы, тайм-слоты.
Контекст: час/день/праздники/матчи, локаль/TZ, площадка показа.
Качество: point-in-time рецепты, идемпотентность событий, дедуп/антибот, маскирование PII.
Эмбеддинги: user/item/context в общем пространстве (MF/Word2Vec2Rec/transformers), мультимодальные (текст/изображения).
2) Архитектура: Recall → Rank → Re-rank → Action
1. Candidate recall (200–5000 кандидатов): ANN (FAISS/ScaNN), популярность/тренды, rule-based фильтры.
2. Ranking (20–200): LTR (GBM/NN), Tower-архитектуры, двоичные/мультицелевые таргеты (click, conversion, value).
3. Policy-aware re-rank (5–30 в итоговом списке): диверсификация/новизна/серендипность, квоты брендов/категорий, RG/комплаенс, частотные капы, fairness.
4. Action: показ/пуш/e-mail/персональная витрина с кулдаунами и «тихими часами».
5. Feedback: лог `impression→click→action→value`, отрицательная обратная связь (skip, жалоба).
3) Модельные парадигмы
Content-based: близость по признакам айтема и профилю; идеально для холодного старта айтемов.
Коллаборативная фильтрация: user-user / item-item по матрице взаимодействий.
Факторизации/эмбеддинги: MF/BPR/NeuMF, двухбашенные MLP (user tower × item tower).
Learning-to-Rank: pairwise/listwise (LambdaMART, RankNet), оптимизация NDCG@k.
Сессионные/последовательные: GRU4Rec, SASRec, Transformers (T5-style) — порядок/контекст в сессии.
Контекстные бандиты: LinUCB/Thompson для быстрых онлайн-адаптаций и креативов.
RL: SlateQ/DQN/Policy Gradient для многошаговой награды (удержание/LTV).
Каузальные/ uplift-подходы: рекомендации, учитывающие прирост, а не «сырой CTR».
4) Цели, ограничения и формулировка задачи
Цели: CTR/CTCVR, доход/маржа/LTV, удержание, удовлетворенность, скорость.
Ограничения: диверсификация, квоты провайдеров/категорий, частотные капы, RG/комплаенс, fairness/этика, SLA p95.
[
\textstyle Score = \alpha \cdot \hat p_{\text{click}} + \beta \cdot \text{Value}
\gamma \cdot \text{Fatigue} + \delta \cdot \text{Novelty} - \sum_j \lambda_j \cdot \text{Penalty}_j
]
где Penalty — нарушения квот/RG/частоты/однообразия.
5) Метрики и оценка
Оффлайн
Релевантность/ранжирование: AUC/PR-AUC, Recall@k, MAP, NDCG@k.
Бизнес: eRPM/eCPM, proxy-LTV, ожидаемая маржа.
Калибровка: Brier, ECE (важно для порогов/политик).
Списки: coverage/diversity/novelty/serendipity.
Онлайн
A/B / многорамочные тесты: CTR, CTCVR, доход/сеанс, удержание, жалобы/отписки (guardrails), latency/timeout.
Каузальная оценка: CUPED, квазиэксперименты (DiD/синтетический контроль) при ограниченной рандомизации.
Uplift-метрики: Qini/AUUC, uplift@k — для treatment-aware рекомендаций.
6) Холодный старт и разреженность
Новые пользователи: popular@segment, контент-опрос, контент-based по первому клику, бандит с широкой разведкой.
Новые айтемы: метаданные/текстовые эмбеддинги/изображения + look-alike по студии/категории.
Малые домены: transfer learning, multi-task (shared tower), cross-domain distillation.
7) Диверсификация, новизна, серендипность
Алгоритмы: MMR, xQuAD, PM-2; штрафы за однообразие.
Квоты: min/max по категориям/брендам/риск-классам.
Стабильность списков: инерция позиций, гистерезис обновлений; не «мигайте» выдачей.
8) Инфраструктура и MLOps
Feature Store: PIT-рецепты, TTL для сессионных фич, онлайн/офлайн паритет.
ANN-сервисы: FAISS/ScaNN, шардинг/кеш, репликация.
Ranker: real-time фичи, калибровка, подписи версий.
Policy/Re-rank слой: ограничения/квоты/RG/частоты/diversity.
SLA: end-to-end p95 ≤ 100–300 мс; fallback (popular-safe) при деградации.
Наблюдаемость: трассировки `correlation_id`, фич-дрифт (PSI), онлайновые метрики качества, «стоп-кран».
9) Безопасность, приватность, этика
Минимизация PII, RLS/CLS, маскирование.
RG/комплаенс-фильтры до показа, частотные капы, «тихие часы».
Fairness-диагностика по сегментам; объяснимость причин показа; путь апелляции.
10) Псевдо-код: гибрид Recall → Rank → Re-rank
python
Recall cand_emb = ann.recall(user_embed, topk=500)
cand_rule = popular.by_segment(user.segment, k=200)
cands = dedup(cand_emb + cand_rule)
Rank features = featurize(user, cands, context) # user/item/context scores = ranker.predict(features) # p(click), value
Policy-aware re-rank final = rerank(
cands, scores,
constraints=dict(
diversity_min={'category': 3},
brand_quota={'A':0.3,'B':0.3},
rg_filter=True,
freq_caps=get_user_caps(user)
),
objective_weights=dict(ctr=0.6, value=0.3, novelty=0.1)
)
return final[:N]
Thompson Sampling для креативов (скетч)
python beta priors per creative: (α, β)
samples = {cr: np.random.beta(alpha[cr], beta[cr]) for cr in creatives}
chosen = max(samples, key=samples.get)
show(chosen)
update(alpha, beta, reward=click)
11) Псевдо-SQL: негативная обратная связь и частотные капы
sql
-- Последний показ и флаги «скрыть/жалоба» → баним на 7 дней
WITH last_impr AS (
SELECT user_id, item_id,
MAX(ts) AS last_ts,
BOOL_OR(feedback_hide) AS hidden,
BOOL_OR(feedback_report) AS reported
FROM impressions
GROUP BY 1,2
)
SELECT i.
FROM inventory i
LEFT JOIN last_impr l ON l.user_id=:uid AND l.item_id=i.item_id
WHERE COALESCE(l.hidden,false)=false
AND COALESCE(l.reported,false)=false
AND (l.last_ts IS NULL OR l.last_ts < NOW() - INTERVAL '7 day');
12) Decision table (эскиз политики)
13) Анти-паттерны
Оптимизация «сырого CTR» вместо инкремента и ценности.
Отсутствие re-rank слоя → избыток однообразия, «туннель зрения».
Лики из будущего; смешение TZ; неверсированные определения сигналов.
Нет калибровки вероятностей → неверные пороги/политики.
Игнор RG/этики/fairness → жалобы/риски/штрафы.
Онлайн/офлайн рассинхрон фич и метрик — «просадка» в проде.
Отсутствие fallback и «стоп-крана».
14) Чек-лист запуска рекомендателя
- Паспорт системы: цели, ограничения, метрики, владельцы, версии
- Recall/Rank/Re-rank разведены; ANN прогрет, кеши настроены
- PIT-фичи, калибровка, офлайн-бенчмарки (NDCG/PR-AUC) пройдены
- A/B-дизайн и guardrails; отчет decision-ready (эффект/риски)
- Ограничения: diversity/квоты/RG/частотные капы — реализованы и мониторятся
- SLA п95, трассировки, алерты, «стоп-кран» и popular-safe fallback
- Документация, рунибуки, план инкрементальных улучшений
Итог
Сильная рекомендательная система — это policy-aware конвейер: гибридный Recall/Rank/Re-rank, который оптимизирует инкрементальную ценность под ограничениями скорости, этики и разнообразия. Добавив бандиты/RL для онлайн-адаптации, дисциплину MLOps и корректную каузальную оценку, вы получаете не «списки ради списков», а управляемые решения, повышающие ROMI, LTV и удовлетворенность пользователей — стабильно и безопасно.