# Структура и термины
Правила блока состоят из следующих элементов:
- Алгоритм;
- Условие;
- Действие;
- A/B-тест.
Компонуя эти элементы в цепочки (блок-схемы, если по-программистски), вы можете создать миллионы комбинаций правил для решения всех возможных задач вашего бизнеса и не привлекать для этого команду разработки. Совсем.
# Алгоритмы

Алгоритмы выбирают из базы данных товары, соответствующие правилам алгоритма и сортируют их в особом порядке. Внутри алгоритма используются несколько слоев сортировки и фильтров:
- Фильтр по цели алгоритма;
- Сортировка по персонализации;
- Сортировка по sales rate;
- Сортировка по маржинальности;
- Сортировка по пользовательскому профилю;
- Сортировка по сезонности;
- И так далее (еще с десяток фильтров и сортировок).
Ниже описывается базовая суть каждого алгоритма без учета сортировок и фильтров по персонализации, сезонности и прочему. То есть, каждый алгоритм содержит в себе персонализацию и другие слои алгоритма, но в описании ниже это не фигурирует.
# Популярные
Возвращает товары, сортируя их по sales rate (это внутренний показатель ценности товара в REES46, учитывающий продаваемость, цену и маржу). Sales rate рассчитывается по продажам товаров за 1 месяц. Период может быть изменен в настройках магазина. Подробнее о расчётах можно прочитать здесь.
# Похожие
Товары, которые находятся в тех же категориях, что и текущий просматриваемый товар (сравнивается весь список переданных категорий), и находятся в диапазоне цен от 85% до 125% от текущего товара. Если товаров в таком ценовом сегменте недостаточно для того, чтобы заполнить блок, разброс цен увеличивается до 50–150%. Дополнительно могут быть применены фильтры по параметрам товара.
Учёт совпадений параметров товаров
При поиске похожих товаров, их параметры фильтруются на стороне бэкенда. Однако, учитываются не все параметры, а только простые. Параметры в виде сложных структур (например, массивы или JSON) не используются при сравнении товаров в рамках алгоритма.
# С этим товаром также покупают
Товары, которые чаще всего встречаются в других заказах, в которых встречается текущий просматриваемый товар. То есть статистически рассчитанные сопутствующие товары.
Периоды расчёта:
- 1 неделя
- 2 недели
- 1 месяц
- 2 месяца
- 3 месяца
- 6 месяцев
- 1 год
# Вы недавно смотрели
Товары, которые пользователь недавно смотрел, но которых ещё нет в его корзине. Также исключается текущий просматриваемый товар, если блок с алгоритмом выводится в карточке товара.
Период расчета: 14 дней.
# С товарами в вашей корзине также покупают
Алгоритм, аналогичный «С этим также покупают», но применяемый ко всей текущей корзине покупателя. Чаще всего блок с таким алгоритмом показывают на странице корзины.
Периода расчета: при посещаемости выше 300К визитов/мес - 1 месяц, при посещаемости меньше 300К визитов/мес - 3 месяца.
# Искавшие это также купили
Алгоритм, который анализирует выполненный поисковый запрос и то, какие товары покупали другие покупатели, которые выполняли такой же поисковый запрос. Размещается на странице с результатами поиска. Внимание: товары из этого алгоритма не всегда соответствуют самому поисковому запросу (например, пользователь искал „samsung galaxy” и в процессе купил не только этот смартфон, но еще и холодильник, батарейки и пылесос). Поэтому рекомендуется выводить его только тогда, когда полный поиск вернул пустой результат.
Периода расчета: при посещаемости выше 500К визитов/мес - 1 неделя, при посещаемости меньше 500К визитов/мес - 2 недели.
# У вас скоро закончится
Для регулярно потребляемых товаров (FMCG). Рассчитывает периодичность, с которой покупатель заказывает один и тот же товар и прогнозирует, когда товар закончится у покупателя и пора пополнить запасы. Может выводиться в корзине или личном кабинете. Для расчёта среднего периода покупки берется выборка заказов за последние три месяца. Алгоритм будет возвращать товар в течение прогнозируемого временного окна, когда ожидается следующий заказ. Это окно рассчитывается на основе среднего времени между повторными покупками для данного товара или пользователя.
# Новинки
Товары, отмеченные в фиде как «Новинка».
# Определенные товары
Возможность указать определенные товары, которые нужно показать покупателю.
Выбрать нужные товары можно с помощью поля, в которое нужно ввести id, а затем выбрать товар из появившегося списка.

