Re-rank: ограничения и продуктовые правила (B6)
Ранкер отвечает, что вероятнее понравится. Витрина отвечает на другой вопрос — что мы имеем право и хотим показать. Здесь измеряется цена каждого правила: жёсткий фильтр доступности, квоты на повторы, на популярное и на район, слоты под исследование.
⚠ Слейты посчитаны офлайн ранкером Фазы 8 на реальном логе Brightkite и приезжают готовым JSON. А вот сам re-rank считается на лету: ползунки пересчитывают настоящие метрики по всем eval-пользователям, а не симуляцию — продуктовый слой на то и дешёвый, что не требует переобучения.
загрузка слейтов…
Теория простым языком
Модель ранжирует по вероятности. Витрину показывает продукт — и у продукта есть обязательства, которых нет в функции потерь: доступность, квоты, разнообразие, обязательный слот под новое. Re-rank — это последняя ступень воронки, где обучение уже закончилось и начинаются правила.
▸Зачем править выдачу после ранкера, а не учить модель сразу правильно
Два типа правил, которые нельзя путать
Жёсткий фильтр (eligibility) — то, что нарушать нельзя никогда: товара нет на складе, доставки в этот регион нет, возрастное ограничение, юридический запрет, заблокированный автор. Правильное место такого фильтра — до retrieval (или сразу после): если фильтровать в самом конце, из top-10 могут выпасть 4 позиции, и витрина придёт короче K. Наш замер это подтверждает: отфильтровать 8% каталога стоит 6.7 п.п. Recall@10 — почти вдвое больше доли отфильтрованного, потому что выбывают высоко отранжированныеместа, а не случайные.
Мягкая квота (cap) — цель, а не закон: «не больше 3 товаров одного продавца», «не больше 2 повторов», «не больше 5 из одной категории». Квоты конфликтуют друг с другом и с размером витрины, поэтому у них обязан быть определён порядок применения и поведение при недоборе.
Порядок применения — это тоже дизайн
Слои не коммутируют, и порядок надо выбирать сознательно:
1. eligibility — до retrieval, чтобы недоступное не занимало место в пуле;
2. ранжирование — модель, без правил;
3. квоты — жадно по убыванию скора;
4. слоты под исследование — после квот, но с их соблюдением: «исследовать» недоступное или запрещённое нельзя;
5. backfill — последний, с явным учётом.
Наш экспонат следует ровно этому порядку, и его видно в коде app/models/rerank.py: одна функция используется и офлайн-билдером для кривых, и живым эндпоинтом — чтобы картинка и замер не разошлись.
Как это связано с остальным учебником
Это третья и последняя ступень перед сборкой полного capstone: retrieval (E3) → ranking (Фаза 8) → фичи под этим всем (B4) → re-rank. Отсюда прямые мосты: guardrail-метрики и «accuracy ≠ бизнес-метрика» — Фаза 14; exploration-слоты как fallback-механика — B5; наблюдаемость квот и backfill — B7; петля «показали → залогировали → научились» — B1.
⚠️ Что может пойти не так
- Ставить жёсткий фильтр в конец воронки: пул схлопывается, витрина приходит короче K — фильтровать надо до retrieval.
- Не считать backfill: при конфликтующих квотах правило де-факто отключается у части пользователей, и об этом никто не узнаёт.
- Считать «повысить разнообразие» задачей: новизна, внутрислейтовое разнообразие и покрытие каталога — разные метрики, и квота может двигать их в противоположные стороны.
- Подбирать квоты по офлайн-метрике: она по определению падает от любого ограничения. Квота обосновывается продуктом и проверяется онлайн-экспериментом, а офлайн считает только цену.
- Ставить exploration до eligibility — «исследовать» можно ровно то, что вообще разрешено показывать.
- Ставить cap, не посмотрев на распределение группы: квота «одно место из района» конфликтует с тем, что люди живут в одном районе, и просто конвертируется в backfill.
- Забывать, что правило не пробивает потолок retrieval: если кандидата нет в пуле, никакая перестановка его не покажет.
🧠 Проверь себя: Продакт просит: «в топ-10 должно быть не больше двух товаров одного продавца». Как это внедрять?
Где это в дорожной карте
B6 — Re-ranking Constraints & Product Rules, ступень 3 из 3 к полному capstone (Фаза 8 → B4 → B6 → сборка). Главный урок: витрина — это не отсортированный список, а политика показа, и цена каждого её правила измерима.