Рекомендаційні системи
Рекомендаційні системи
Рекомендаційна система - це не тільки «модель 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: показ/пуш/е-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 і задоволеність користувачів - стабільно і безпечно.