# Собственные рекомендации
Показывает сопутствующие товары, если они заданы ритейлером. Если в фиде передается тег accessories с сопутствующими товарами, то выводятся эти товары.
# Частично похожие
В отличие от похожих товаров возвращает товары, которые совпадают как минимум по одной категории.
# Ранее вы добавляли эти товары в корзину
Показывает товары, которые пользователь добавлял в корзину.
Периода расчета: 30 дней
# С этим товаром также смотрят
Показывает товары, которые просматривали другие пользователи, после того, как посмотрели данный товар.
Периода расчета: 1 день
# Следующая лучшая покупка
Показывает товары, которые лучше всего подходят для следующей покупки.
# Популярные товары в категориях
Формирует блок с товарами заданной категории. В этот блок попадают самые популярные из них.
Задать нужные категории можно в поле "Источники данных". Доступные опции:
- Категории, в которых пользователь просматривал товары
- Категории, в которых пользователь добавил товары в корзину
- Категории, в которых пользователь добавлял товары в избранное
- Категории, в которых пользователь оформлял заказ
- Ручной ввод - выбор из списка имеющихся категорий

# Вам это будет интересно
Алгоритм позволяет отобразить товары, которые потенциально могут заинтересовать пользователя. К перечню товаров применяются бусты, они позволяют отдавать приоритет определённым категориям.
# Сейчас покупают
Показывает товары с наибольшим объёмом покупок за последний период (по умолчанию 24 часа). Список периодов доступен в отдельном меню, которое появляется при выборе алгоритма из списка.
Доступные опции: 1 час, 3 часа, 6 часов, 12 часов, 1 день, 3 дня, 1 неделя.
Отдельно нужно сказать об опции "Использовать глобальные настройки". Для этого алгоритма есть отдельное поле в настройках товарных рекомендаций.

# Наиболее активные
Алгоритм отбирает товары с которыми пользователь наиболее активно взаимодействовал за определённый период.
При выборе алгоритма из списка появляются два поля дополнительных настроек, которые позволяют задать тип взаимодействия и период (в днях).
Тип взаимодействия - это событие, которое фиксируется в Clickhouse. Доступные опции:
- Просмотр
- Добавление в корзину
- Удаление из корзины
- Покупка
- Добавление в избранное
- Удаление из избранного

# Сейчас в избранном
Рекомендации ограничены категориями из wish-листа пользователя. Если у пользователя нет товаров в wish-листа, блок рекомендаций не будет показан.
Если у блока есть другие входящие категории (для блока заданы дополнительные фильтры), то будут показаны те из них, что пересекаются с wish-листом.
# Условия

