Я работаю над качеством поиска в Яндекс Маркете. И качество поиска прямо связано с ощущением счастья пользователя от шопинга. Счастье нужно измерять. Самый очевидный способ — посмотреть, купил ли что-нибудь пользователь. Но мы не всегда приходим в магазин или на Маркет, чтобы взять что-то конкретное.
Человек может:
- Формулировать требования к покупке по мере сравнения вариантов.
Пример с соковыжималкой:
Предположим, он ищет соковыжималку, но ещё не знает, какие они бывают. По мере изучения товаров он примерно начинает понимать, что хочет. На старте у него нет ни фиксированного бюджета, ни требований, только мечта. Дальше нужно сопоставить мечту с конкретной карточкой товара. С точки зрения метрики покупки, пользователь будет довольно долго бесцельно бродить в начале — но мы понимаем, что эта часть была очень важна, там он изучал предложение и понимал, как устроен мир.
- Приходить с примерным бюджетом и выбирать что-то под него, например, при поиске подарка. В этой ситуации у пользователя даже нет мечты, он ходит по категориям и ищет что-то, что его «зацепит».
- Более-менее точно понимать, что хочет купить (часто вплоть до модели товара), но искать лучшее предложение.
- Знать модель товара и проверять, насколько честна цена на неё, насколько хороши отзывы и так далее.
То есть с точки зрения человека покупка — далеко не единственная цель. Маркетплейс используется и для развлечения, и для изучения предложений, и даже для проверки цены, когда стоишь в очереди к кассе в реальном магазине.
Мы работаем над улучшением поиска по товарам. Поэтому нам нужна была метрика, которая показывает удовлетворённость людей тем, что мы показываем на выдаче. Мы искали её в несколько итераций, и сейчас я хочу рассказать о том, что мы уже придумали.
Метрика «я бы это купил»
Здесь всё было достаточно очевидно: робот приходил с запросами, собирал несколько выдач поиска и нёс их в Толоку оценивать релевантность найденного запросу. Напомню, что Толока — это краудсорсинговая платформа, где работники выполняют простые задания, в том числе оценивают релевантность, Мы агрегировали оценки, полученные от толокеров, и примерно знали, насколько качество выдачи соответствует желаемому.
Такая метрика считается не на реальных пользователях, а заранее, на «точно таких же, только других» толокерах. Да, с ней легко экспериментировать, потому что не нужно запускать эксперимент на пользователях. И как раз с ней можно двигаться быстро и проводить очень много экспериментов. Её проблема в том, что она не учитывает всю многогранность пользовательских сценариев и не допускает персонализации.
В Маркете и вообще в покупках нет универсальных суждений, а есть только оценочные, зависящие от конкретного пользователя.
Пример с телевизорами:
Когда мы говорим «хороший телевизор», то каждый представляет разные вещи: для кого-то это устройство с последней выставки за пару миллионов рублей, для кого-то — 17-дюймовый ТВ за 7 тысяч рублей, а для кого-то — устройство в машину, потому что этот кто-то водитель. Наша офлайн-метрика из Толоки имела все шансы сдвигать поисковую выдачу Маркета в сторону вкусов и предпочтений аудитории Толоки. И, конечно, по ней нельзя было оценить индивидуальные предпочтения пользователя на основе его предыдущих действий на Маркете.
Метрика «я бы это посмотрел»
Для онлайн-метрики мы начали учитывать непосредственно оформленные заказы, добавления в корзину и клики на тех выдачах, где пользователь открыл хотя бы одну карточку. Гипотеза в том, что если человек что-то искал, а потом не кликал в карточки товаров, то выдача неправильная. Разумеется, всё несколько сложнее, но примерную идею вы представляете.
Оценка некликнутых карточек сразу дала очень многое: у нас появилась возможность провести эксперимент для улучшения поиска. По сути, каждый пользователь Маркета оценивал качество выдачи при каждом поиске товара.
Эта версия метрики была достаточно хороша для практического применения, но по-прежнему не отражала все аспекты поведения пользователей на Маркете, а офлайн-метрика от толокеров была быстрой и недостаточно персонализированной.
Подробнее о минусах:
- Обе метрики не обладали нужной чувствительностью к незначительному изменению выдачи. Требовались большие и длинные эксперименты, чтобы понять, как изменения влияют на действия пользователя.
- Происходили граничные случаи, когда метрика «я бы это посмотрел» не отражала удовлетворённость пользователя своим шопингом. Чаще всего такое случалось либо на сверхдлинных сессиях, либо на тех, где пользователь предпочитал набирать что-то в корзину прямо из выдачи. К примеру, на выдаче по семенам это абсолютно нормально. Карточки тут открывать не обязательно.
- Абсолютно нормально, когда пользователь открывает сразу много сессий. Вовлечение в каждую отдельную из них окажется ниже, то есть предыдущая метрика будет показывать ухудшение качества поиска, но в итоге пользователь может быстро собрать информацию и купить необходимое. Предположим, вы открыли десять вкладок браузера с разными запросами, быстро проанализировали ассортимент, а потом сразу перешли к покупке в первом окне. Пользователи ищут нелинейно, тут никакие традиционные аналогии с походом в реальный магазин не работают.
- Метрики не совсем корректно оценивали влияние места товара в выдаче. Поскольку в одной из итераций мы считали кликнутые выдачи, а не количество открытых карточек на выдачу, это не показывало привлекательность самой выдачи как таковой.
- В экспериментах оказалось, что если по одному и тому же запросу подмешивать сопутствующие товары, то итоговый результат по офлайн-метрике будет противоречить тому, что по факту делают живые пользователи. Например, если вы ищете лазерный принтер по конкретной модели, то в идеальном математическом мире нужно показать только принтеры. Мы же можем показать принтеры и сразу посоветовать в выдаче картридж. Последнее лучше с точки зрения продуктового поведения пользователей, но это не совсем корректно учитывалось метриками.
- Нам часто нужно понимать, что же пользователь хочет, по его действиям. Как я уже говорил, запрос [телевизор] и клики по выдаче могут, по идее, дать понять, какие телевизоры человек представляет перед запросом, и соответствующим образом менять приоритеты в дальнейших выдачах. Кстати, в случае телевизоров самое большое разделение — на smart TV и stupid TV.
То есть обе метрики работали, но мы решили сделать ещё один подход, чтобы лучше предсказывать истинное счастье пользователя и сделать метрику более чувствительной к его действиям.
Метрика «общее счастье пользователя»
Нам нужна была метрика, которая покажет не столько удовлетворённость покупкой, сколько общее счастье от выбора. Мы сдвинули оценку качества поведения пользователя с итоговой покупки как результата к счастью в процессе.
Итак, хорошая сессия пользователя — это когда он «тусуется» в маркетплейсе с пользой для себя. Если смотреть на его действия, то он что-то ищет, видит карточки товаров, читает их и переформулирует запросы поиска не сразу, а узнав что-то новое. Само по себе изменение запросов поиска и множественные запросы не означают, что что-то идёт не так, просто представления о товаре меняются по мере выбора.
Плохая сессия — когда пользователь не воспользовался выдачей либо сразу же начал её модифицировать, понимая, что что-то пошло не так. Например, фильтрация по цене сверху вниз может говорить, что по запросу вместо искомого товара выпали расходники к нему, а не сам товар, то есть поиск не справился.
Таким образом, нам нужно оценивать качество проведённого на Маркете времени.
Формулу шопоголического счастья распишем как:
Выбор + Покупки ? Время
То есть счастье в процессе поиска товара можно оценивать по предложенному ассортименту, совершённым покупкам и затратам времени — которые не всегда минимальны, и это нормально. Грубо говоря, у нас есть два основных сценария:
- «Наилучший выбор». Рациональный подход: пользователь получил точную выдачу (или несколько последовательных, всё более точных), пролистал карточки, добавил вещь в корзину и купил.
- «Шопинг». Это скорее развлекательный подход либо сценарий без чётко сформулированной цели в начале. Пользователь смотрит товары, знакомится с ними, изучает отзывы и вообще хорошо проводит время, лишь примерно представляя, что ему нужно. Да, по мере этого процесса он также постепенно переходит к «Наилучшему выбору», но в начале сессии (или сессий) ведёт себя совершенно иначе, порой даже контрпродуктивно с точки зрения первого сценария. Именно эти сценарии «блуждания по рынку» часто оцениваются метриками неверно.
В сценарии «Наилучший выбор» основу новой метрики составляет скорость клика по товару, который затем был куплен, — как и в одной из предыдущих метрик. Но при этом также учитывается изначальный выбор товаров, то есть какие карточки конкурировали с искомой. Разница ярко видна на таких вещах, как ноутбук или стиральная машина: ваше счастье, скорее всего, будет достигнуто не от скорости покупки первого подходящего варианта, а от осознания того, что вы не смогли бы найти ничего лучше для себя в принципе. Именно это мы пытаемся измерить новой группой метрик.
В сценарии «Шопинг» всё меняется. На практике оказывается, что пользователю нужны не постепенно сужающиеся выдачи, а постепенно расширяющиеся, а потом снова сужающиеся. Сейчас поясню на примере, что я имею в виду.
Предположим, пользователю нужно несколько чехлов для iPhone XR. Сначала он выбирает обычный прозрачный силиконовый чехол, потом видит Soft touch и добавляет его тоже, а потом обнаруживает, что у силиконовых прозрачных есть вариант с защитными углами — и снова пополняет корзину. Метафора, которая лично мне нравится, — поход в супермаркет. На входе вы помните про хлеб и колбасу, на выходе у вас целая корзина вещей, но все вам нравятся.
То есть выдачи «Шопинга» несут в себе свойства рекомендательного фида, из которого можно совершить несколько покупок.
И для сценария «Наилучший выбор», и для сценария «Шопинг» мы также используем группу штрафов, которые показывают, что с выдачей что-то пошло не так. В человекочитаемом виде они могут выглядеть так:
- Если пользователь применил фильтр — значит, мы не угадали, что выдавать.
- Если пользователь сортирует — значит, мы не совсем верно сформировали порядок в выдаче.
- Если пользователь несколько раз переформулирует запрос без его сужения — значит, мы не можем понять, чего он хочет (скорее всего, на уровне синонимов). Например, он ищет попсокет для телефона, но не знает, что это называется попсокетом.
- Если пользователь делает несколько последующих запросов без увеличения метрики удовлетворённости — значит, выдача завела его в тупик.
Гифка с контейнерами:
Пример поискового запроса с сужением: запрос [контейнер] → несколько кликов по выдаче, последний из которых на вакуумный контейнер → дозапрос [вакумный контейнер] → покупка:
Разумеется, мы сейчас покрываем далеко не все сценарии покупки. Есть ситуации, когда пользователь с точки зрения метрики не счастлив, но при этом полностью решает свою задачу — например, по какой-то причине хочет только посмотреть выдачу и уйти. Когда-нибудь доберёмся и до таких случаев. Ну а вы теперь представляете, что мы делаем в более частых сценариях.
Новая метрика лучше себя ведёт: меньше противоречит нашим экспериментам (про которые мы точно знаем, улучшают они поиск или ухудшают) и значительно чаще показывает в них значимое изменение, чем все предыдущие. Она чувствительнее к действиям пользователя и больше соответствует реальному улучшению поиска.
Мы немного приблизились к тому, как измерить счастье покупателя по косвенным данным в его действиях. Думаю, настоящий уровень счастья можно было бы измерить по энцефалограмме или уровню гормонов в крови, но в этом году у нас ещё нет технической возможности так сделать. Поэтому мы стараемся построить наиболее близкое приближение, и это прямо влияет на выдачу.