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

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

Напомним, что компонентом мы называем часть алгоритма, которая отвечает за определенную функциональность и может обеспечивать одно или несколько свойств. Компоненты, которые решают схожие проблемы для разных алгоритмов могут отличаться. Это объясняется тем, что разные алгоритмы помогают решать разные задачи покупателей. Например, компонент «Холодный старт» для алгоритмов «Сопутствующие товары» и «Альтернативы» должен найти товары, которые соответствуют каждому из этих алгоритмов. Для «Сопутствующих товаров» — товары, которые хорошо дополняют покупку, а для «Альтернатив» — варианты, которые можно рассмотреть вместо текущего товара.

Как и в прошлой статье, для каждого компонента расскажем:   

  • для решения какой проблемы необходим компонент;

  • как мы решаем проблему в нашем алгоритме;

  • как определить наличие проблемы в системе рекомендаций;

  • какие свойства обеспечивает компонент.

Алгоритм «Альтернативные товары» и его компоненты

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

Использование поведения покупателей

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

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

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

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

Компонент обеспечивает следующие свойства:

  • эффективность — можно найти наиболее подходящие альтернативы;

  • специфичность — учитывается поведение, связанное с текущим товаром;

  • актуальность — рекомендации меняются вместе с изменением поведения покупателей.

Решение проблемы холодного старта

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

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

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

Компонент обеспечивает следующие свойства:

  • покрытие — рекомендации формируются для товаров без достаточного количества данных о поведении покупателей.

Алгоритм «Популярные товары» и его компоненты

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

Увеличение разнообразия товаров в рекомендациях

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


Retail Rocket Group для решения данной проблемы показывает в алгоритме товары из наибольшего количества разных категорий. Для каждой категории выбираются наиболее популярные товары. Например, если в магазине больше 5 категорий, а в блоке рекомендаций 5 позиций, то всегда будет показываться по одному самому популярному товару из 5 самых популярных категорий.

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

Компонент обеспечивает следующие свойства:

  • эффективность — рекомендации дают лучшее представление об  ассортименте магазина;

  • охват — показывается больше товаров из различных категорий.

Использование иерархии категорий

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

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

Компонент обеспечивает следующие свойства:

  • покрытие — формируются рекомендации для родительских категорий.

Увеличение влияния актуальных данных

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

В нашем алгоритме, чем новее данные, тем большим влиянием на рекомендации они обладают. При этом чем старше данные, тем медленнее уменьшается их влияние на рекомендации. Например, данные, которые поступили в систему сегодня и месяц назад имеют разное влияние на рекомендации. А данные, которые получены год и полтора года назад влияют примерно одинаково.

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

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

Компонент обеспечивает следующие свойства:

  • актуальность — рекомендации показывают товары, соответствующие поведению покупателей в данный момент.

Использование различных типов событий

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

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


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

Компонент обеспечивает следующие свойства:

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

Фильтрация аномалий в данных

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

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

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

Компонент обеспечивает следующие свойства:

  • логичность фильтруются данные, которые искажают рекомендации.

Алгоритм «Персональные интересы к категориям» и его компоненты

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

Влияние категорий на формирование интереса

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

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

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

Компонент обеспечивает следующие свойства:

  • специфичность — используется контекст покупателя и категории;

  • эффективность — рекомендации соответствуют задаче покупателя.

Формирование интереса к сопутствующим категориям

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

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

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

Компонент обеспечивает следующие свойства:

  • эффективность — помогает покупателю найти дополняющие заказ товары;

  • покрытие — формируются интересы к большему количеству категорий.

Расчет персональных рекомендаций в реальном времени

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

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

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

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

Компонент обеспечивает следующие свойства:

  • эффективность — рекомендации соответствуют текущей задаче покупателя;

  • актуальность — рекомендации изменяются своевременно.

Алгоритм «Аксессуары» и его компоненты

Алгоритм помогает покупателю подобрать к товару дополняющие его аксессуары.

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

Автоматическое определение категорий с аксессуарами

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

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

Компонент обеспечивает следующие свойства:

  • эффективность — алгоритм помогает покупателю лучше решать задачу поиска аксессуаров;

  • актуальность — рекомендации автоматически учитывают появление новых аксессуаров;

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

Алгоритм «Апселл» и его компоненты

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

При этом рекомендации данного алгоритма могут существенно отличаться от рекомендаций в ранее рассмотренном алгоритме «Альтернативы».

Использование популярности товаров

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

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

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

Компонент обеспечивает следующие свойства:

  • эффективность — рекомендации показывают с наибольшей вероятностью подходящие товары.

Заключение

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

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

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

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

Комментарии (2)


  1. vojaganto
    17.03.2024 10:27

    Я сломал себе мозг, пока пытался прочесть эту статью. Возможно, не следует переизобретать слова. Алгоритмы в программировании - это немножко про другое...


    1. Israfilo_w
      17.03.2024 10:27

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

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