Confusion matrices en nauwkeurigheid van onze definitieve bomen
In de afgelopen oefeningen heb je best wat gesnoeide beslisbomen gebouwd, in totaal vier. Zoals je ziet verschilt het uiteindelijke aantal splitsingen flink per boom:
ptree_undersample # 7 splits
ptree_prior # 9 splits
ptree_loss_matrix # 24 splits
ptree_weights # 6 splits
Nu is het belangrijk om te weten welke boom het best presteert qua nauwkeurigheid. Om de nauwkeurigheid te bepalen, begin je met voorspellingen maken op de testset en bouw je de confusion matrix voor elk van deze bomen. Voeg bij het voorspellen het argument type = "class" toe. Dan hoef je geen cut-off in te stellen.
Toch is het goed om te beseffen dat niet alleen de nauwkeurigheid belangrijk is, maar ook de sensitiviteit en specificiteit. Bovendien heeft het voorspellen van kansen in plaats van binaire waarden (0 of 1) als voordeel dat je de cut-off kunt verschuiven. Het lastige daarbij is dan weer de keuze van de cut-off. Hier kom je in het volgende hoofdstuk op terug.
Voor het geval je een geheugensteuntje nodig had, zo bereken je de nauwkeurigheid: $$\textrm{Classification accuracy} = \frac{(TP + TN)}{(TP + FP + TN + FN)}$$
Deze oefening maakt deel uit van de cursus
Kredietrisicomodellering in R
Oefeninstructies
- Gebruik
predict()om voorspellingen te maken voor alle vier de bomen. Detest_sethoort in het argumentnewdata. Vergeettype = "class"niet! - Maak confusion matrices voor elk van deze beslisbomen. Gebruik de functie
table(), en zet eerst de "ware" status (mettest_set$loan_status), gevolgd door de voorspelling. - Bereken de nauwkeurigheid met elk van de confusion matrices.
Praktische interactieve oefening
Probeer deze oefening eens door deze voorbeeldcode in te vullen.
# 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 <-