Projetos
LH Nautical · Clientes · Desenvolvimento

LH Clientes — Como foi feito (explicado fácil)

Imagina que 10 clientes pagam o aluguel da loja toda e os outros 39 ajudam. Se um desses 10 saí da carteira, a empresa balança. Aqui usei o princípio de Pareto pra descobrir quem segura o caixa da LH Nautical — e qual o risco escondido nisso.

Nível Iniciante a intermediário Stack Python · Pandas · matplotlib Tipo Projeto analítico
Visão geral

O que é isso, em uma frase?

É a análise que pega os 49 clientes B2B da LH Nautical e responde 3 perguntas: quem são os mais valiosos? como tá distribuída a receita entre eles? que percentual depende dos top 10?.

A ferramenta principal aqui é a curva de Pareto (regra 80/20): geralmente 20% dos clientes geram 80% da receita. Quando isso acontece de forma exagerada (tipo 10% gerando 50%), é sinal de risco de concentração.

Por que importa? Porque saber quem são os pesos pesados muda a forma de cuidar deles. O top 10 precisa de gerente de conta, contato direto, prioridade no estoque. O resto, fluxo padrão.

Passo a passo

Da tabela à curva

1 · Calcular o LTV (Lifetime Value) por cliente. LTV é "quanto esse cliente já me deu, somando todas as compras dele". Saio do fato_vendas, agrupo por cliente, somo.

ltv = (
    vendas.groupby("customer_id")["valor"]
          .sum()
          .sort_values(ascending=False)
          .reset_index(name="ltv")
)
print(f"49 clientes B2B, LTV total: R$ {ltv['ltv'].sum():,.0f}")

2 · Recorrência. Verifico quantos pedidos cada cliente fez. Achei algo bom: zero clientes "one-time" — todos compraram mais de uma vez. Isso é raro e excelente: significa que o produto/atendimento fideliza.

recorrencia = vendas.groupby("customer_id")["order_id"].nunique()
one_time = (recorrencia == 1).sum()
print(f"Clientes que compraram só 1 vez: {one_time}")  # 0

3 · Montar a curva de Pareto. Ordeno os clientes do mais valioso pro menos. Calculo o acumulado da receita (1º cliente, 1º+2º, 1º+2º+3º...). Plot.

ltv = ltv.sort_values("ltv", ascending=False).reset_index(drop=True)
ltv["acumulado_pct"] = ltv["ltv"].cumsum() / ltv["ltv"].sum() * 100
ltv["rank"] = ltv.index + 1

import matplotlib.pyplot as plt
plt.bar(ltv["rank"], ltv["ltv"])
plt.twinx().plot(ltv["rank"], ltv["acumulado_pct"], color="cyan")

4 · Os achados. Os Top 5 clientes respondem por 12,9% da receita. Os Top 10 chegam a 24,6%. É menos concentrado do que o típico Pareto 80/20 — boa notícia: significa que a base é razoavelmente distribuída, mesmo com poucos clientes.

faixa% da receita
Top 5 clientes12,9%
Top 10 clientes24,6%
Clientes one-time0 (100% recorrentes)
Total B2B49 clientes

5 · A leitura honesta. Não inflei o número (poderia falar "Top 10 = 80%" e ficar impressionante — seria mentira). Reportei o número real, mesmo que menos vendável. Honestidade gera confiança; recrutador esperto percebe.

Resultado

A curva de Pareto da LH

O que dá pra levar daqui

Em uma linha: o que esse projeto ensina

Que quase toda base segue Pareto de algum jeito — mas o "quão Pareto" varia. Ler corretamente esse "quanto" é o que diferencia análise séria de balela vendedora. Reportar 24,6% como "24,6%" e não como "Top 10 domina" é integridade analítica.

Coisas técnicas que apareceram aqui: Pandas (groupby, sort_values, cumsum), cálculo de LTV, análise de recorrência, curva de Pareto, gráfico de dois eixos com matplotlib, leitura honesta de concentração.