Дайджесты новостей
Предметный натюрморт на деревянном столе со смартфоном с открытым разделом «Рекомендации», крафтовой посылкой и измерительным инструментом мастера в тёплом свете.

Ранжирование рекомендаций на главной Авито: как нейросети определяют показы объявлений

Ты когда-нибудь замечал странную картину в статистике своего профиля? Вроде бы заголовок выверен до символа, ключевые слова собраны идеально, цена рыночная, а в ответ — полная тишина. Карточка будто застыла в вакууме. В таких ситуациях большинство продавцов моментально начинают искать виноватых: ругают модерацию, жалуются на технические сбои или шепчутся про мифический «теневой бан».

Я сам раньше ловил себя на мысли, что классический поиск — это главный и единственный источник покупателей. Казалось: если стоишь в топе поисковой строки по конкретному запросу, продажи гарантированы. Но когда я углубился в реальные данные платформы, то обнаружил ошеломляющую инженерную пропорцию.

Почему поиск больше не решает всё

Классический поиск по категориям и строке ввода даёт лишь часть охвата. На персональные рекомендации главной страницы Авито приходится около половины (50%) всех просмотров объявлений на площадке. Более того: именно этот блок генерирует примерно 30% всех прямых контактов (звонков и сообщений в чате) между покупателями и продавцами.

Если твоё предложение не умеет нравиться рекомендательным алгоритмам главной страницы, ты добровольно отрезаешь свой бизнес от половины потенциального рынка. На днях практикующий эксперт Виктор Малышев (канал «Aviclub.ru Авитолог») обратил внимание на масштабную инженерную публикацию команды AvitoTech на Хабре, подготовленную DS Tech Lead Ярославом Хныковым. В ней разработчики без корпоративных прикрас разложили, как устроена рекомендательная воронка Авито под капотом и почему старые методы продвижения больше не дают взрывного эффекта.

Давай разберём эту механику по винтикам.

Как устроена трехэтапная воронка отбора

Каждую секунду на Авито активны сотни миллионов объявлений. Показать их все одному пользователю невозможно технически. Человек открывает приложение на смартфоне, и система должна за доли секунды сформировать для него персональную витрину.

Инфографический чертёж трехэтапной воронки отбора рекомендаций Авито от сотен миллионов лотов до топ-300 позиций.

Для этого в Авито работает сложный многоступенчатый конвейер:

  1. Кандидатогенерация (L1). Специальные быстрые движки просеивают колоссальный массив в сотни миллионов активных лотов и отбирают пул из нескольких тысяч потенциально релевантных позиций. Здесь в ход идут разные сигналы: геопозиция пользователя, его недавние поиски, категории интересов и схожесть товаров.
  2. Первичный отсев и ранжирование (L2). Несколько тысяч кандидатов сужаются до компактного списка из топ-300 объявлений. С 2020 года эту задачу на Авито бессменно выполнял проверенный градиентный бустинг CatBoost.
  3. Тяжелое нейросетевое доранжирование (L3). Внутри отобранных 300 позиций включается легковесный, но глубокий нейроранкер. Он решает главную задачу: в каком именно порядке расставить эти 300 товаров на экране смартфона, чтобы максимизировать полезные действия.
  4. Слой диверсификации. Финальный защитный фильтр. Он следит за тем, чтобы вся лента пользователя не заполнилась однотипными предложениями от одного и того же продавца или объявлениями из одной узкой категории.

В нашем раннем материале о теневом бане и архитектуре рекомендаций мы уже касались того, как выпадание из этой воронки лишает продавца трафика. Но сейчас инженеры сделали качественный шаг вперёд: они кардинально перестроили второй и третий уровни ранжирования.

Почему CatBoost уперся в потолок

Градиентный бустинг CatBoost честно служил платформе годами. Команда масштабировала его с 80 тысяч обучающих выдач и 19 простейших признаков до миллиона выдач и 200 сложных признаков, построенных на эмбеддингах. Но к 2024–2025 годам модель упёрлась в классическое физическое насыщение: добавление терабайтов новых данных перестало давать прирост качества.

Главная проблема заключалась в том, что CatBoost не умеет напрямую работать с сырыми векторными представлениями (эмбеддингами) товаров и пользователей. Инженерам приходилось вручную сжимать векторы в скалярные произведения (dot-product) и сложные счетчики. Ручное придумывание фичей превратилось в узкое горлышко, а модель не могла уловить тонкие контекстные связи между тем, что покупатель искал полчаса назад, и тем, что он готов купить прямо сейчас.

Стало ясно: для ранжирования топ-300 нужен переход на нейросети. Но сделать это в продакшене гигантского классифайда — колоссальный вызов.

Пять попыток создать идеальный нейроранкер