Условия позволяют проверить некоторые характеристики профиля покупателя, его поведение, характеристики товара или внешних параметров и в зависимости от этого использовать тот или иной алгоритм. Например, можно проверить, есть ли текущий просматриваемый товар в корзине у покупателя и, в зависимости от этого, применить алгоритм «Сопутствующие товары» (если в корзине) или «Похожие» (если еще не в корзине).
| Условие | Параметры | Что делает |
|---|---|---|
| Товар и категория: | ||
| Цена на текущий товар | Равно, больше чем, меньше чем, между | Проверяет цену просматриваемого товара на соответствие диапазону, выбранному в параметрах |
| Текущий товар в корзине | Да / Нет | Проверяет, находится ли просматриваемый товар в корзине |
| Идентификатор текущего товара | Содержит / Не содержит | Проверяет, содержит или не содержит ID просматриваемого товара ID, заведенному в параметрах |
| Бренд, к которому относится товар | Равно / Не равно [Список брендов] | Проверяет, совпадает или не совпадает бренд просматриваемого товара с брендом, выбранным в параметрах |
| Текущая категория содержит | Содержит / Не содержит [Список категорий] | Проверяет, совпадает или нет просматриваемая категория с категорией, выбранной в параметрах. Рекурсивно проверяет все дочерние категории |
| Текущая категория равна | Да / Нет [Список категорий] | Проверяет точное совпадение совпадение категории продукта с категорией,указанной в настройках правила. Не работает с дочерними категориями продукта |
| Принадлежит ли текущий товар к категории | Содержит / Не содержит [Список категорий] | Проверяет, совпадает или не совпадает категория просматриваемого товара с категорией, выбранной в параметрах |
| Принадлежит ли товар в корзине к категории | Содержит / Не содержит [Список категорий] | Проверяет, принадлежат ли товары в корзине категории выбранной в параметрах |
| Есть ли в корзине товар из просматриваемой категории | Да / Нет | Проверяет, есть ли в корзине товар из просматриваемой категории |
| Наличие товаров в корзине | Да / Нет | Проверяет, есть ли в корзине товары |
| Текущий товар содержит параметр | Поле для ввода параметра [ Равно, не равно, содержит, не содержит, меньше чем, больше чем] | Проверяет наличие параметра в свойствах товара |
| Мерчант, к которому относится товар | Да / Нет | Проверяет относится ли товар к мерчанту, который пользователь выбирает из списка при настройке условия |
| Пользователь: | ||
| Пол пользователя | Равно / Не равно | Проверяет пол текущего клиента на соответствие параметрам |
| День рождения | Равно, больше чем, меньше чем [Диапазон] | Проверяет день рождения пользователя на соответствие параметрам |
| Уровень дохода | Равно / Не равно | Проверяет уровень дохода клиента на соответствие параметрам |
| Пользовательский сегмент | Равно / Не равно | Проверяет, соответствует ли текущий клиент заранее настроенному сегменту |
| Как долго существует профиль пользователя | -- // -- | Проверяет время существования профиля с момента захода на сайт |
| Зарегистрирован | Да / Нет | Проверяет, зарегистрирован ли клиент. Проверяется по наличию переданного ID пользователя |
| Есть карта лояльности | Да / Нет | Проверяет наличие карты лояльности |
| Устройство | Содержит / Не содержит | Проверяет, с какого устройства клиент зашел на сайт |
| География | Содержит / Не содержит | Проверяет, с какого города клиент по данным из CDP |
| Карта лояльности выдана в ... (город) | Содержит / Не содержит | Проверяет, в каком городе выдана карта лояльности |
| Свойства профиля | Список свойств | Проверяет передаваемое свойство профиля |
| Тег профиля | Список тегов | Проверяет передаваемый тег профиля |
| Действия: | ||
| Оформлял заказы в выбранный период (в днях) | Временные периоды | Проверяет, оформлял ли заказы за выбранный период |
| Сколько оформил заказов за выбранный период | Равно, больше чем, меньше чем, между [Диапазон] | Проверяет, сколько оформил заказов за выбранный период |
| Посмотрел товар определенной категории | Содержит / Не содержит [Список категорий] | Проверяет, товары из каких категорий смотрел клиент за выбранный период |
| Добавил в корзину товар определенной категории | Содержит / Не содержит [Список категорий] | Проверяет, добавлял ли клиент в корзину товары из категории, выбранной в параметрах, за выбранный период |
| Купил товар определенной категории | Содержит / Не содержит [Список категорий] | Проверяет, покупал ли клиент товары из категории, выбранной в параметрах, за выбранный период |
| Посмотрел товар бренда | Содержит, не содержит [Список брендов] | Проверяет, смотрел ли клиент товары бренда, выбранного в параметрах, за выбранный период |
| Добавил в корзину товар бренда | Содержит, не содержит [Список брендов] | Проверяет, добавлял ли клиент в корзину товары бренда, выбранного в параметрах, за выбранный период |
| Купил товар бренда | Содержит, не содержит [Список брендов] | Проверяет, покупал ли клиент товары бренда, выбранного в параметрах, за выбранный период |
| Одежда и обувь: | ||
| Размер обуви | Равно, больше чем, меньше чем, между [Диапазон] | Проверяет, размер обуви клиента на соответствие размеру, выбранному в параметрах |
| Размер рубашки / блузы | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Размер футболки | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Размер нижнего белья | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Размер брюк | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Размер пиджака / жакета | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Размер носков | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Размер ремня | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Размер головного убора | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Размер перчатки | Равно, больше чем, меньше чем, между [Диапазон] | -- // -- |
| Дети: | ||
| Количество детей | Равно, больше чем, меньше чем, между [Диапазон] | Проверяет количество детей на соответствие количеству, выбранному в параметрах |
| Возраст ребенка | Равно, больше чем, меньше чем, между [Диапазон] | Проверяет возраст ребенка на соответствие выбранному в параметрах |
| Пол ребенка | Равно / Не равно | Проверяет пол ребенка на соответствие выбранному в параметрах |
| Программа лояльности: | ||
| Статус | -- // -- | Проверяет статус программы лояльности на соответствие выбранному в параметрах |
| Бонусы | Равно, больше чем, меньше чем | Проверяет число бонусов на соответствие выбранным в параметрах |
| Бонусов до следующего уровня | Равно, больше чем, меньше чем | Проверяет число бонусов на соответствие выбранным в параметрах |
Это еще не все
Список условий постоянно пополняется и эта документация не может описать все возможности. Смотрите актуальный список условий в редакторе блоков рекомендаций.
# Фильтры алгоритмов

