Собесов

Aviasales Junior — оценка качества скоринговой модели для ранжирования билетов

Кейсы и метрикиML и качество моделей в продуктеСредняяJunior

Условие

В поисковую выдачу билетов Aviasales разработана и внедрена скоринговая модель, ранжирующая билеты. Цель — помочь пользователю выбрать лучший авиабилет самым быстрым способом, подняв его в топ выдачи.

Изучите поисковую выдачу сайта и предложите:

  1. Какие метрики использовали бы, чтобы отслеживать качество работы модели?
  2. Какие визуализации помогли бы быстро подсветить проблему и разобраться менеджерам, что пошло не так?
  3. Что важно учесть и какие срезы стоит смотреть отдельно?
  4. Какие данные нужны?

Решение

Подход

Качество ranking-модели бывает двух видов:

  1. ML-метрики (offline): NDCG, MAP, MRR, hit-rate@K — насколько порядок модели близок к «идеальному».
  2. Продуктовые метрики (online): что реально улучшилось в воронке.

Для бизнеса важнее второе, но первое нужно для debug и мониторинга на свежих данных без ожидания целевой метрики.

Метрики

Уровень модели:

Метрика Что показывает
MRR (Mean Reciprocal Rank) средний обратный ранг билета, который купили: 1/rank. Если купили первый — 1.0, второй — 0.5. Чем выше — тем модель лучше предсказывает «лучший»
Click-through @ K вероятность клика хотя бы по одному билету в топ-K. Подсветит, не «сломали» ли модель целиком
Position of click средняя позиция кликнутого билета. Должна падать при улучшении ранжирования
NDCG @ 10 если есть «уровневые» лейблы (купил > кликнул > просмотрел), классическая ранжирующая метрика
% пустых выдач sanity-check

Уровень продукта (бизнес-цель «найти лучший билет быстро»):

Метрика Что показывает
Time to click сколько секунд от загрузки до клика. Должно падать
Scroll depth сколько пользователь проскроллил выдачу до клика. Должно падать
Search-to-purchase конверсия поиска в покупку. Главная decision-метрика
Refund rate модель может «толкать» в топ некачественные опции — растут возвраты
Repeat-search rate юзер не нашёл нужное и повторил поиск с другими параметрами

Гарды:

  • Latency / time-to-render выдачи (модель не должна тормозить выдачу).
  • Diversity (топ-3 не должен стать монокультурой одного партнёра).
  • Coverage (для новых направлений / партнёров модель не должна выдавать пустоту).

Визуализации

Дашборд с 4 секциями:

  1. Time-series основных метрик (DAU, MRR, position-of-click, search-to-purchase). Линии за 30 / 60 / 90 дней с маркером последнего значения и сравнением «сегодня vs прошлая неделя».

  2. Декомпозиция по сегментам (на тепловой карте):

    • платформа (web / iOS / Android) × метрика;
    • гео (страна вылета);
    • тип маршрута (внутренний / международный, с пересадкой / без);
    • ценовой сегмент.
  3. Распределение позиции клика и позиции покупки: гистограммы. Если у клика мода на позиции 1, а у покупки — на позиции 5, модель кликабельна, но покупательно неточна.

  4. «Глубина просмотра» воронкой: % сессий, у которых был клик в позиции 1; ≤ 3; ≤ 10; > 10. Должна расти доля «коротких» воронок при улучшении модели.

Срезы, которые важны

  • Тип запроса: точная дата vs гибкие даты, одно направление vs round-trip. Модель может быть лучше для одного типа.
  • Платформа (мобильная и десктопная выдача — разные скроллы и разное число видимых билетов).
  • Гео пользователя: модель могла обучаться на одном гео и плохо работать на другом.
  • Сегменты партнёров: новый партнёр — холодный старт.
  • Цена билета: модель может работать хорошо в эконом-сегменте и плохо в бизнес.

Какие данные нужны

Источник Таблица
Поисковые сессии searches(search_id, user_id, query_params, ts, response_latency_ms)
Выдача search_results(search_id, ticket_id, position, score, partner_id, price)
Клики clicks(search_id, ticket_id, ts, position)
Конверсии bookings(search_id, ticket_id, ts, price, refunded)
Партнёры partners(partner_id, commission, quality_rating)

С этими таблицами считается всё перечисленное выше: позиция клика, MRR, NDCG, конверсия в покупку с привязкой к выдаче.

Подводные камни

  1. CTR-метрики на ranking — обманчивы. Можно поднять CTR, поставив «жёлтые» билеты в топ — но это не улучшит покупку. Поэтому CTR — вторичная метрика, decision — search-to-purchase.
  2. Position bias. В верхних позициях клики просто потому, что они в топе. Без debias-метрик (например, IPS) MRR может переоценивать модель.
  3. Cold-start для новых направлений / партнёров. Если модель не обучена на маршруте — она ставит их низко и они никогда не накопят сигнала.
  4. Сравнение с базовой сортировкой. Без A/B нельзя надёжно сказать «улучшилась модель» — данные могли поменяться (сезон, цены).
  5. Self-fulfilling prophecy. Модель учится на своих же кликах. Если выкатить плохую модель и накопить кривой сигнал — следующая обучится на нём.
  6. Refund — медленная метрика. Возврат может прийти через месяц. Используйте «ранние прокси»: complaints, повторный поиск.

Альтернативы

  • Counterfactual evaluation через IPS-веса (debias position bias).
  • Periodic offline replay на исторических данных, если выкатка дорогая.

Эталонный ответ

Метрики: ML-уровня (MRR, NDCG, position-of-click) и продуктовые (search-to-purchase, time-to-click, scroll depth, refund). Главная decision-метрика — конверсия search → purchase, ML-метрики используем как раннюю детекцию проблем. Дашборд — time-series + декомпозиция по сегментам (платформа, гео, тип маршрута) + распределение позиций. Самое важное в ответе — отделить «модель кликается» от «модель помогает покупать» и не ловиться на CTR-only.

Хочешь увидеть разбор?

Зарегистрируйся бесплатно — откроется развёрнутое решение этой задачи и ещё 4 на выбор.

Зарегистрироваться и увидеть разбор
Уже есть аккаунт? Войти