guilhermecdiniz
|
VoltarBusiness Case: Os produtos que mais vendem também são os que mais retêm clientes?

🧠 Business Case: Os produtos que mais vendem também são os que mais retêm clientes?

15 de jul. de 2026

Business Case: Os produtos que mais vendem também são os que mais retêm clientes?

Um estudo de análise de dados aplicado a uma rede fictícia de pet shops, usando SQL (BigQuery) e Power BI para responder uma pergunta real de negócio.

O Problema

Durante uma reunião de resultados, o diretor comercial de uma rede de pet shops trouxe a seguinte dúvida: "Nós sabemos quais são os produtos mais vendidos. Mas será que são esses produtos que fazem os clientes voltarem a comprar?"

A empresa investia em promoções e campanhas com base em volume de vendas, sem saber se isso realmente construía relacionamento de longo prazo com o cliente ou apenas gerava receita pontual.

O Que os Dados Mostraram

Os dados revelaram três métricas independentes lideradas por três produtos diferentes. O Petisco Bifinho lidera em volume, com 2.766 pedidos. A Ração Premium Cães Adultos lidera em receita, com R$ 689 mil faturados. E o Antipulgas Pipeta Gatos lidera em retenção, com 70,2% dos clientes voltando a comprar.

A categoria do primeiro produto comprado se mostrou o principal preditor do valor do cliente ao longo do tempo. Clientes que estreiam com Ração Premium Filhotes apresentam LTV médio de R$ 1.459, quase o dobro dos clientes que estreiam com Areia Sanitária, cujo LTV médio é de R$ 798.

Dashboard Completo

alt

https://app.powerbi.com/view?r=eyJrIjoiNWNlMDAzZmMtMTFmNC00ZjY2LTk1NDUtNjVjMGJkZGNmNjUxIiwidCI6ImNiNzMyMzg2LWIyNGUtNDM4My04MmYyLTVhZGRlZjQ5NmQzMyJ9

Explore os dados por categoria, produto e taxa de retenção. De 5.153 clientes analisados, 64,5% retornam para uma nova compra, o que confirma que a retenção é a métrica central para entender o real valor de cada produto no negócio.

Como a Análise Foi Construída

Toda a análise foi construída em SQL no BigQuery, partindo da base de vendas da rede. O processo passou por identificar a primeira compra de cada cliente, classificar clientes como recorrentes ou não recorrentes, e cruzar produto, categoria e status de recompra para calcular taxas de retenção e LTV médio por segmento.

  1. Classificação de cliente recorrente Essa é a base de tudo. Sem definir "o que é um cliente retido", nenhuma métrica depois faz sentido. É a query que qualquer analista vai querer ver primeiro, porque valida se sua definição de retenção é sólida.
SELECT
  status_cliente,
  COUNT(*) AS qtd_clientes
FROM (
  SELECT
    id_cliente,
    CASE
      WHEN COUNT(DISTINCT id_venda) > 1 THEN 'Recorrente'
      ELSE 'Não Recorrente'
    END AS status_cliente
  FROM varejopet.conjunto01.vendas
  GROUP BY id_cliente
)
GROUP BY status_cliente;
  1. Taxa de retenção por produto da primeira compra Essa é a query mais importante do projeto inteiro. Ela é literalmente a resposta técnica à pergunta do diretor: junta a primeira compra de cada cliente com o status de retenção dele, e calcula a taxa por produto. É aqui que nasce o achado do Antipulgas Pipeta Gatos com 70% de retenção.
WITH cliente_resumo AS (
  SELECT
    id_cliente,
    MIN(data_venda) AS data_primeira_compra,
    CASE WHEN COUNT(DISTINCT id_venda) > 1 THEN 'Recorrente' ELSE 'Não Recorrente' END AS status_cliente
  FROM varejopet.conjunto01.vendas
  GROUP BY id_cliente
),
itens_primeira_compra AS (
  SELECT
    v.id_cliente,
    v.produto,
    v.categoria,
    cr.status_cliente
  FROM varejopet.conjunto01.vendas v
  INNER JOIN cliente_resumo cr
    ON v.id_cliente = cr.id_cliente
    AND v.data_venda = cr.data_primeira_compra
)
SELECT
  produto,
  categoria,
  COUNT(DISTINCT id_cliente) AS total_clientes_primeira_compra,
  ROUND(SUM(CASE WHEN status_cliente = 'Recorrente' THEN 1 ELSE 0 END) / COUNT(DISTINCT id_cliente) * 100, 2) AS taxa_retencao_pct
FROM itens_primeira_compra
GROUP BY produto, categoria
ORDER BY total_clientes_primeira_compra DESC;
  1. Taxa de retenção por categoria É a mesma lógica da anterior, mas agregada em categoria. Vale mostrar separada porque prova que você sabe reaproveitar uma CTE para responder duas perguntas de negócio diferentes (produto vs. categoria), o que é um sinal de organização de raciocínio, não só de sintaxe.
WITH cliente_resumo AS (
  SELECT
    id_cliente,
    MIN(data_venda) AS data_primeira_compra,
    CASE WHEN COUNT(DISTINCT id_venda) > 1 THEN 'Recorrente' ELSE 'Não Recorrente' END AS status_cliente
  FROM varejopet.conjunto01.vendas
  GROUP BY id_cliente
),
itens_primeira_compra AS (
  SELECT
    v.id_cliente,
    v.categoria,
    cr.status_cliente
  FROM varejopet.conjunto01.vendas v
  INNER JOIN cliente_resumo cr
    ON v.id_cliente = cr.id_cliente
    AND v.data_venda = cr.data_primeira_compra
)
SELECT
  categoria,
  COUNT(DISTINCT id_cliente) AS total_clientes_primeira_compra,
  ROUND(SUM(CASE WHEN status_cliente = 'Recorrente' THEN 1 ELSE 0 END) / COUNT(DISTINCT id_cliente) * 100, 2) AS taxa_retencao_pct
FROM itens_primeira_compra
GROUP BY categoria
ORDER BY taxa_retencao_pct DESC;