IniziaInizia gratis

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

Visualizza il corso

Istruzioni dell'esercizio

  • Usa predict() per fare previsioni con tutti e quattro gli alberi. Il test_set va passato nell’argomento newdata. Non dimenticare type = "class"!
  • Costruisci le matrici di confusione per ognuno di questi alberi di decisione. Usa la funzione table() e inserisci prima lo stato "vero" (usando test_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 <-
Modifica ed esegui il codice