Matrici di confusione e accuratezza dei nostri tree finali
Negli ultimi esercizi hai costruito diversi alberi di decisione potati, in totale quattro. Come puoi vedere, il numero finale di split varia parecchio da un albero all’altro:
ptree_undersample # 7 split
ptree_prior # 9 split
ptree_loss_matrix # 24 split
ptree_weights # 6 split
Ora è importante capire quale albero rende meglio in termini di accuratezza. Per calcolarla, inizierai facendo le previsioni usando il test set e costruendo la matrice di confusione per ciascuno di questi alberi. Quando fai le previsioni, aggiungi l’argomento type = "class". In questo modo non serve impostare una soglia (cut-off).
Ricorda però che non conta solo l’accuratezza, ma anche sensibilità e specificità. Inoltre, prevedere probabilità invece di valori binari (0 o 1) ha il vantaggio di poter spostare la soglia. D’altra parte, la difficoltà sta proprio nella scelta della soglia. Tornerai su questo tema nel prossimo capitolo.
Se ti serve un promemoria, ecco come calcolare l’accuratezza: $$\textrm{Classification accuracy} = \frac{(TP + TN)}{(TP + FP + TN + FN)}$$
Questo esercizio fa parte del corso
Credit Risk Modeling in R
Istruzioni dell'esercizio
- Usa
predict()per fare previsioni con tutti e quattro gli alberi. Iltest_setva passato nell’argomentonewdata. Non dimenticaretype = "class"! - Costruisci le matrici di confusione per ognuno di questi alberi di decisione. Usa la funzione
table()e inserisci prima lo stato "vero" (usandotest_set$loan_status), seguito dalla previsione. - Calcola l’accuratezza usando ciascuna delle matrici di confusione.
Esercizio pratico interattivo
Prova a risolvere questo esercizio completando il codice di esempio.
# 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 <-