Skip to content
article

Teu modelo tem 99% de acurácia? Bah, então me mostra a matriz de confusão

Três perguntas que eu faço antes de acreditar em qualquer número

Bruna Schmitt@bruna_dados

August 13, 2026 · 2 min read

Bah, tchê. Toda semana aparece alguém no LinkedIn com "meu modelo atingiu 99% de acurácia" e um gráfico bonito. E toda semana eu tenho as mesmas três perguntas. Vou deixar aqui pra poder mandar o link 🧉

1. Qual é a proporção das classes?

Se 99% das transações não são fraude, um modelo que responde "não é fraude" pra tudo tem 99% de acurácia. E não pega fraude nenhuma. Tu viu? Acurácia sozinha não diz nada quando as classes são desbalanceadas.

from sklearn.metrics import classification_report, confusion_matrix

print(confusion_matrix(y_test, y_pred))
print(classification_report(y_test, y_pred, digits=3))

Olha o recall da classe que importa. No meu último projeto de crédito, o modelo de "97% de acurácia" tinha recall de 0,41 nos inadimplentes. Ou seja: deixava passar mais da metade dos casos que a gente queria pegar.

Pra problema desbalanceado eu olho precision e recall da classe positiva e a área sob a curva precision-recall (average_precision_score), não a ROC. A ROC fica bonita demais quando tem negativo sobrando.

2. Como foi feito o split?

Se os dados têm tempo (e quase sempre têm), split aleatório é trapaça sem querer. O modelo vê o futuro no treino. Usa TimeSeriesSplit ou, mais simples, treina até fevereiro e testa de março em diante:

treino = df[df["data"] < "2026-03-01"]
teste  = df[df["data"] >= "2026-03-01"]

A Núria escreveu um checklist de vazamento muito bom aqui mesmo no ai_hype_check, recomendo.

3. Comparado com o quê?

Qual é o baseline? A regra de negócio atual? Uma regressão logística? "Chutar a classe majoritária"? Sem baseline, 99% é só um número. Na enchente de 2024, quando o escritório ficou semanas fora do ar, a gente rodou a análise de crédito com a planilha de regras antiga do gerente, e sabe o que mais? Ela perdia só uns 4 pontos de recall pro modelo. Quatro pontos! Valeu o modelo? Valeu. Mas o ganho real era bem menor do que o slide dizia.

Resumindo

  • Matriz de confusão sempre.
  • Métrica da classe que importa, não acurácia geral.
  • Split respeitando o tempo.
  • Um baseline simples do lado.

Se teu modelo passa nessas quatro, aí sim, tri legal, pode postar o gráfico. Make sense? 😄

Written by

Bruna Schmitt

Cientista de dados em Porto Alegre. Python, SQL, estatística e chimarrão 🧉 Bah, se teu modelo tem 99% de acurácia eu tenho perguntas.

Get the best of #ai_hype_check weekly

One email each Monday with the most useful posts. No spam; unsubscribe in one click.

Comments

7

Sign in to join the conversation.

Sign in to comment
Caio Nascimento@caio_backend1 rep in AI Hype Check
olha a cientista de dados vindo humilhar os backend kkkkkk. mas sério, a parte da planilha do gerente perdendo só 4 pontos é ouro, véi. mostra isso pro PO e vê a cara dele
2 net votes
Bruna Schmitt@bruna_dados#5 in AI Hype Check
bah, guri, tu nem olha os dados que tu salva no banco, fica quieto 😂🧉
0 net votes
Thiago Valadares@thiago_pj1 rep in AI Hype Check
mano salvei. vou mandar pro time de dados da fintech que tá com um modelo de 98% que ninguém confia kkkkk
0 net votes
Deepthi Rao@deepthi_ml2 rep in AI Hype Check
Read with translate. Good list. What was the eval set for the 97% model, same period as training?
1 net votes
Bruna Schmitt@bruna_dados#5 in AI Hype Check
Yes! Random split over 3 years of data, same period. With the time split it went to 91% accuracy and 0.33 recall. In the same time, the business still wanted to deploy it 🙃
0 net votes
Dana Kowalski@dana_ml#1 in AI Hype Check
Translated and read. The flood anecdote is the most persuasive argument for baselines I have seen: a natural experiment nobody would have approved on purpose. Glad you and your office came through it.
0 net votes
Bruna Schmitt@bruna_dados#5 in AI Hype Check
Thank you Dana! Coming from you this mean a lot. Translating your eval post was what made me write this one.
0 net votes