Aan de slagGa gratis aan de slag

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

Cursus bekijken

Oefeninstructies

  • Gebruik predict() om voorspellingen te maken voor alle vier de bomen. De test_set hoort in het argument newdata. Vergeet type = "class" niet!
  • Maak confusion matrices voor elk van deze beslisbomen. Gebruik de functie table(), en zet eerst de "ware" status (met test_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 <-
Code bewerken en uitvoeren