Avaliação e comparação dos modelos

Cinco modelos, uma tabela, e a pergunta que quase ninguém faz: a diferença entre o primeiro e o segundo colocado é real, ou é ruído da amostra? Responder isso separou dois modelos que pareciam empatados — e confirmou que um terceiro estava realmente atrás.

🎛️

Recurso interativo: se a curva ROC e o AUC ainda são abstratos para você, montei um explicador onde dá para arrastar o limiar de decisão e ver a matriz de confusão, o TPR, o FPR e a curva se formarem em tempo real. Cinco minutos ali valem mais que qualquer definição de livro.

A comparação final na validação cruzada

ModeloROC AUCPR AUCPR AUC / acasoGap
Dummy (prior)0,5000000,0668441,000×0,0000
Decision Tree (d=7)0,8458380,3483205,211×0,0119
Random Forest (d=10)0,8628850,3970125,939×0,0322
XGBoost0,8648000,4028216,026×0,0149
LightGBM0,8650790,4025286,022×0,0126

A coluna que mais importa não é o ROC AUC — é PR AUC / acaso. Ela diz que o modelo identifica a classe rara seis vezes melhor que o acaso. Num problema com 6,7% de eventos, essa é a métrica que traduz utilidade operacional.

Comparação dos cinco candidatos em ROC AUC, PR AUC e estabilidade entre dobras
Os três painéis contam a história completa: separação geral, desempenho na classe rara e estabilidade dobra a dobra. Boosting e floresta se descolam da árvore; entre si, quase não se distinguem.

O teste: 37.500 clientes nunca vistos

Cada modelo treinado no conjunto completo de treino e avaliado uma única vez aqui. E a primeira coisa que checo não é quem ganhou — é se o protocolo segurou:

ModeloValidaçãoTesteDiferença
Decision Tree0,8458380,848406+0,0026
Random Forest0,8628850,865808+0,0029
XGBoost0,8648000,869250+0,0045
LightGBM0,8650790,869171+0,0041

Todos ficaram acima da validação cruzada. Nenhuma degradação — a preparação sem vazamento segurou. A diferença positiva tem explicação mundana: o modelo final treina com 100% do treino contra 80% em cada dobra, e este recorte de teste saiu marginalmente mais fácil.

O bootstrap, que é onde a pergunta se responde

Num conjunto de teste único existe uma leitura por modelo — não há desvio entre dobras para comparar. Então o desvio vem de 2.000 reamostragens com reposição, usando as mesmas reamostras para todos os modelos, o que torna a comparação pareada.

Concorrente do XGBoostDiferença médiaIC 95%Venceu emReal?
Dummy0,3693500,3620 – 0,3764100,0%sim
Decision Tree0,0208540,0170 – 0,0246100,0%sim
Random Forest0,0034410,0019 – 0,0049100,0%sim
LightGBM0,000062−0,00063 – 0,0007456,6%não

A vantagem do boosting sobre a floresta é real: o intervalo não cruza o zero e o XGBoost venceu em 2.000 de 2.000 reamostras. A vantagem do XGBoost sobre o LightGBM não é real: o intervalo cruza o zero e ele venceu em 56,6% — praticamente cara ou coroa.

Avaliação final na base de teste com intervalos de confiança por bootstrap
As barras de erro mudam a leitura da tabela: o que parecia um ranking de quatro posições é, na verdade, três grupos — e dois modelos empatados no topo.

O desempate não é técnico

Se a diferença de AUC é ruído, o critério tem que vir de outro lugar. LightGBM lidera em PR AUC (0,410106), acurácia (0,938373) e Brier (0,048472) — e é a melhor probabilidade calibrada que sustenta a decisão de negócio da próxima fase. É por isso que ele é o recomendado, não pelo terceiro decimal do ROC AUC.

💡

Quando duas opções estão dentro do ruído, escolher pela terceira casa decimal é falsa precisão. Escolha pelo que não é ruído: calibração, custo de manutenção, interpretabilidade, latência.

📊

Parte 9 de 12 da série Aurora — um modelo de risco de crédito do zero ao deploy. O mapa completo da série reúne todas as partes e os números finais. Veja também a documentação técnica e o código no GitHub ↗.