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
Contents
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
Sign in to join the conversation.
Sign in to comment