Как машинное обучение объединяет покупателей и продавцов на OLX

Представьте, что вы решили купить спортивный автомобиль. Если вы идете в автомагазин, вы можете начать с того, что спросите у сотрудника, где находятся все спортивные автомобили, которые он продает. Тогда вы, вероятно, захотите узнать, какие из них лучше всего подходят для вашего бюджета. Хотя онлайн-рынки, такие как OLX, не могут предложить такого рода человеческое взаимодействие, они могут предоставить еще более качественный сервис, основанный на огромном каталоге и алгоритмах, анализирующих контент и поведение пользователей.

В типичном случае использования, когда клиент вводит запрос на естественном языке, ожидается, что платформа покажет все соответствующие элементы (например, все спортивные автомобили) и, желательно, выведет лучшие предложения в верхнюю часть страницы результатов. Проблема упорядочивания/сортировки элементов (или вообще любых объектов) наилучшим образом известна как ранжирование. Подход машинного обучения к ранжированию также известен как Learning To Rank или LTR.

В этой статье я опишу

  1. Эволюция ранжирования на OLX
  2. Как мы интегрировали LTR в нашу экосистему
  3. И стоило ли оно того (спойлер — да)

До LTR

На онлайн-рынке OLX люди регулярно публикуют объявления, чтобы что-то продать. Весь каталог на данный момент содержит миллионы объявлений, поэтому у пользователей, естественно, есть возможность подобрать для себя лучшее предложение. Однако менее года назад нельзя было сортировать результаты поиска по каким-либо критериям, кроме возраста объявления или цены. В некоторых случаях пользователям приходилось тратить значительное количество времени на сравнение множества объявлений или расширение своего запроса (путем добавления фильтров/ключевых слов), чтобы найти выгодную сделку.

Только в прошлом году мы начали вводить новую опцию сортировки под названием «Рекомендуемые». Мы хотели показывать нашим клиентам лучшую рекламу, а не только самую новую или самую дешевую. После значительного количества исследований и огромных инженерных усилий мы получили небольшой набор факторов или признаков, которые, казалось, были многообещающими для рекомендуемой сортировки. Эти функции можно разделить на 3 основные категории:

  1. Сходство текста (например, был ли запрос найден в заголовке объявления)
  2. Статистика рекламы (например, CTR)
  3. Временной (например, рекламный возраст)

И когда я говорю огромные инженерные усилия, я имею в виду именно это. Сделать такую ​​динамическую информацию, как CTR, доступной для ранжирования, было не шуткой, поэтому я действительно восхищаюсь работой наших инженеров, стоящих за этими результатами.

После нескольких A/B-тестов все эти функции были вручную объединены в простую формулу, которая принесла положительные результаты. Пользователи гораздо чаще могли найти то, что искали, на первых позициях поисковой выдачи, следовательно, общее количество покупок значительно увеличилось. Успех стал доказательством того, что проект имеет ценность, и мы должны еще больше инвестировать в эту основную функциональность платформы.

LTR

Если вы знакомы с машинным обучением, вы, вероятно, понимаете, почему эта проблема является типичным вариантом использования ML. Несколько функций, четкая цель (конверсия), зависящая от функций, и, что наиболее важно, большие объемы данных, которые необходимо собирать и изучать! Здесь начинается история обучения ранжированию на OLX.

Как было сказано ранее, LTR можно рассматривать как просто ML для задач ранжирования. Вы увидите, что между LTR и классическим контролируемым обучением нет большой разницы.

Любая проблема начинается с утверждения, поэтому давайте попробуем его сформулировать:

  1. По заданному запросу пользователя есть набор объявлений (результатов поиска)
  2. Каждое объявление имеет разную вероятность конверсии
  3. Наша цель — отсортировать объявления по этой вероятности

Метрики

Почему эта цель? Мы сравниваем наши решения для ранжирования с помощью A/B-тестирования, используя комплексный набор показателей успеха, счетчика и экосистемы. «Количество конверсий на первой странице результатов поиска» — это наша первая мера — ее легко понять/объяснить, и она напрямую связана с нашими ключевыми бизнес-метриками. Эта мера — то, для чего предназначена наша цель (сортировать объявления по вероятности конверсии).