Помимо базовых фильтров алгоритмов вы можете применить дополнительные фильтры, которые будут применены к набору товаров, выданных алгоритмов. Это нужно, например, чтобы вывести товары не дешевле какой-то цены или исключить товары каких-то брендов.
| Фильтр | Настройки | Что делает |
|---|---|---|
| Показать товары только из выбранных категорий | Список категорий | Выбирает товары только из категорий, переданных в настройках фильтра |
| Не показывать товары из выбранных категорий | Список категорий | Не показывает товары из категорий, переданных в настройках фильтра |
| Показывать товары только из категории текущего товара | Да / Нет | Подбирает товары с одинаковым списком категорий |
| Показывать из категорий, в которых пользователь просматривал товары | - | Выбирает товары из категорий, в которых пользователь смотрел товары |
| Показывать товары из категорий, добавленных пользователем в корзину | - | Выбирает товары из категорий, в которых пользователь добавлял товары в корзину |
| Показывать товары из категорий, купленных пользователем ранее | - | Выбирает товары из категорий, в которых пользователь покупал товары |
| Показывать товары, совпадающие по параметру | Список параметров текущего просматриваемого товара | Выбирает товары, которые содержат аналогичные значения выбранных параметров у просматриваемого товара |
| Не показывать товары, совпадающие по параметрам | Список параметров текущего просматриваемого товара | Выбирает товары, которые не содержат аналогичные значения выбранных параметров у переданного в запросе товара |
| Показывать товары, соответствующие бренду просматриваемого товара | Да / Нет | Показывает или исключает товары того же бренда, что и просматриваемый товар |
| Показывать товары из той же корневой категории | Да / Нет | Выбирает товары только из той корневой категории, в которой находится просматриваемый товар |
| Не показывать выбранные товары | Список товаров | Исключает выбранные товары из показа |
| Показывать товары в ценовом диапазоне | Минимальная и максимальная цена | Показывает товары, которые соответствуют выбранному ценовому диапазону |
| Показывать доступные в указанном количестве | Минимальное и максимальное количество | Показывает товары, которые соответствуют выбранному в диапазоне количеству |
| Показывать только в соответствии со статистикой | - | Выбирает товары из статистики совместных покупок за месяц. Статистика выводится на странице просмотра информации о товаре |
| Показывать товары только выбранных брендов | Список брендов | Показывает товары, которые содержат бренд из списка |
| Не показывать товары выбранных брендов | Список брендов | Не показывает товары, которые содержат бренд из списка |
| Товары со скидкой | Да / Нет | Показывает или исключает товары, которые содержат «старую» цену |
| Не использовать прогрессивную персонализацию | - | Не учитывает алгоритмы прогрессивной персонализации в ранжировании товаров (по характеристикам профиля покупателя: пол, возраст, дети, домашние животные, и так далее) |
| Только определенного пола | Список полов | Показывает товары, соответствующие выбранному полу |
| Показывать товары, отмеченные как новинки | Да / Нет | Показывает или исключает товары, для которых был передан флаг «Новинка» |
| По прибыли | Больше чем, Меньше чем, Равно и поле для суммы | Отфильтровывает товары больше, меньше или равные определённой сумме |
| Размер скидки | Значения от 0 до 100 | Отфильтровывает товары по размеру скидки в указанном диапазоне |
| Показывать товары только выбранных мерчантов | Список мерчантов | Отфильтровывает товары по принадлежности к выбранному мерчанту |
| Не показывать товары выбранных мерчантов | Список мерчантов | Товары мерчанта, выбранного из списка при настройке фильтра, не будут показаны |
| Показывать товары, соответствующие мерчанту просматриваемого товара | Да / Нет | В рекомендации попадут товары того же мерчанта, что и у просматриваемого товара |
| Взаимодействовал с товаром | Список с периодами взаимодействия от 1 часа до 1 года | Будут показаны только те товары, с которыми пользователь взаимодействовал в течение установленного периода |
| Не показывать товары из избранного | - | Фильтр исключает товары, находящиеся в списке избранного (wishlist) у пользователя. |
| Минимальная стоимость товара для достижения суммы в корзине | Поле для ввода данных | Назначение фильтра - показывать товары, цена которых не превышает разницы между заданным пороговым значением и текущей суммой корзины пользователя |
| Показывать из категорий, в которых пользователь добавил товар в избранное | - | Фильтр ограничивает категории показа товарами из категорий, ранее добавленных пользователем в избранное (wishlist) |
| Показывать товары, соответствующие значениям выбранного параметра | Поле для ввода параметров и поле для значений | Фильтр добавляет фильтрацию по переданным значениям параметров, например: размеру, цвету и т.п. |
| Не показывать товары, соответствующие значениям выбранного параметра | Поле для ввода параметров и поле для значений | Фильтр исключает из результатов товары, соответствующие заданным значениям параметров |
| Показывать товары выбранной маржинальности | Больше чем/Меньше чем/равно и поле для значений | Фильтруются товары по диапазону маржинальности, переданному в параметрах |
| Исключить товары из той же группы, что и текущая | - | Исключаются из выдачи товары с тем же значением group_id, как и у текущего товара |
| Сортировать по рейтингу | Опции По возрастанию и По убыванию | Сортировка результатов по параметру rating в заданном порядке (возрастающем или убывающем) |
| Игнорировать входящие параметры | - | Фильтр очищает все ранее установленные фильтры, категории и сортировки и начинает подбор товаров для блока |
| Не показывать из категорий, в которых пользователь просматривал товары | - | Фильтр исключает товары из категорий, которые пользователь просматривал, но не купил |
| Не показывать товары из категорий, купленных пользователем ранее | - | Исключаются товары из категорий, в которых пользователь уже совершал покупки |
| Не исключать ранее купленные товары | - | Фильтр позволяет не исключать ранее купленные товары, чтобы они снова отображались в рекомендациях |
| Не исключать находящиеся в корзине товары | - | Фильтр разрешает отображать в рекомендациях товары, которые уже находятся в корзине у пользователя |
| Не показывать товары из категорий, добавленных пользователем в корзину | - | Исключаются товары из категорий из которых пользователь добавил товары в корзину |
Это ещё не всё
Список фильтров постоянно пополняется и эта документация не может описать все возможности. Смотрите актуальный список фильтров в редакторе блоков рекомендаций.
Механика расчёта прибыльности
Расчёт прибыльности товаров для конкретного магазина производится только в случае, если у него есть товары с ненулевой маржой.
Общая выручка за период группируется по уникальному идентификатору товара (item_uniqid).
Период можно установить в настройках магазина. Доступен диапазон расчёта от одного до двадцати четырёх месяцев. По умолчанию рассчитывается прибыльность за шесть месяцев.
Для расчёта прибыли товар должен присутствовать как в данных о маржинальности, так и в данных о выручке. То есть, считаются только проданные товары с известной маржой.
Показатель прибыли представляет собой произведение выручки с товара на его маржу, которая предварительно делится на 100.
# Действия

