В этой статье пойдет речь о том, как строятся персональные рекомендации на Avito. Исторически бизнес-модель Avito устроена так, что выдача объявлений в поиске происходит по времени их размещения. При этом пользователь может покупать дополнительные услуги для того, чтобы поднять свое объявление в поиске в том случае, если со временем объявление опустилось далеко в поисковой выдаче и перестало набирать просмотры и контакты.
В контексте данной бизнес-модели не очевидно, зачем нужны персональные рекомендации. Ведь они как раз нарушают логику сортировки по времени и те пользователи, которые платят за поднятие объявления, могут обидеться за то, что чье-то другое объявление мы «поднимаем» и показываем пользователю совершенно бесплатно только потому, что наша рекомендательная модель посчитала это объявление более релевантным для какого-то пользователя.
Однако сейчас персональные рекомендации становятся “must have” для классифайдов (и не только) по всему миру. Мы хотим помогать пользователю в поиске того, что ему нужно. Уже сейчас всё более значительная доля просмотров объявлений на Avito производится с рекомендаций на главной странице приложений или рекомендаций похожих объявлений на карточке товара. В этом посте я расскажу, какие именно задачи решает наша команда в Avito.
Виды рекомендаций
Сначала рассмотрим, какие типы рекомендаций могут быть полезны на Avito.
User-item рекомендации
В первую очередь это user-item рекомендации, то есть рекомендации объявлений для пользователя. Они могут быть двух типов. Первый — это товары или услуги, которые в настоящий момент ищет пользователь. Второй тип — дополняющие их товары или услуги. Например, чехлы для телефона, если человек ищет телефон. Или услуги перевозки мебели, если человек покупает или продает квартиру. Или кляссеры для хранения коллекции филателиста, если человек ищет почтовые марки.
User-item рекомендации мы доставляем до пользователей сейчас тремя способами:
- блоки с рекомендациями на главной странице мобильных приложений;
- баннеры с рекомендациями в поисковой выдаче на desktop;
- email- и push-рассылки с подборкой рекомендованных объявлений.
User-category рекомендации
Также бывает нужно рекомендовать не конкретные объявления, а категории товаров (user-category рекомендации), перейдя в которые пользователь уже сам уточняет поисковые фильтры. User-category рекомендации так же делятся на два типа: рекомендации категорий текущих интересов пользователя и кросс-категорийные рекомендации. Сейчас мы используем этот тип рекомендаций в push-рассылках и на главной странице приложений.
Кросс-категорийные рекомендации особенно важны для Avito, так как большинство пользователей Рунета так или иначе хоть раз пользовались Avito, но часто «сидят» в одной категории. Многие не догадываются, что на Avito кроме личных вещей еще можно эффективно продать квартиру или автомобиль. Кросс-категорийные рекомендации помогают нам расширить спектр категорий, в которых пользователь является продавцом или покупателем, и таким образом увеличить вовлеченность пользователей.
Item-item рекомендации
Еще одним перспективным направлением рекомендаций на Avito являются item-item рекомендации, то есть рекомендации товаров для других товаров. Этот тип рекомендаций также делится на рекомендации похожих товаров (аналоги) и дополняющих товаров или услуг. Это направление является особенно важным, так как, в отличие от медийных порталов (фильмы, музыка), пользователь, как правило, приходит на Avito за чем-то конкретным, и нам сложно заранее предсказать текущие предпочтения пользователей. Но если пользователь уже сам смотрит какой-то товар, то тут мы можем посоветовать ему альтернативы или дополняющие товары, и они с большой вероятностью будут релевантны его текущему поиску. Рекомендации похожих объявлений показываются на карточке объявления, а также используются в email- и push-рассылках.
User-item рекомендации для классифайдов
Теперь немного углубимся в задачу user-item рекомендаций, как наиболее интересную с теоретической точки зрения. Входными данными являются:
- история действий пользователей на сайте: просмотры, поисковые запросы, контакты, избранное;
- профили пользователей: данные из привязанных аккаунтов соц. сетей, локация;
- все активные объявления на Avito: заголовок, описание, параметры, цена.
При этом объем данных сравнительно большой: 20 млн. активных пользователей, 35 млн. активных объявлений.
Постановка задачи звучит следующим образом: для каждого активного пользователя показать top-N объявлений с наибольшей вероятностью запроса контакта (звонок или отправка сообщения).
Несмотря на то, что формулировка задачи звучит как классическая задача любой рекомендательной системы, её построение для Avito имеет существенные отличия от задач рекомендаций медийного контента: фильмов, музыки и прочего. Во-первых, ликвидные товары частников быстро продаются, не успев даже набрать хорошую историю по просмотрам и запросам контактов. Классические алгоритмы коллаборативной фильтрации устроены так, что объявления с короткой историей не попадают в рекомендации. Чаще рекомендуются долго живущие объявления, которые, как правило, представляют меньший интерес для покупателей.
Также пользователя, как правило, интересует типовой товар, для которого может быть много активных объявлений. Например, ему нужно купить конкретную модель iPhone, а у кого — уже не так важно. Поэтому строить рекомендации лучше не на объявлениях, а на типовых товарах. Для этого мы строим специальные алгоритмы кластеризации.
Еще одной особенностью рекомендаций на Avito является то, что объявления создаются обычными пользователями и содержат ошибки, неполные описания. Это приводит к тому, что нам приходится серьезно работать над text processing, извлечением полезных признаков из описаний объявлений.
Методы
Теперь несколько слов о том, какие методы мы используем для построения рекомендаций.
Offline-модели
Исторически мы использовали и продолжаем использовать модели, которые обрабатывают click stream пользователей в «batch» режиме. Эти алгоритмы позволяют реагировать на новые действия, совершенные пользователем, с отставанием в 1-2 часа. Мы называем их offline-моделями.
Offline-модели рекомендаций глобально делятся на коллаборативные и контентные. Очевидно, что каждая из этих моделей имеет свои плюсы и минусы и наилучшие результаты показывают гибридные модели, которые учитывают как историю действий пользователей, так и контент объявлений. Именно гибридную модель мы и используем в качестве основной для offline-рекомендаций.
Online-модели
Offline-модели способны генерировать качественные рекомендации, но они не могут быстро реагировать на изменения интересов пользователя. Это — их существенный минус. Например, если пользователь начал искать какой-то новый товар на Avito, то мы хотим в рамках той же сессии начать рекомендовать ему подходящие товары. Для этого мы должны в реальном времени учитывать интересы пользователя. Такие модели мы называем online-моделями.
Их особенностью является то, что они более сложны с архитектурной точки зрения (время от момента совершения действия пользователем до обновления рекомендаций — не более 1 секунды). Классическая online модель основана на построении online профиля интересов пользователя, с помощью которого отбираются самые свежие и релевантные объявления. Из-за жестких требований к производительности online-алгоритмы, как правило, более простые, чем offline.
Оценка качества моделей
После того, как новая модель создана, её нужно как-то оценить. Целевой метрикой по компании является прирост количества сделок на Avito. Все offline- и online-метрики так или иначе должны коррелировать с ней.
Для оценки offline-моделей существует ряд отличных метрик, таких как precision, recall, NDCG, R-score и другие.
Не всегда удается подобрать такие offline-метрики, которые хорошо коррелируют с целевой метрикой компании. Здесь на помощь приходят online-метрики (CTR, конверсия в контакты, прирост в уникальных покупателях). На online сплит-тестах мы можем сравнить рекомендации от различных моделей и различные frontend-интерфейсы. Для оптимизации метапараметров моделей хорошо подходит метод многоруких бандитов.
Итоги
Перед командой рекомендации Avito стоят амбициозные задачи, которые требуют глубокого и активного исследования методов рекомендаций, способных выдерживать нагрузки Avito по производительности и показывать отличные результаты на целевых метриках.
Для того, чтобы найти оптимальные подходы, мы читаем много статей, ездим и выступаем на конференциях и проводим конкурсы. Не так давно закончился наш конкурс по рекомендациям, и мы не планируем на этом останавливаться. Призываем всех заинтересованных помочь нам в этом нелегком труде путем участия в наших конкурсах. А мы постараемся не скупиться на призовые :). Также у нас периодически открываются вакансии, о которых мы обязательно сообщаем в slack-канале ODS.
Кроме этого, мы и сами участвуем в конкурсах. BTW, в 2016 и 2017 годах мы вошли в десятку лучших команд на крупнейшем международном соревновании по рекомендательным системам Recsys Challenge. В следующей статье планирую подробнее рассказать о нашем решении Recsys Challenge 2017.
Спасибо за внимание!
Комментарии (21)
Vitalley
26.09.2017 13:29Заметил что Avito всегда даёт рекомендации приблизительно по той же цене и тот же товар по цене ниже он не показывает, может это совпадение…
vleksin Автор
26.09.2017 13:30Цена — это один из параметров модели и товары по схожей цене при прочих равных имеют приоритет. Специально мы не ищем более дешевые предложения, но стоит над этим подумать, спасибо.
Vitalley
26.09.2017 13:43Разброс цены в полтора раза — вполне нормальная практика для продавцов на Avito, особенно для вторичного рынка.
safari2012
26.09.2017 18:02Уважаемый Авито. Почему вы «аквариумные растения» включили в категорию «животные»?
Где логика?
Прошу прощения за оффтопик, но наболело. Для тех кто не в курсе, в этой категории можно размещать всего 2 бесплатных объявления. В результате, мне проще эту траву выбрасывать в мусорку…
Goury
26.09.2017 18:27А мне вот очень интересно почему компьютерные помощи и прочий мусор до сих пор не выгнали из раздела IT вакансий.
Они там реально засрали все доски и ничего адекватного потенциальным соискателям найти за ними невозможно.
zkid
26.09.2017 18:31А как боретесь с «холодным стартом»? Насколько я знаю, это острая проблема для рекомендательных сервисов
vleksin Автор
26.09.2017 18:34Наша online модель умеет строить рекомендации с первых кликов пользователя на сайте. Пока остаются непокрытыми пользователи, которые первый раз открыли главную страницу и мы о них совсем ничего не знаем, но мы работаем над тем, чтобы и им что-то начать показывать. К тому же, доля таких пользователей не так уж велика.
zkid
27.09.2017 09:59А про нее расскажите? Читал недавно статью, как китайцы из Cheetah Mobile для местного Дзена неплохо решали проблему старта с помощью transfer learning.
Juster
26.09.2017 20:01+2Авито, пожалуйста, сделайте нормальный поиск. Набираешь слово какое-то и авито выводит кучу объявлений, никоим образом мне не нужных, и никак не относящихся к поисковому запросу. Это очень выматывает, и разочаровывает. Уже сколько лет одно и то же, ничего не найдешь…
hard_sign
27.09.2017 11:11+1Вот ни одна из рекомендаций Авито не была полезной. «Смотрите, что мы для вас нашли!» — гордо сообщает объявление (или хуже того – письмо). А там – полная ерунда, которой я никогда не интерерсовался.
Я не против ваших экспериментов с искусственным интеллектом, но против спама. Увы, приходится терпеть, потому что другого приличного сервиса объявлений нет.
2PAE
27.09.2017 12:54Зачем вам сторонняя реклама в мобильном приложении? Неужели всё так плохо с деньгами? Или жадность манагеров не знает границ?
n_demitsuri
27.09.2017 13:31Наверное, очень круто, что вы умеете в рекомендации, но почему вы присылаете их неотключаемыми пушами в приложение?
vleksin Автор
27.09.2017 16:43+1В ближайшем будущем появится возможность отключать определенные типы пушей и email'ов, в том числе рекомендации.
Vcoderlab
27.09.2017 16:44Здравствуйте. Подскажите пожалуйста, как объяснить поиску на авито, что мне нужно совсем не то, что он думает.
Я ищу ксеноновую лампу ДКсТ, но поиск упорно исправляет это на «даст». Соответственно, находит совсем не то.
Обычно, например в яндексе, в таких случаях под полем поиска появляется ссылка «исправлена опечатка в слове «дкст»», позволяющая запустить поиск уже конкретно по введённому слову без автоисправления. На авито такого нет.vleksin Автор
27.09.2017 16:45Релевантностью поиска занимается другой отдел и они в курсе подобного рода проблем. Сейчас ведется активная работа по улучшению качества поиска.
Neuromantix
29.09.2017 15:36Скажите, почему тогда эта элементарная проблема наблюдается уже 3, а то и 4 год.
И второй вопрос — какая религия не позволяет сделать строку поиска сразу на главной странице? Надо ткнуть в «категорию», потом обнулить все задавшиеся параметры и тогда уже искать.vleksin Автор
29.09.2017 15:37+1Спасибо за коммент, передам тем людям, которые занимаются этим вопросам.
DonPrus
Есть ли «срок жизни» рекомендации и отличается ли он в зависимости от категории товара?
А то в гугле поискал Роспись стены в Москве и меня засыпало рекламой на эту тематику настолько долго, что я бы полрайона мог закрасить.
Вы как то работаете с этим?
vleksin Автор
Да, сейчас сроки фиксированные по категориям, но мы работаем над тем, чтобы более «умно» определять, когда пользователю данный товар уже не нужен.