Инженерный путь команды AvitoTech наглядно показывает, что в реальном машинном обучении красивые академические теории часто разбиваются о суровую практику. Они прошли через пять последовательных итераций:

  • Итерация 1 (Провал со сложными моделями). Сначала разработчики попытались применить модную архитектуру DCNv2 со смесью экспертов. Результат оказался обескураживающим: метрика ранжирования NDCG упала на 3%, а число реальных контактов с продавцами обвалилось на 6%. Модель переусложнили.
  • Итерация 2 (Упрощение и ListMLE лосс). Архитектуру упростили до классического многослойного перцептрона (MLP), но заменили стандартную бинарную кросс-энтропию на специальную функцию потерь — ListMLE. Вместо того чтобы оценивать каждое объявление изолированно («кликнет или нет»), лосс оптимизирует порядок всей пачки объявлений сразу через треугольную маску и софтмакс. Это дало первый устойчивый сигнал роста.
  • Итерация 3 (Проекции эмбеддингов). В нейросеть добавили слой проекций уникальных айтемов, хранящихся в быстрой памяти memmap. Качество ранжирования по целевым действиям выросло на 0,8%, но контакты просели на 1,9%. Алгоритм научился подсовывать кликабельные карточки, которые не приводили к звонкам.
  • Итерация 4 (Штрафы за контакты и блендинг). Инженеры ввели жесткие штрафы в функцию потерь за утерю контактов и смешали (заблендили) предсказания CatBoost и нейросети. Это вывело модель в уверенный плюс: контакты по всей платформе выросли на 0,7%, а целевые действия — на 0,4%.
  • Итерация 5 (Трансформер и история пользователя). Настоящий технологический прорыв произошел, когда в архитектуру встроили механизм внимания (self-attention) и подключили историю пользователя.

Как трансформер видит покупателя

Давай разберем эту механику на пальцах. Представь, что в модель загружаются не просто обезличенные цифры просмотров, а живая цепочка последних действий конкретного человека на Авито.

Инженеры установили жесткое правило: в историю пользователя берутся ровно 50 последних полезных событий. Что критично: обычные случайные клики из истории намеренно выбросили! Если человек случайно ткнул в забавный диван или открыл объявление из любопытства, алгоритм не станет засорять этим вектор интересов. В расчет идут только твердые намерения: отправка сообщения в чат, звонок продавцу, добавление карточки в избранное или оформление доставки.

Каждое такое событие кодируется емким вектором:

  • проекция числового эмбеддинга самого товара;
  • позиционный эмбеддинг (как давно это произошло);
  • тип совершенного действия (звонок ценится иначе, чем добавление в закладки);
  • источник перехода (пришел ли человек из органического поиска, кликнул в ленте или перешел по внешней рекламе).

Затем кандидаты из топ-300 и 50 событий пользовательской истории склеиваются в единый входной поток трансформера. И здесь включается магия: механизм внимания с маской заставляет кандидатов смотреть не только на историю человека, но и друг на друга.

Нейросеть оценивает твое объявление в контексте прямого окружения. Если рядом в топ-300 стоят три одинаковых смартфона, модель смотрит, у кого из продавцов выше рейтинг, прозрачнее цена и живее фотографии. Один только этот учет конкурентного окружения добавил +0,6% к общему качеству выдачи.

В продакшене эта легковесная модель на 2,5 миллиона параметров крутится на GPU-серверах под управлением Triton Inference Server. Она успевает отранжировать топ-300 всего за 30 миллисекунд, добавив скромные 6% к общему времени ответа бэкенда.

Сухие цифры боевого A/B-теста

Результаты масштабного A/B-тестирования новой гибридной системы на 10 миллионах выдач впечатляют:

  • +4,3% пользователей, совершивших хотя бы один контакт из рекомендаций;
  • +3,3% пользователей, сделавших целевое действие на платформе;
  • +0,8% прироста пользователей, дошедших до реальной закрытой сделки на Авито.

Для платформы масштаба Авито, где ежедневно совершаются сотни тысяч транзакций, доли процента конверсии означают миллиардные обороты для малого и среднего бизнеса.

Как зацепить нейроранкер L3 реальными действиями

Поскольку алгоритм обучается на последовательностях из 50 целевых действий, пустой кликбейтный трафик теряет всякий смысл. Если на карточку заходят, но сразу закрывают её без звонка или сообщения, нейросеть мгновенно пессимизирует позицию в топ-300. Твоя задача — мотивировать посетителя совершить простое микро-действие: задать вопрос о наличии в чате, запросить видеообзор или нажать кнопку «Добавить в избранное».

Что это практически меняет для продавца

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

  1. Идеальная чистота атрибутов для L1. Чтобы попасть в первоначальный отбор из сотен миллионов карточек, твой товар обязан иметь безупречные метаданные. Заполняй все доступные поля в характеристиках, выбирай точную категорию и подкатегорию, указывай правильный бренд и модификацию. Любая ошибка в параметрах лишает эмбеддинг объявления шанса совпасть с вектором интересов покупателя.
  2. Фокус на сообщениях и избранном, а не на пустых кликах. Забудь про броские кричащие заголовки, не соответствующие содержанию. Предложи в тексте понятный повод для контакта: бесплатный расчет сметы в чате, бронь скидки при добавлении в избранное или быстрый ответ за пять минут. Каждое такое действие повышает вес твоего профиля в истории пользователя.
  3. Визуальный контраст внутри топ-300. Помни, что трансформер оценивает твое объявление на фоне прямых соседей по выдаче. Первое фото не должно быть безликим стоковым рендером на белом фоне. Покажи реальный товар при дневном свете, добавь плашку с ключевым преимуществом или живой снимок процесса работы, если продаешь услуги.
  4. Уважение к слою диверсификации. Попытки завалить категорию десятками одинаковых объявлений-клонов от одного аккаунта жестко режутся финальным фильтром диверсификации. Система искусственно разбавляет выдачу, освобождая место другим продавцам. Вместо тупого масспостинга делай упор на разные товарные группы, вариативные заголовки и честное закрытие реальных потребностей клиентов.

Нейросети на Авито больше не воспринимают площадку как статичную доску объявлений. Это динамичный живой организм, который ежесекундно считывает поведение аудитории. И тот, кто понимает правила этой игры изнутри, забирает себе львиную долю самых горячих покупателей.