Projetos
LH Nautical · Vendas · Desenvolvimento

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

Pensa numa loja que vende muito, mas ninguém sabe se tá ganhando dinheiro. Aqui é o detetive entrando: olhar item por item, comparar preço de venda com preço de custo e fazer a pergunta proibida — "a gente tá vendendo no prejuízo sem perceber?".

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 a tabela fato_vendas (a "camada ouro" já tratada) e responde: quanto vendemos por mês, qual a tendência, e — achado mais valioso — quais produtos saíram abaixo do custo, gerando prejuízo silencioso.

Por que importa? "Faturei R$ 1 milhão" parece bom. Mas se R$ 200 mil foi vendido abaixo do custo, a empresa tá pagando pra trabalhar. Esse é o tipo de análise que ninguém pediu mas que paga o projeto inteiro.

Passo a passo

Da tabela ao alerta

1 · KPIs básicos. Faturamento total, ticket médio, número de pedidos, distintos de clientes. São números que cabem num cartão — mas precisam estar certos pra todo o resto fazer sentido.

vendas = pd.read_parquet("gold/fato_vendas.parquet")

faturamento  = vendas["valor"].sum()
ticket_medio = vendas.groupby("order_id")["valor"].sum().mean()
n_pedidos    = vendas["order_id"].nunique()
n_clientes   = vendas["customer_id"].nunique()

2 · Evolução mensal. Agrupo por mês e plot. Aqui não tem ML — é só olhar. Mas o olhar muda decisões: vejo sazonalidade (dezembro forte? agosto fraco?), tendência (subindo ou caindo?), e quebras (algum mês "fora da curva" pede investigação).

mensal = (
    vendas.assign(mes=vendas["data"].dt.to_period("M"))
          .groupby("mes")["valor"].sum()
          .reset_index()
)
mensal.plot(x="mes", y="valor", figsize=(10,4), kind="line")

3 · O detetive — join com a tabela de custos. O pulo do gato: trazer o custo de cada produto (que vive em dim_produto) e comparar com o preço de venda. Se preço < custo → linha vermelha.

produtos = pd.read_parquet("gold/dim_produto.parquet")[["produto_id", "custo_unit"]]
v = vendas.merge(produtos, on="produto_id", how="left")

v["margem_unit"] = v["preco_unit"] - v["custo_unit"]
prejuizo = v[v["margem_unit"] < 0]

print("Itens no prejuizo:", len(prejuizo))
print("Total perdido:", prejuizo["margem_unit"].sum() * -1)  # > R$ 22 mi

4 · Ranquear os "vilões". Quais 10 produtos mais sangram caixa? Quais clientes/canais mais compraram no prejuízo? Saída: uma planilha priorizada pra reunião com a área comercial.

achadovalor
Receita total analisadaR$ 2,61 bi
Produtos vendidos no prejuízo30 SKUs
Prejuízo acumuladoR$ 22 mi

5 · Entrega. Tudo isso vira card no Power BI conectado direto na camada ouro. Não precisa rodar Python toda vez — o painel atualiza sozinho quando a esteira de dados é re-executada.

Resultado

Evolução mensal do faturamento

O que dá pra levar daqui

Em uma linha: o que esse projeto ensina

Que análise descritiva — quando feita olhando a coisa certa — vale ouro. Não precisa de ML pra achar R$ 22 mi sangrando: precisa só de uma boa pergunta + um JOIN bem feito.

Coisas técnicas que apareceram aqui: Pandas (groupby, agg, merge), agregação temporal com to_period, KPIs financeiros, análise de margem unitária, ranqueamento por impacto, integração Python → Power BI via camada ouro.