Модели персонализации
Модели персонализации
Персонализация — это система, где данные → модели → политика показа → действие → обратная связь. Цель — максимизировать инкрементальную ценность (доход/удержание/удовлетворенность) при соблюдении ограничений (этика/RG, частотные капы, разнообразие, свежесть, SLA).
1) Данные и представления
Сырье: события (просмотры/клики/игры/покупки/депозиты), контент-каталог (атрибуты), пользовательские профили, контекст (время/гео/устройство/канал), сигналы качества (бот/фрод).
Фичи:- User: RFM, предпочтения категорий, ценовая чувствительность, время суток, устройство.
- Item: жанр/категория, студия/провайдер, язык, цена/волатильность, «свежесть».
- Context: dow/hod, промо/ивенты, сессия, канал входа.
- Эмбеддинги: совместные пространства user/item (MF/Word2Vec2Rec/transformers), мультимодальные (текст/изображения).
- Качество: point-in-time (без ликов), UTC-время, идемпотентность событий, маскирование PII.
2) Базовые парадигмы
1. Content-based — близость по признакам айтема и профилю пользователя.
2. Коллаборативная фильтрация (CF) — похожие пользователи/айтемы по сигналам взаимодействия.
3. Матричная факторизация / эмбеддинги — скрытые факторы, dot-product/MLP для score.
4. Learning-to-Rank (LTR) — градиентный бустинг/нейросети для ранжирования списков (pairwise/listwise).
5. Re-ranking слоя — post-processing с учетом диверсификации/новизны/ограничений.
6. Контекстные бандиты — онлайн-обучение с exploration-exploitation.
7. RL/seq-рекомендации — оптимизация пути/сессии (многошаговая награда).
3) Конвейер принятия решения
1. Recall (быстрый отбор кандидатов, 200–5k): ANN по эмбеддингам, правил-бейс/категория, популярность.
2. Rank (точный скоринг, 20–200): LTR/MLP с богатыми фичами.
3. Re-rank/Policy (фин. список, 5–30): многоцелевая оптимизация + ограничения и диверсификация.
4. Action: показ/пуш/e-mail/персональная витрина с капами и «тихими часами».
5. Feedback: implicit/explicit сигналы → переобучение/бандит-обновление.
4) Многоцелевые цели и ограничения
Цели: CTR/CTCVR, удержание, выручка, маржа, LTV, удовлетворенность, скорость.
Ограничения: частота контактов, RG/комплаенс, разнообразие категорий, квоты брендов/провайдеров, fairness.
[
\max \sum_i w_i \cdot \text{Objective}_i \quad
\text{s.t. } \text{caps, RG, diversity, SLA}
]
Практика: делайте policy-aware re-ranking (см. §7), где скор объединен с правилами.
5) Холодный старт и малые данные
Новые пользователи: популярность по сегменту/каналу/гео, контент-based по анкете/первому клику, бандит с широкой разведкой.
Новые айтемы: контент-эмбеддинги (текст/теги), метаданные, «look-alike» по провайдеру/жанру.
Few-shot: перенос эмбеддингов/мульти-задачность (shared tower).
6) Метрики оценки
Оффлайн
Классификация/ранжирование: AUC/PR-AUC, NDCG@k, MAP, Recall@k.
Бизнес: eCPM/eRPM, ожидаемый доход/маржа, LTV proxy.
Многоцелевые: взвешенные метрики (например, NDCG с gain=ценность).
Калибровка: Brier, ECE (для вероятностей).
Списки: coverage/diversity/novelty/serendipity.
Онлайн
A/B и бандитные тесты: CTR, CTCVR, доход/сеанс, удержание D1/D7, жалобы/отписки (guardrails), latency/SLA.
Инкремент: lift %, CUPED/квазиэксперименты при сложной рандомизации.
7) Диверсификация и policy-aware re-ranking
MMR/PM-2/xQuAD: баланс «релевантности × новизны».
Квоты: min/max по жанрам/провайдерам/рисковым категориям.
Fairness: ограничение долей для избежания систематических перекосов.
[
\textstyle \text{Score} = \alpha \cdot \hat{p}_{\text{click}} + \beta \cdot \text{Value} - \gamma \cdot \text{Fatigue} + \delta \cdot \text{Novelty}
]
Гистерезис: не «мигать» списками; обновляйте позиции с инерцией.
8) Контекстные бандиты и RL
Бандиты (LinUCB, Thompson): быстрый online-learn, контроль exploration. Хороши для первой позиции/креатива/канала.
Каскадные бандиты: оптимизация top-k.
RL (DQN/Policy Gradient/SlateQ): сессионная персонализация, оптимизация многошаговой награды (возврат/выручка/долгая сессия).
Безопасность: офф-полиси оценка (IPS/DR), симуляторы, капы на исследование, safe RL.
9) Персонализация под причинный эффект
Uplift-модели: кого стоит трогать (persuadables), Qini/AUUC, uplift@k.
Treatment-aware ранжирование: включайте вероятность инкремента вместо «сырого» CTR.
Guardrails: Do-Not-Disturb сегменты, RG-правила, fairness.
10) Архитектура и MLOps
Feature Store: онлайн/офлайн паритет, point-in-time, TTL для сессионных фич.
Candidate services: ANN/FAISS/ScaNN, кеширование/шардинг по сегментам.
Ranker: градиентный бустинг/MLP/Tower-архитектуры, калибровка.
Policy/Re-rank: правила/ограничения, диверсификация, бандитный слой.
Оркестрация: идемпотентность запросов, p95 latency ≤ 100–300 мс, DLQ/ретраи.
Наблюдаемость: трассировка `correlation_id`, фич-дрифт (PSI), метрики качества, «стоп-кран».
11) Безопасность, приватность, этика
PII-минимизация: токенизация, RLS/CLS, маскирование.
Объяснимость: top-features/причины показа; путь апелляции.
Этика/RG: частотные капы, «тихие часы», запреты на агрессивные офферы у уязвимых групп.
Комплаенс: аудит решений/логов, версии политик и креативов.
12) Паспорта и decision tables
Паспорт рекомендателя (пример)
ID/версия: `REC_HYBRID_RANK_v5`
Recall: ANN (user/item embeddings), top-500
Ranker: LTR-GBM + MLP (features: user RFM, item meta, context)
Re-rank: PM-2 (diversity), квоты брендов, RG-фильтры, частотные капы
Цели/метрики: NDCG@10, eRPM, жалобы≤X, latency p95≤150 мс
А/B: 14 дней, CUPED; guardrails — RG/доставляемость
Владельцы/логирование/рунибук
Decision table (эскиз)
13) Псевдо-код (скетч)
A. Гибридный recall + rank + re-rank
python
Recall cands_emb = ann. recall(user_embed, topk=500)
cands_rule = rule_based. popular_by_segment(user, k=200)
cands = dedup(cands_emb + cands_rule)
Rank features = featurize(user, cands, context) # user/item/context scores = ranker. predict(features) # CTR/Value score
Re-rank (policy-aware)
final = rerank(
cands, scores,
constraints=dict(diversity_min={'category':3},
brand_quota={'A':0. 3,'B':0. 3},
rg_filter=True,
freq_caps=per_user_caps(user)),
objective_weights=dict(ctr=0. 6, value=0. 3, novelty=0. 1)
)
return final[:N]
B. Thompson Sampling для креативов
python beta priors per creative: (α, β)
for creative in creatives:
p_hat = np. random. beta(alpha[creative], beta[creative])
chosen = argmax(p_hat)
show(chosen)
update(alpha, beta, reward=click)
14) Диагностика и мониторинг
Качество: NDCG/Recall@k, eRPM, coverage/diversity, калибровка.
Онлайн: CTR/CTCVR, доход/сеанс, удержание, жалобы/отписки, latency/timeout.
Дрейф: PSI/KL по ключевым фичам, падение корреляции офлайн↔онлайн.
Ограничения: выполнение квот/diversity, удары в RG-фильтры, частотные капы.
Рунибуки: деградация recall (падение ANN), рост жалоб, всплеск таймаутов, аварийный фолбэк (popular-safe).
15) Частые ошибки
Оптимизация «сырого CTR» вместо инкремента/ценности.
Нет re-ranking слоя → скудное разнообразие, «туннель зрения».
Лики из будущего, смешение TZ, несогласованные определения сигналов.
Отсутствие калибровки и порогов → «портится» бюджет и частотные капы.
Игнор RG/этики и fairness → жалобы, риски, регуляторные проблемы.
Несинхрон онлайн/офлайн фич → провал в проде.
16) Чек-лист перед релизом персонализации
- Паспорт модели (цели, ограничения, метрики, владельцы, версии)
- Recall/Rank/Re-rank разнесены; ANN и кеши прогреты
- PIT-фичи и калибровка, оффлайн бенчмарки (NDCG/PR-AUC) пройдены
- A/B-дизайн и guardrails; отчет decision-ready (эффект и риски)
- Ограничения: RG/частота/diversity/квоты — внедрены и мониторятся
- Наблюдаемость, алерты, «стоп-кран», фолбэки (popular-safe)
- Документация и рунибуки, план инкрементальных улучшений
Итог
Модели персонализации эффективны только как policy-aware система: богатые данные и эмбеддинги → гибрид Recall/Rank/Re-rank → бандиты/RL для онлайн-адаптации → многоцелевые цели под жесткие ограничения и этику → дисциплинированный MLOps и мониторинг. Такой контур дает не только «рекомендации», а управляемые решения, повышающие ROMI, LTV и удовлетворенность — безопасно, прозрачно и воспроизводимо.