Когда дело доходит до офлайн-метрик, отражающих цель и позволяющих сравнивать разные модели, мы выбираем NDCG в качестве отраслевого стандарта для ранжирования задач. Поскольку интересующие нас вероятности конверсии неизвестны, используются бинарные метки независимо от того, был ли товар куплен или нет. Это означает, что чем выше данный алгоритм размещает купленные товары, тем выше значение метрики.

Данные

Целевая метрика определена, теперь мы можем попытаться решить проблему. Решения машинного обучения обычно начинаются с данных, поэтому давайте создадим наш исторический набор данных. Представьте, что несколько дней назад кто-то зашел на платформу, чтобы что-то купить, поисковая система смогла найти только 3 подходящих объявления, а затем человек купил второй товар. Этот сеанс будет представлен в наборе данных следующим образом:

Каждая строка соответствует паре ‹запрос-объявление› из сеанса поиска пользователя. Метка сообщает нам о том, совершил ли пользователь покупку, а точнее мы учитываем не только покупки, но и сообщения/звонки продавцам, так как транзакции не всегда подтверждаются. И, наконец, столбец характеристик объединяет все характеристики элемента, которые мы описали ранее, некоторые из них не зависят от запроса (например, возраст объявления, CTR), а некоторые — нет (например, соответствие заголовку и всевозможные показатели схожести текста).

Модель

Теперь мы знаем формальную цель, у нас есть данные, пришло время построить модель. Отраслевым стандартом для табличных данных является множественные аддитивные деревья регрессии (MART). Одно из этих деревьев можно визуализировать следующим образом:

Чтобы обучить модель, мы применяем Gradient Boosting и изучаем параметры из данных обучения, оптимизируя нашу целевую метрику. Хотя NDCG — недифференцируемая функция, и мы не можем вычислить градиент, существуют хорошие приближения оптимизации NDCG, одним из которых является LambdaRank. LambdaRank, применяемый к MART, также известен как LambdaMART. Мы используем реализацию этого алгоритма, предоставленную XGBoost. Давайте не будем забывать об оптимизации гиперпараметров, перекрестной проверке и тестировании на протянутом наборе данных. И вот у нас есть обученная модель, готовая к онлайн-тестированию!

Несколько слов о том, как модели обслуживаются. Мы используем возможности нашей поисковой системы Solr, а именно плагин Solr LTR. Все функции уже определены в коллекции объявлений, некоторые из них рассчитываются в режиме реального времени (например, схожесть текста), а некоторые периодически обновляются (например, CTR). Так что нам нужно только загрузить модель и настроить наш запрос на Solr. Схема высокого уровня системы будет выглядеть так:

Кстати, если вы используете Solr и хотите преобразовать модель XGBoost в модель Solr MART, вот код, который мы используем.

Результаты

С помощью A/B-тестирования мы оценили влияние нового алгоритма сортировки на следующие уровни:

  1. Количество конверсий на первой странице увеличилось на 12%
  2. Общее количество покупок на платформе увеличилось на 5%
  3. Количество уникальных покупателей увеличилось на 4%

Учитывая тот факт, что проект был нацелен на поисковый путь, было опасение, что решение может навредить опыту продавца, например, показывая лишь небольшую часть продавцов на первых позициях. Наоборот, количество уникальных продавцов, с которыми связались, увеличилось!

Чтобы проверить нашу методологию офлайн-оценки, мы также попытались сопоставить офлайн-метрики с онлайн-метриками. Ниже вы можете увидеть, как метрика NDCG, рассчитанная на исторических данных, коррелирует с результатами A/B-теста, а именно с количеством конверсий на первых 10 позициях результатов поиска (нормировано):

Эта картина заставляет нас поверить в то, что система офлайн-оценки достаточно надежна, т. е. мы можем выбрать лучших кандидатов на основе офлайн-баллов. Это необходимо для принятия взвешенных решений перед запуском новых моделей.

Заключение

Мы поделились с вами

  • Как сортируются объявления на OLX и почему это важно
  • Как LTR стал мощным инструментом, объединяющим покупателей и продавцов на OLX
  • Как правильно спроектированная автономная оценка может помочь вам принимать правильные решения и быстро выполнять итерации

На этом фронте еще много места для развития, мы планируем ввести больше факторов, чтобы повысить качество моделей, например. расстояние между покупателем и продавцом, цена товара и т. д. Помимо компонента моделирования, этот проект также включает в себя множество инженерных задач, которые у нас будет еще один шанс решить. Так что следите за новостями и не стесняйтесь обращаться, если у вас есть какие-либо вопросы! :)