{"id":14293,"url":"\/distributions\/14293\/click?bit=1&hash=05c87a3ce0b7c4063dd46190317b7d4a16bc23b8ced3bfac605d44f253650a0f","hash":"05c87a3ce0b7c4063dd46190317b7d4a16bc23b8ced3bfac605d44f253650a0f","title":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0441\u0435\u0440\u0432\u0438\u0441 \u043d\u0435 \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0432 \u043d\u0438 \u043a\u043e\u043f\u0435\u0439\u043a\u0438","buttonText":"","imageUuid":""}

Глубокая персонализация товарных витрин интернет-каталога

А в чем-таки проблема?

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

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

В результате, как правило, это приводит к довольно парадоксальной ситуации — в целом дефолтная сортировка одинаково неудобна для всех. Ситуация существенно усугубляется если вы торгуете плохо параметризуемыми «фешн-товарами».

Именно с такой ситуацией я и столкнулся в 2018 году, имея в каталоге компании Адамас более 1200 моделей ювелирных колец. Что в свою очередь породило гипотезу: если возможно сделать персональную рекомендацию к товару в карточке товара, то почему нельзя персонализировать весь каталог?

Путь к успеху

Шаг 1: Подготовка данных

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

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

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

Кроме того, мы создали некий «цифровой паспорт» каждого изделия присвоив ему более 200 параметров (110 фич мы получили путем анализа изображений товара, остальные импортировали из системы товароучета и производственной системы учета).

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

Результат статистического анализа поведения пользователей дошедших до покупки показал, что есть важные для них параметры (цвет металла, тип камня в изделии, гендер), а есть существенно не влияющие на выбор (например, количество камней в изделии). Кроме этого, оказалось, что цена как таковая не имеет существенного значения, а имеет значение расположение цены на данное украшение относительно диапазона цен для сопоставимых товаров.

Для каждого просмотренного пользователем товара составлялись 4 вектора соответствующие категории, цвету металла, вставкам, и гендеру, представленным в виде унитарного кода.

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

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

Шаг 2: Формирование признаков сортировки каталога, наиболее полно отвечающих ожиданиям каждого пользователя.

Формирование матрицы «оценок» всех товаров каталога для пользователей из каждого отдельно взятого кластера происходит следующим образом: каждый товар, с которым совершалось какое-либо действие (просмотр, добавление в «список желаний», добавление в корзину, онлайн-резервирование, заказ и т.п.), получает балл, соответствующий самому «дорогому» из всех действий, произведенных с ним данным пользователем. Баллы за повторные просмотры суммируются до тех пор, пока не достигнут порогового значения.

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

Графически это можно представить следующим образом:

Каждая точка соответствует проекции одного поведенческого сценария в трехмерную плоскость. Цвет точки соответствует коду кластера.

Шаг 3: Внедрение решения

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

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

После получения трех значимых событий в рамках одной сессии (например, просмотра 3х товаров) система присваивает пользователю некий кластер. В случае, если это уже известный нам пользователь, запрашиваются 10 последних действий пользователя за последний месяц, и мы сразу можем дать пользователю релевантные рекомендации.

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

Примеры работы

У системы есть 2 типовых сценария работы на которых она показывает наибольшую эффективность.

Сценарий 1: Сортировка каталога на основе пользовательского интереса

Use-case:

  • Пользователь переходит в категорию «Кольца».
  • Пользователь ищет кольца с сапфирами из белого золота.
  • Пользователь находит кольцо с сапфиром, добавляет его в корзину, переходит в категорию «Серьги» и ищет серьги к данному кольцу.

При первом визите неизвестного нам пользователя система выдаст ему дефолтную сортировку каталога, которая будет выглядеть примерно так:

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

При этом, поскольку сортировка присваивается для всех товаров, не опираясь на существующую структуру каталога при переходе в другую категорию (например, «Серьги») мы также получим релевантную сортировку:

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

Сценарий 2: Кастомизация главной страницы, и заглавных изображений категорий.

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

Это создало интересный эффект: система сама начала собирать коллекции товаров для пользователей (причем как имеющие признаки коллекций, так и объединять схожие визуально изделия в свои собственные «коллекции»)

Вот так например стал выглядеть каталог по-умолчанию для одного из кластеров:

На сегодняшний день похожую технологию кастомизации главной страницы применяют многие маркетплейсы (например, Яндекс.Маркет), но в 2018 году это было в диковинку.

Результаты

В результате финального тестирования на более чем 120 000 пользователей система показала следующие результаты:

  1. Рост конверсии в оформленный заказ на 69%.

  2. Рост времени проведенного на странице продукта на 9%.

  3. Сокращение количества просмотренных карточек товара на 5% (в данном случае это хорошо, т.к. путь до совершения транзакции сократился).

Так результаты выглядели внутри GA

P.S.

Немного о грустном. На настоящий момент посмотреть на систему в работе не удастся, так как вся команда которая разрабатывала и поддерживала продукт в полном составе (но не одновременно) покинула компанию Адамас, что ожидаемо через некоторое количество времени привело к прекращению функционирования системы.

0
3 комментария
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку
Станислав Ильин
Автор

Если уходить совсем в математику, то для выделения фич из изображений использовали нейросетевой классификатор без верхних (полносвязанных) слоев, а для расчета рекомендаций для кластеров пользователей вычисления проходили в 2 этапа. На первом происходила непосредственно кластеризация пользовательских данных методом k-средних, а на втором – прогнозирование рейтингов товаров для каждого кластера методом Non-Negative Matrix Factorization (NNMF) с методом инициализации “nndsvd” и методом численного решения “Multiplicative Update solver”.

В общем, можно сказать что использовали ИИ )

Ответить
Развернуть ветку
Аккаунт удален

Комментарий недоступен

Ответить
Развернуть ветку

Комментарий удален автором поста

Развернуть ветку
0 комментариев
Раскрывать всегда