Привет Хабр! Меня зовут Илья Ненахов, я руковожу разработкой платформы продвижения продуктов на рынке Яндекс. Думаю, многие знакомы с самим сервисом, поэтому подробно о нем рассказывать не буду. Предлагаю посмотреть на сайт немного под другим углом, а именно как на механизм, который пытается найти оптимальную точку в трехмерном пространстве: интересы пользователя, интересы магазинов и интересы самого сервиса. .

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

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

Какую проблему решает платформа продвижения?

Задачу платформы на Яндекс Маркете можно сформулировать просто: дать магазинам инструмент для увеличения заказов, но при этом не снижать качество обслуживания, чтобы не расстраивать пользователей. Это вроде бы понятно, но, как я сказал выше, баланс этого механизма очень легко нарушить.

Чтобы этого избежать и успешно выполнить задачу, необходимо все просканировать. Тогда вы сможете использовать уже типичные для Яндекса инструменты: математическую оптимизацию, машинное обучение, а также создавать метрики и системы мониторинга. Понятно, что цифровизировать рост продаж легко, но что делать с качеством обслуживания? И что именно для нас означает качество?

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

ЧИТАТЬ  На этой неделе темы от Instagram расширяются до веб-браузеров

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

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

Важно отметить, что все наши инструменты схожи в B2B-части. Магазин указывает, какой процент от продажной цены он готов потратить на продвижение (тариф), и мы обещаем привлечь дополнительные заказы. С точки зрения рекламных технологий — это CPA-инструмент: магазин платит за то, что заказ был выполнен, а наша задача — выполнить этот заказ. Понятно, что эта задача для сайта предполагает гораздо больший риск, чем для магазина: мы не получим ни цента, пока не оформим дополнительный заказ, в отличие, например, от CPM-рекламы, где оплата производится просто ради показа. . Но, как показывает практика, CPA-инструменты гораздо эффективнее для продавцов.

Рейтинг на боковой панели премиум-класса

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

Положение блока может меняться в зависимости от параметров запроса. Для некоторых запросов блок может отсутствовать или отображаться ниже.

А это упрощенная схема того, что происходит под капотом.

Блок «Клиенты» относится ко всем возможным типам клиентских приложений: Android, iOS, веб. На некоторых платформах запросы отправляет не сам клиент, а посредник. Лучший другно для данной статьи это не так важно.

Из куба метапоиска мы уже попадаем в основной бэкенд нашей платформы. На схеме он разделен на две части — мета и базовую. Meta запрашивает все базовые узлы для каждого входящего запроса, и каждый базовый узел ищет свою часть (фрагмент) индекса. Мотивация такого разделения проста: данных на Маркете очень много, мы уже давно не можем хранить весь поисковый индекс в памяти одной машины, поэтому вынуждены его разделить. В мета есть еще один важный уровень логики: вычисление факторов запроса для ранжирования моделей машинного обучения. Некоторые из этих факторов весьма требовательны к производительности и, кроме того, рассчитываются на графическом процессоре, поэтому они размещаются в отдельных микросервисах.

ЧИТАТЬ  Нестабильность рейтинга Google Search продолжается после ноябрьского обновления ядра

Поговорим о факторах более подробно. В задачах ранжирования результатов поиска появились и давно стали популярными нейронные сети (статья по использованию подхода ДССМ в поиске яндекса вышел из на Хабре в 2016 году). Я думаю, что основная причина, по которой нейронные сети и поиск так долго работали вместе, — это возможность независимого получения векторных представлений документа и запроса. Это очень важно для поиска, поскольку создание поискового индекса — это по большей части автономный процесс. Если мы сможем вычислить вектор документа в автономном режиме и во время выполнения оставить только вычисление скалярного произведения в части запроса, мы значительно ускорим всю систему. Это особенно верно для современных архитектур, основанных на я трансформировался: Если бы мы могли рассчитывать модели DSSM на ЦП, то BERT-подобные модели уже требуют графического процессора во время выполнения.

Подводя итог, на этом этапе логики мы используем множество моделей нейронных сетей DSSM и Offer-bert, обученных для разных целей — как актуальных, так и коммерческих.

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

Отбор кандидатов

При отборе кандидатов мы используем инвертированный индекс. Подобную структуру данных можно найти в любой открытой поисковой системе. Он позволяет быстро находить документы, содержащие слова (термины) запроса, и при этом выбирать основные документы с помощью простой функции релевантности, например. ТФ‑IDF Или БМ25.

Выше я писал о векторных представлениях и о том, почему их удобно использовать в поиске. Но еще лучше использовать их на этапе отбора кандидатов, чтобы сразу получить лучших. Вообще разработка технологий решения задачи поиска ближайших соседей заслуживает отдельной статьи. Сейчас существует множество специализированных баз данных для этой задачи, и популярные базы данных приобретают аналогичную функциональность. Пример — pgvector для PostgreSQL.

Мы используем собственные индексы kNN, которые возвращают нам наиболее популярные документы, близкие к запросу. Отбор кандидатов заканчивается получением лучших документов по инвертированному индексу и индексу kNN.

ЧИТАТЬ  Видеоблог № 203: Джессика Бадде о переходе на другую роль цифрового маркетолога и настораживает клиентов

Фильтровать по релевантности

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

Хорошо, премиум-вставка должна соответствовать запросу, но что это значит? Как это измерить? Вот тут-то и приходит на помощь большой опыт Яндекса в создании поисковых систем. В упрощенном виде то, что здесь происходит, показано на рисунке ниже.

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

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

Рейтинг на основе ставок

На этом этапе мы включаем полный тарифный учет. Формула ранжирования выбрана так, чтобы документы с более высоким рейтингом поднимались выше.

Возникает вопрос: почему бы здесь просто не отсортировать по скорости? Если бы у нас была CPM-реклама (напоминаю, в CPM-рекламе рекламодатель платит за показы), то ранжирование по аукциону было бы лучшим решением.. Но в нашем случае для CPA-рекламы нужно больше заказов по ссылке. Классификация по предложениям не самая оптимальная с точки зрения заказов.

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

p_{покупка} = f(факторы)

Мы можем найти функцию f с помощью ML. ЧатBoost хорошо справляется с этой задачей. Под факторами мы подразумеваем набор факторов, включающий в себя, среди прочих, модели нейронных сетей, которые я описал выше. Знание p_purchase позволяет нам использовать математические ожидания GMV и доходов от рекламы в окончательном рейтинге.

E(GMV) = p_{покупка} × ценаE(ДОХОД) = p_{покупка}×цена×затраты

Цена — цена, предлагаемая магазином.

Комиссия – ставка, установленная магазином.


В AdTech происходит много интересного, особенно в эко-сегменте. Надеюсь, мне удалось немного приоткрыть завесу тайны о том, как работают такие системы, и это будет полезно сообществу.

Source