Избранное
Ваша корзина пуста!
Корзина

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

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

Совместная покупка ещё не означает хорошую рекомендацию

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

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

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

Популярный товар ещё не значит подходящий

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

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

Разница важная. Без такой проверки блок «С этим товаром покупают» со временем легко превращается в ещё один список самых продаваемых позиций магазина.

А двух заказов уже достаточно?

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

Но двух заказов для серьёзного вывода явно мало.

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

В модуле для этого используются Wilson Score и Bayesian smoothing. Их задача довольно приземлённая: не позволить нескольким случайным продажам обогнать связь, которая подтверждалась много раз.

Старые заказы тоже стоит учитывать с умом

История продаж за несколько лет полезна, но магазин за это время мог заметно измениться. Появляются новые модели, меняются расходники, какие-то товары снимаются с продажи.

Поэтому старым заказам можно постепенно уменьшать вес. Они не выбрасываются из статистики, просто свежие покупки начинают влиять на результат сильнее.

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

Не нужно считать всё при каждом открытии товара

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

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

Поэтому связи лучше считать заранее и сохранять результат. На витрине остаётся только получить готовый список товаров и показать его.

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

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

А если подходящих товаров пока нет?

Тогда лучше оставить блок пустым.

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

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

Как это сделано в OpenCart

Для этой задачи я сделал модуль «Умные рекомендации ПРО» для OpenCart 3. Он использует уже накопленную историю заказов магазина и автоматически ищет товары, которые имеет смысл показывать вместе.

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

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

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

Когда такой подход особенно полезен

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

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

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

Готовое решение для OpenCart 3

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

Посмотреть модуль «Умные рекомендации ПРО» →


27.08.2026 45
Связанные товары

Мы используем файлы cookie для улучшения вашего опыта просмотра, предоставления персонализированной рекламы или контента, а также анализа нашего трафика. Нажимая «Принять все», вы соглашаетесь на использование нами файлов cookie и принимаете политику конфиденциальности.