Действия позволяют применить ко всему блоку определенные изменения: отсортировать полученные товары в определенном порядке или переименовать название блока рекомендаций (ту часть, которую будет видеть покупатель).
# Переименовать заголовок блока
Меняет название блока. Применяется, если после ветки условий основной алгоритм блока изменился. В примере, если показываем сопутствующие или похожие товары в зависимости от того, есть ли текущий товар в корзине или нет, мы можем переименовать блок в «Похожие товары» или «С этим товаром покупают».
В форме два блока: Заголовок блока и Сссылка.
Данные, помещённые в эти поля используются на этапе рендеринга HTML-шаблона. На этом этапе подставляются рекомендации, а также заголовок и ссылка.
# Пересортировать товары
Отсортировывает товары, которые вернули алгоритмы выше этого элемента, в соответствии с выбранным правилом:
- По выручке, которую принес каждый товар за месяц (↑↓)
- По количеству заказов товара за месяц (↑↓)
- По стоимости товара (↑↓)
- Отсортировать равномерно. Сортирует и фильтрует товары так, чтобы в выдаче не доминировала одна конкретная категория.
# A/B-тест

Запускает A/B-тестирование веток в блоке. При добавлении элемента A/B-тест текущая ветка правил дублируется и в начале дерева правил появляется элемент A/B-тестирования. Вы можете изменить одну из веток и потом сравнивать эффективность каждой ветки.
Подробнее об A/B-тестировании блоков рекомендаций читайте в разделе «A/B-тестирование».