GH GambleHub

Рекомендаційні системи

Рекомендаційні системи

Рекомендаційна система - це не тільки «модель 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.

Policy-aware re-rank (приклад скаляризації):
[
\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 (ескіз політики)

УмоваКонтекстДіяОбмеженняКоментар
`new_user & low_history`онбордингpopular@segment + content-seedкапи частоти, RGХолодний старт
`session_len>3 & diversity_low`сесіяMMR/xQuAD re-rankmin 3 категоріїсерендипність
`uplift_push≥τ`оффериперсональний пушDo-Not-Disturb, zhaloby≤Khінкремент, не CTR
`risk_RG≥τ`будь-якийблок ризик-контентуRG/комплаєнсбезпека

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 і задоволеність користувачів - стабільно і безпечно.

Contact

Зв’яжіться з нами

Звертайтеся з будь-яких питань або за підтримкою.Ми завжди готові допомогти!

Розпочати інтеграцію

Email — обов’язковий. Telegram або WhatsApp — за бажанням.

Ваше ім’я необов’язково
Email необов’язково
Тема необов’язково
Повідомлення необов’язково
Telegram необов’язково
@
Якщо ви вкажете Telegram — ми відповімо й там, додатково до Email.
WhatsApp необов’язково
Формат: +код країни та номер (наприклад, +380XXXXXXXXX).

Натискаючи кнопку, ви погоджуєтесь на обробку даних.