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?".
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.
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.
| achado | valor |
|---|---|
| Receita total analisada | R$ 2,61 bi |
| Produtos vendidos no prejuízo | 30 SKUs |
| Prejuízo acumulado | R$ 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.
Evolução mensal do faturamento
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.