#
🧠 Рекомендательные стратегии в Gravity Field
Рекомендательные стратегии управляют логикой того, какие товары будут показаны пользователю в персонализированных блоках: на страницах товара, категорий, корзины и т.д.
Стратегия — это связка рекомендательного алгоритма, фильтров и дополнительных правил, с помощью которых можно управлять выдачей товаров.
#
🎯 Зачем нужны стратегии?
- Использовать алгоритмы персонализации: например, показать похожие товары или товары, купленные вместе.
- Управлять показом: исключить просмотренные, закрепить промо-позиции, отфильтровать по бренду или категории.
- Делать контент персональным: разные стратегии для разных аудиторий.
- Гарантировать отображение: fallback обеспечит показ, даже если основной алгоритм не дал результат (логика fallback фиксирована и не настраивается).
#
⚙️ Как создать стратегию
- Перейдите в раздел Assets → Strategies
- Нажмите Создать стратегию
- Укажите:
- Название и описание
- Тип страницы (Product / Category / Cart и т.д.)
- Алгоритм (или разные алгоритмы для каждого слота) 📎 Подробнее: Описание алгоритмов
- Предустановленные и/или кастомные фильтры
- Нажмите Сохранить
💡 Одна стратегия может использоваться в нескольких кампаниях и виджетах.
🔄 Перемешивание (Shuffle): можно включить перемешивание выдачи, чтобы каждый пользователь видел разный порядок товаров.
#
🧠 Algorithm per slot
Можно задать разные алгоритмы для разных позиций в выдаче.
Например:
- Слот 1:
Recently Viewed
- Слот 2–3:
Affinity
- Слот 4:
Popularity
📌 Это удобно, чтобы комбинировать потребности пользователя (например, напомнить о просмотренном) и бизнес-задачи (продвигать популярное).
Ограничения:
- В пользовательских правилах (фильтрах) доступны только
Pin
, если используются разные алгоритмы в слотах.
#
🔀 Shuffle (перемешивание товаров)
В любой стратегии можно включить перемешивание товаров — это позволяет показывать пользователю разный набор SKU при каждом просмотре страницы, даже если он входит в одну и ту же аудиторию.
По умолчанию товары показываются строго по порядку, в соответствии с рейтингом алгоритма.
#
Как это работает
- При включенном
shuffle
, система запрашивает в 4 раза больше товаров, чем нужно для виджета. - Из них случайным образом выбирается подмножество для показа.
- Например, если в блоке 4 слота — мы выбираем 4 случайных товара из топ-16.
💡 Это работает для всех алгоритмов, включая fallback.
#
Особенности:
- Shuffle применяется отдельно внутри каждого алгоритма.
- Если сработал fallback — в нём тоже будет выполнено перемешивание независимо.
- Pinned-позиции не перемешиваются — закреплённые товары остаются в своих слотах.
- Перемешивание никак не влияет на работу фильтров и fallback-цепочек.
📌 Перемешивание особенно полезно при большом объёме трафика или если вы хотите избежать "замыливания" одного и того же набора рекомендаций.
#
🧰 Предустановленные фильтры
Фильтры бывают двух типов:
- На основе поведения пользователя
- На основе контекста страницы
#
🧩 Фильтрация по категории
Фильтры по категории позволяют ограничить выдачу товарами из той же категории, что и текущий товар или страница.
Варианты:
- Полное совпадение категории — товары из точно такой же категории (вся иерархия).
- Родительская категория — товары из более широких категорий (родительских уровней).
Пример:
- Просматриваемая категория:
Men → Shoes → Sneakers
- При включённом фильтре
Родительская категория
, в выдачу попадут:Men → Shoes → X
Men → Shoes → Y
- А если ничего не найдено — включается fallback на другой алгоритм
⚠️ Родительская категория не ослабляется. Даже при недостатке товаров она сохраняется как обязательное условие.
#
🧩 Фильтрация по свойствам товара
Фильтры по свойствам позволяют включать или исключать товары, совпадающие по атрибутам текущего товара.
Примеры полей:
- Бренд (Brand)
- Цвет (Color)
- Пол (Gender)
- Ключевые слова (Keywords)
Пример логики ослабления:
- Установлены фильтры:
Brand | Color | Gender
- Если не хватает товаров:
- Сначала убирается
Gender
- Затем
Color
- Остаётся только
Brand
, как несбрасываемое условие
- Сначала убирается
⚠️ В логике ослабления первый указанный атрибут не ослабляется, остальные могут быть сняты последовательно, если система не находит нужное количество товаров.
Пример:
- Фильтр по:
Material | Pattern | Size
- Если нет достаточного количества товаров, система оставит только
Material
#
ℹ️ Ослабление фильтров
Предустановленные фильтры позволяют гибко управлять выдачей — но не все фильтры ведут себя одинаково. Некоторые из них ослабляются, если система не находит нужное количество товаров. Это важно для полноты выдачи в виджетах.
- Сначала убирается последний фильтр
- Если всё ещё недостаточно товаров — следующий и т.д.
- Первый фильтр не ослабляется
Если после ослабления всё ещё недостаточно товаров — включается fallback-алгоритм.
📌 Важно: Первый атрибут в фильтре никогда не ослабляется, даже если это приведёт к пустым слотам.
#
Пример:
Допустим, вы настроили фильтр на выдачу товаров, совпадающих по следующим атрибутам:
- Категория:
Men > Shoes > Sneakers
- Атрибуты товара:
Brand
,Color
,Gender
🔁 При недостатке подходящих товаров:
- Сначала ослабляется
Gender
, затемColor
; - Затем
Sneakers
, потомShoes
; - Останутся только:
Brand
,Men
.
Таким образом система стремится сохранить ключевые параметры, и всё ещё вернуть как можно более релевантную рекомендацию.
Рекомендуется: Располагая фильтры, всегда ставьте самые важные атрибуты первыми — они будут зафиксированы.
#
🔍 Фильтры по поисковому запросу
Доступно только на странице поиска.
Фильтр позволяет отображать только те товары, в которых содержится поисковая строка пользователя. Поиск осуществляется по полю, указанному в настройках фильтра, и работает по принципу “содержит”.
⚠️ Убедитесь, что выбранное поле присутствует в продуктовом фиде, и поддерживает текстовый поиск.
Пример использования:
- Пользователь ищет "кроссовки"
- В фиде есть поле
product_name
- Фильтр отбирает товары, у которых значение поля
product_name
содержит "кроссовки"
#
🧠 Фильтры на основе поведения пользователя
Фильтры поведения пользователей позволяют исключить из выдачи товары, которые пользователь уже просматривал или покупал — как онлайн, так и офлайн.
Логика работы фильтра:
- ❗️Фильтры не ослабляются.
- Если не найдено подходящих товаров после применения фильтра — в виджете могут остаться пустые слоты.
#
📦 Fallback: что происходит, если не хватает товаров
Fallback включается автоматически и не настраивается вручную.
Пример fallback-цепочек:
#
⚙️ Пользовательские фильтры (Custom Rules)
Пользовательские фильтры позволяют настраивать выдачу товаров по любым полям из продуктового фида. Это даёт максимальную гибкость при управлении логикой стратегий.
#
🎯 Что можно настроить:
- Фильтры по любому полю фида:
brand
,color
,material
,is_sale
,custom_tag
и т.д. - Три типа правил:
Include
— включить товары с заданными условиямиExclude
— исключить товары с заданными условиямиPin
— закрепить конкретный товар в определённой позиции
#
📌 Закрепление товаров (Pin)
- Продвижения промо-позиций
- Ручного размещения конкретных SKU
❗ В слотах с
Pin
алгоритм не применяется.
#
🧩 Применение к слотам
- Фильтр можно применить ко всем слотам стратегии или только к выбранным.
- Если фильтр применяется только к одному слоту — он влияет только на него.
- Один слот может иметь несколько условий фильтрации.
#
🔍 Работа условий
Поле price
— единственное, которое воспринимается системой как число. Это позволяет задавать диапазоны цен в фильтрах.
📢 Если вы хотите задать диапазон, используйте И:
"Цена больше чем A и меньше чем B" — ✅
"Цена больше чем A или меньше чем B" — ❌
#
Условия для поля price
:
equal
more than
at least
less than
at most
#
Условия для остальных полей (строковые значения):
is
is not
contains
empty
is not empty
#
💡 Особенности:
- Поддерживаются только поля, присутствующие в фиде.
- Можно указать до 30 фильтров на одну стратегию.
- Для числовых значений (например,
price
) доступны сравнения по диапазонам. - Условия внутри фильтра работают по логике
AND
, между фильтрами —OR
. - Пользовательские фильтры (в отличие от предустановленных) не ослабляются — они применяются строго.
- Фильтры с типом
contains
работают только с начала строки и могут повлиять на производительность. - Если в Pin указан SKU товара, то:
- Система попытается получить этот товар напрямую из товарного фида, если он там есть;
- Если указано несколько SKU:
- Сначала система проверяет, вернула ли стратегия один из этих SKU — если да, берётся он;
- Если стратегия ничего не вернула, система выберет один из указанных SKU на основе Affinity-профиля пользователя.
- Include / Exclude фильтры по слотам:
- Сначала проверяются товары, полученные из стратегии;
- Если ни один не подходит — система ищет в товарном фиде (с учётом всех фильтров, но без ослабления);
- Найденные товары сортируются по популярности;
- Только если товар удовлетворяет фильтрам, он попадает в слот.
📌 Это важно учитывать при построении сложной логики фильтрации, особенно если вы работаете с пинами или настраиваете индивидуальные правила под каждый слот.
#
🧠 Динамические фильтры
Для более гибкой логики фильтрации используйте динамические фильтры.
Они позволяют:
- исключить товары, сильно отличающиеся по цене
- фильтровать по признаку, совпадающему с товаром на странице
- адаптировать рекомендации под поведение или контекст
- учитывать значения, рассчитанные в момент визита пользователя (например, сколько осталось до бесплатной доставки)
- исключить товары дешевле суммы, недостающей до бесплатной доставки
- подобрать товары из нужного региона или сезона
- применить сегментные правила в реальном времени
#
Как использовать:
- В frontend-кампаниях — через JS-функции внутри вариации
- В API-кампаниях — через
selector.args.recs_campaign.realtimeRules
вchoose
-запросах - В интерфейсе стратегии — через Real-time Rules
#
📌 Вариант 1: JS-функция внутри вариации
Пример front-end функции, с помощью которой можно исключить из финальной выдачи товары, отличающиеся по цене на 50% от изначального:
function getRules() {
const rules = [];
const currentPrice = getCurrentPrice();
if (!currentPrice) return rules;
const gte = currentPrice*0.5;
const lte = currentPrice*1.5;
rules.push({
id: 1,
type: 'include',
slots: [],
query: {
conditions: [
{
field: 'price',
arguments: [
{
action: 'less_or_equal',
value: [lte],
},
],
},
{
field: 'price',
arguments: [
{
action: 'more_or_equal',
value: [gte],
},
],
},
],
},
});
return rules;
}
📌 Подобные фильтры можно адаптировать под любой атрибут товара — от цены до категорий или флагов on_sale
.
#
⚡ Вариант 2: Real-time Rules в интерфейсе
Теперь вы можете задать динамический фильтр на основе эвалюатора прямо в интерфейсе стратегии, без кода.
#
Как это работает:
- Эвалюатор (Evaluator) рассчитывает нужное значение в момент попадания пользователя в сценарий
- Это значение можно использовать как аргумент для фильтрации
#
Как настроить:
- При редактировании стратегии, в секции Custom Rules нажмите Новое правило
- Выберите нужное поле фида (например,
price
) - Отметьте чекбокс Use real-time rules
- В выпадающем списке выберите нужный эвалюатор
- Укажите условие фильтрации (
>=
,equal
,contains
и т.д.)
💡 Эвалюаторы настраиваются в разделе Assets → Evaluators, Подробнее
#
🧬 Что такое group_id?
group_id
объединяет варианты одного товара — например, майка разных размеров. Алгоритмы работают с группами товаров, а не отдельными SKU.
- Алгоритм выбирает один товар из группы
- Это исключает дублирование одинаковых позиций в виджете
- Для Recently purchased и Recently viewed выдаются все SKU, которые пользователь смотрел или покупал.
#
❓ FAQ
Могу ли я показать товары из той же категории, что и текущий товар?
→ Да, используйте фильтр Include same category
. Он доступен как предустановленный фильтр, так и в пользовательских правилах.
Как работает fallback?
→ В случае недостатка товаров:
- Сначала система ослабляет фильтры (если они допускают ослабление),
- Если этого недостаточно — включается fallback на другой алгоритм (по фиксированной логике, изменить её нельзя).
Применяются ли фильтры к fallback-алгоритмам?
→ Да. Все фильтры и правила (включая Pin, Include и Exclude) продолжают действовать на fallback-алгоритмы.
Почему в блоке дублируются похожие товары?
→ Если в фиде не указан group_id
, система не сможет объединить похожие товары (например, одну модель в разных цветах). При корректно настроенном group_id
дубли исключаются — отображается только один товар из группы.
Будет ли исключение дублей, если на странице несколько виджетов?
→ Да. Gravity Field автоматически исключает одинаковые товары между виджетами, если они размещены на одной странице и используются кампании типа Recommendations
.
Хочу закрепить товар в первом слоте — как это сделать?
→ Используйте правило Pin
, укажите нужный SKU и слот. Если товара нет в выдаче, он будет подтянут из фида или выбран по Affinity-профилю (если указано несколько SKU).
Могу ли я задать фильтр только для одного слота?
→ Да. Пользовательские фильтры можно применять как ко всей стратегии, так и к конкретным слотам.
Возвращаются ли только товары в наличии?
→
- Да, по умолчанию все стратегии, кроме
Recently Viewed
,Recently Purchased
иLast Purchase
, возвращают только товары сin_stock: true
, если это поле есть в фиде. - Стратегии, основанные на истории, могут вернуть товары вне наличия.
Можно ли комбинировать алгоритмы в одной стратегии?
→ Да, с помощью Algorithm per slot
можно задать разные алгоритмы для каждого слота. В этом случае доступны только правила Pin
.
Как задать диапазон цен в фильтре?
→ Используйте два условия:
Цена > A
иЦена < B
Важно: не используйтеИЛИ
, это приведёт к некорректной фильтрации.
Что будет, если ни один товар не подходит под фильтры?
→ Система начнёт ослаблять фильтры (если это допускается), затем применит fallback-алгоритм. Если ни один товар не найден — слот останется пустым.
Есть ли ограничения на количество фильтров в стратегии?
→ Да. Максимум можно задать до 30 пользовательских фильтров в одной стратегии.
Что происходит, если указать несколько SKU в Pin?
→ Сначала система ищет эти SKU в выдаче стратегии. Если ни один не найден, система выберет наиболее релевантный на основе Affinity-профиля пользователя.
Могу ли я использовать фильтры без алгоритма?
→ Да. Можно создать стратегию без алгоритма (Empty strategy
) и управлять выдачей только через правила Pin
, Include
, Exclude
.
Есть ли фильтр по поисковому запросу?
→ Да, на странице поиска можно отфильтровать товары по совпадению с поисковым запросом пользователя в указанном текстовом поле из фида.
#
📎 См. также
- Создание кампаний Web
- Создание API-кампаний
- Алгоритмы рекомендаций
- Персонализация листинга
- Работа с переменными