Matrizes de confusão e acurácia das nossas árvores finais
Nos últimos exercícios, você construiu várias árvores de decisão podadas, num total de quatro. Como você pode ver, o número final de divisões varia bastante de uma árvore para outra:
ptree_undersample # 7 splits
ptree_prior # 9 splits
ptree_loss_matrix # 24 splits
ptree_weights # 6 splits
Agora é importante saber qual árvore tem o melhor desempenho em termos de acurácia. Para obter a acurácia, você vai começar fazendo previsões usando o conjunto de teste e construindo a matriz de confusão para cada uma dessas árvores. Ao fazer as previsões, inclua o argumento type = "class". Assim, não é necessário definir um cut-off.
Ainda assim, é importante lembrar que não apenas a acurácia importa, mas também sensibilidade e especificidade. Além disso, prever probabilidades em vez de valores binários (0 ou 1) tem a vantagem de permitir ajustar o cut-off. Por outro lado, a dificuldade está justamente na escolha desse cut-off. Você vai retomar esse ponto no próximo capítulo.
Se precisar de um lembrete, veja como calcular a acurácia: $$\textrm{Classification accuracy} = \frac{(TP + TN)}{(TP + FP + TN + FN)}$$
Este exercício faz parte do curso
Modelagem de Risco de Crédito em R
Instruções do exercício
- Use
predict()para fazer previsões para as quatro árvores. Incluatest_setno argumentonewdata. Não se esqueça de incluirtype = "class"! - Construa matrizes de confusão para cada uma dessas árvores de decisão. Use a função
table()e inclua primeiro o status "real" (usandotest_set$loan_status), seguido da previsão. - Calcule a acurácia usando cada uma das matrizes de confusão.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# Make predictions for each of the pruned trees using the test set.
pred_undersample <- predict(ptree_undersample, newdata = test_set, type = "class")
pred_prior <-
pred_loss_matrix <-
pred_weights <-
# construct confusion matrices using the predictions.
confmat_undersample <- table(test_set$loan_status, pred_undersample)
confmat_prior <-
confmat_loss_matrix <-
confmat_weights <-
# Compute the accuracies
acc_undersample <- sum(diag(confmat_undersample)) / nrow(test_set)
acc_prior <-
acc_loss_matrix <-
acc_weights <-