Ma trận nhầm lẫn và độ chính xác của các cây cuối cùng
Trong các bài tập vừa qua, bạn đã xây dựng khá nhiều cây quyết định đã cắt tỉa, tổng cộng là bốn cây. Như bạn thấy, số lần tách cuối cùng khác nhau đáng kể giữa các cây:
ptree_undersample # 7 splits
ptree_prior # 9 splits
ptree_loss_matrix # 24 splits
ptree_weights # 6 splits
Giờ đây điều quan trọng là biết cây nào có hiệu năng tốt nhất xét theo độ chính xác (accuracy). Để tính độ chính xác, bạn sẽ bắt đầu bằng cách tạo dự đoán trên tập kiểm tra, và xây dựng ma trận nhầm lẫn cho từng cây. Khi dự đoán, bạn cần thêm đối số type = "class". Làm vậy giúp bạn không cần đặt ngưỡng (cut-off).
Tuy nhiên, cần lưu ý rằng không chỉ độ chính xác mới quan trọng, mà độ nhạy (sensitivity) và độ đặc hiệu (specificity) cũng vậy. Thêm nữa, dự đoán xác suất thay vì giá trị nhị phân (0 hoặc 1) có ưu điểm là bạn có thể điều chỉnh ngưỡng. Dù vậy, thách thức là lựa chọn ngưỡng phù hợp. Bạn sẽ quay lại vấn đề này ở chương tiếp theo.
Nếu cần nhắc lại, đây là cách tính độ chính xác: $$\textrm{Classification accuracy} = \frac{(TP + TN)}{(TP + FP + TN + FN)}$$
Bài tập này là một phần của khóa học
Mô hình hóa rủi ro tín dụng bằng R
Hướng dẫn bài tập
- Dùng
predict()để tạo dự đoán cho cả bốn cây. Truyềntest_setvào đối sốnewdata. Đừng quên thêmtype = "class"! - Xây dựng ma trận nhầm lẫn cho từng cây quyết định. Dùng hàm
table(), và đưa trạng thái "thật" (sử dụngtest_set$loan_status) vào trước, sau đó đến dự đoán. - Tính độ chính xác (accuracy) từ mỗi ma trận nhầm lẫn.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# 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 <-