Нужно найти группы из 3-4 товаров, которые чаще всего покупают вместе. Эта задача решается только полным перебором или есть что-то хитрое?
Т. е. есть список заказов и позиций. Хотелось бы делать предсказание того, что забыли добавить в корзину.
Пока тупо делаю трехмерную матрицу и в ячейку записываю количество совпадений по заказам.
with product_ids as (
select distinct product_id as id
from order_items
where created_at > current_date - interval '1' day
), product_orders as (
select array_agg(product_id) as product_ids
from order_items
where created_at > current_date - interval '1' day
group by order_id
)
select *
from (
select p1.id as id1, p2.id as id2, p3.id as id3
, (select count(*) from product_orders
where p1.id = any(product_ids)
and p2.id = any(product_ids)
and p3.id = any(product_ids)) as count
from product_ids p1, product_ids p2, product_ids p3
) t
where count > 1
order by count;