Recomendação de Produtos — Como foi feito (explicado fácil)
Lembra do "Quem comprou isso também comprou…" da Amazon? É um modelo olhando milhões de carrinhos e aprendendo: quem leva âncora geralmente leva corda. Aqui fiz isso pro varejo náutico — cross-sell que vende sozinho.
O que é isso, em uma frase?
É um sistema que olha o histórico de carrinhos da LH Nautical e descobre combinações que vendem juntas. Quando alguém adiciona um produto ao carrinho, ele sugere os 2-3 que mais combinam com aquele — baseado no que outros clientes realmente compraram juntos.
Não tem IA fina nem rede neural. É um algoritmo clássico — Apriori (regras de associação) — que funciona desde os anos 90 porque resolve bem o problema: "se compra A, qual a chance de comprar B?".
Por que importa? Ticket médio sobe sem aumentar tráfego. Cliente já tá ali, só falta mostrar o item que ele provavelmente queria mas não lembrou. É a fila do mercado: o chiclete na altura do olho não tá ali por acaso.
Como descobrir o que vende com o quê
1 · Montar os "carrinhos". Pego o histórico de pedidos e agrupo por order_id. Cada linha vira uma cesta — a lista de produtos comprados juntos naquele pedido.
import pandas as pd
cestas = (
df.groupby("order_id")["produto"]
.apply(list)
.reset_index(name="itens")
)
# order_id itens
# 001 [Âncora 6kg, Corda 10m, Mosquetão]
# 002 [Bóia, Salva-vidas]
2 · Transformar em "matriz de presença". O algoritmo precisa de uma tabela onde cada linha é um pedido e cada coluna é um produto: 1 se o item está, 0 se não está. É como uma planilha gigante de "0/1".
from mlxtend.preprocessing import TransactionEncoder te = TransactionEncoder() matriz = te.fit_transform(cestas["itens"]) df_bin = pd.DataFrame(matriz, columns=te.columns_).astype(int) # pedido ancora_6kg corda_10m mosquetao boia ... # 001 1 1 1 0 # 002 0 0 0 1
3 · Rodar o Apriori — achar combinações frequentes. O algoritmo varre a matriz e devolve os itemsets que aparecem em pelo menos X% dos pedidos (chamado suporte mínimo). Quem aparece pouco é cortado — não compensa recomendar coisa que ninguém compra.
from mlxtend.frequent_patterns import apriori
frequentes = apriori(
df_bin,
min_support=0.01, # combinação aparece em >=1% dos pedidos
use_colnames=True
)
# {Âncora, Corda} → suporte 3,2%
# {Bóia, Salva-vidas} → suporte 2,1%
4 · Gerar regras de associação com confidence e lift. Daí saem regras do tipo "quem compra âncora, leva corda" — mas com 3 números que dizem se vale a pena:
- Support — em quantos % dos pedidos a regra aparece
- Confidence — dos que compraram âncora, % que também levou corda
- Lift — quantas vezes mais provável alguém comprar corda tendo comprado âncora vs. comprar corda aleatoriamente. Lift > 1 = associação real.
from mlxtend.frequent_patterns import association_rules
regras = association_rules(
frequentes,
metric="lift",
min_threshold=1.5 # só regras 1,5x mais prováveis que aleatório
)
top = regras.sort_values("lift", ascending=False).head(10)
| regra (exemplo) | lift |
|---|---|
| Âncora → Corda | 4,2× |
| Salva-vidas → Bóia | 3,8× |
| Lanterna → Pilha | 3,1× |
(números ilustrativos do dataset LH Nautical — os valores reais saem do notebook.)
5 · Usar no checkout. Quando um produto entra no carrinho, busco as regras onde ele é "antecedente" e pego os 3 consequentes com maior lift. Aparece como "Frequentemente comprados juntos".
As combinações que mais aparecem
Em uma linha: o que esse projeto ensina
Que nem todo problema precisa de IA pesada. Apriori é simples, interpretável (cada regra é uma frase) e roda em segundos. Para cross-sell num catálogo médio, é mais robusto que rede neural — e o time comercial entende o porquê de cada sugestão.
Coisas técnicas que apareceram aqui: Market Basket Analysis, Apriori, suporte / confidence / lift, transação binária com TransactionEncoder, regras de associação, escolha de thresholds, biblioteca mlxtend.