Στην παρουσίαση αυτής της εργασίας θα αναπτύξουμε ένα μοντέλο Δένδρου απόφασης για την πρόβλεψη του τύπου κρασιού (Λευκό ή Κόκκινο). Για το σκοπό αυτό θα χρησιμοποιήσουμε το datase “Wine Quality” που χρησιμοποιήσα και στην λογιστική παλινδρόμηηση.Στοχος μας είναι να εφαρμόσουμε τα 4 βήματα δημιουργίας ενός μοντέλου CART και στην συνέχεια να συγκρίνουμε τα αποτελέσματα του με αυτά τιυ μοντέλου της Λογιστικής Παλινδρόμησης.
library(rpart)
library(rpart.plot)
library(caTools)
library(ROCR)
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
red_wine<-read.csv("winequality-red.csv" , sep=";")
white_wine<-read.csv("winequality-white.csv" , sep=";")
red_wine$type <- "red"
white_wine$type <-"white"
wine_data <- rbind(red_wine,white_wine)
wine_data$type <- as.factor(wine_data$type)
set.seed(3000)
spl <- sample.split(wine_data$type, SplitRatio = 0.7)
train_data<-subset(wine_data, spl==TRUE)
test_data<-subset(wine_data, spl== FALSE)
Για την δημιουργία του δέντρου απόφασης θα χρησιμοποιήσουμε τη
συνάρτηση rpart . Προκειμένου να αποφήγουμε το overfitting
αλλά και τα υπερβολικά απλά μοντέλα , θα εφαρμόσουμε τη μέθοδο k-fold
cross-validation για να βρούμε την ιδανική παράμετρο πολυπλοκότητας
.
numFolds <- trainControl(method = "cv", number = 7)
cpGrid <- expand.grid(.cp = seq(0.01,0.7,0.01))
set.seed(3000)
cv_model<-train(type~.,data=train_data, method="rpart", trControl = numFolds, tuneGrid = cpGrid)
best_cp <- cv_model$bestTune$cp
cat("το βέλτιστο cp που επιλέχθηκε μέσω του Cross-Validation είναι :" , best_cp, "\n")
## το βέλτιστο cp που επιλέχθηκε μέσω του Cross-Validation είναι : 0.01
wine_tree<- rpart(type~.,data = train_data, method="class", cp = best_cp)
prp(wine_tree, type = 4, extra = 104, branch.lty = 3, box.col = c("pink", "lightgrey")[wine_tree$frame$yval],main="Δέντρο απόφασης για τον τύπο κρασιού ")
Το δένδρο απόφασης επιλέγει αυτόματα τις πιο σήμαντικές μεταβλητές
για τον διαχωρισμό των κλάσεων. Όπως παρατηρούμε οπτικά, η ρίζα του
δένδρου χρησιμοποιεί συχνά το total sulfur dioxide ή το
chlorides για να διαχωρίσει άμεσα τα κόκκινα από τα λευκάα
κρασία. Το πλεονέκτημα εδώ είναι η άμεση ερμηνευσημότιτα των κανόνων σε
σχέση με τη Λογιστική Παλινδρόμηση.
Θα εφαρμόσουμε το μοντέλο μας στο σύνολο του ελέγχου για να αξιολογήσουμε την ικανότητα γενίκευσης του .
pred_class <- predict(wine_tree, newdata = test_data, type="class")
conf_matrix <- table(test_data$type, pred_class)
print(conf_matrix)
## pred_class
## red white
## red 450 30
## white 17 1452
accuracy <- sum(diag(conf_matrix))/ sum(conf_matrix)
sensitivity <- conf_matrix[2,2]/ sum(conf_matrix[2,])
specificity <- conf_matrix[1,1]/sum(conf_matrix[1,])
cat("Ακρίβεια (Accuracy):", round(accuracy * 100, 2), "%\n")
## Ακρίβεια (Accuracy): 97.59 %
cat("Ευαισθησία (Sensitivity - White):", round(sensitivity * 100, 2), "%\n")
## Ευαισθησία (Sensitivity - White): 98.84 %
cat("Ειδικότητα (Specificity - Red):", round(specificity * 100, 2), "%\n")
## Ειδικότητα (Specificity - Red): 93.75 %
Η καμπύλη ROC θα μας επιβεβαώση τη συνολική ικανότητα του δένδρου να ξεχωρίσει σωστά τις δύο κατηγορίες κρασίων, αναξεαρτήτως του κατωφλιού .
pred_prob <- predict(wine_tree, newdata = test_data)
pred_rocr <- prediction(pred_prob[,2], test_data$type)
perf <- performance(pred_rocr , "tpr" , "fpr")
plot(perf, colorize = TRUE, main = "Καμπύλη ROC - Μοντέλο CART")
abline(a=0, b=1, lty = 2 , col = "gray")
auc_cart <- as.numeric(performance(pred_rocr, "auc")@y.values)
cat("Η περιοχή κάτω από την καμπύλη (AUC) είναι: " , round(auc_cart, 4), "\n")
## Η περιοχή κάτω από την καμπύλη (AUC) είναι: 0.9733
Η σημαντικότερη διαφορά μεταξύ των δύο μοντέλων είναι η ερμηνευσιμότητα. Στην Άσκηση 6 , η λογιστική παλινδρόμηση μας έδωσε συντελεστές, υποδεικνύοντας τις συσχετίσεις. Αντίθετα το μοντέλο CART παρέχει ξεκάθαρους κανόνες αιτιότητας και αποφάσεων που μπορεί να κατανοήσει άμεσα ένας επιχειρηματίας.
Όπως είχαμε παρατηρήσει , το μοντέλο Λογιστικής παλινδρόμησης στο συγκεκριμένο dataset είχε αγγίξει την εξαιρετικά υψηλή ακρίβει (περίπου 99,52%), με αντίστοιχα υψηλές τιμές σε ευαισθησία και ειδικότητα . Το μοντέλο CART παρέχει πάρομοια ή ελαφρως χαμηλότερη ακρίβεια , όπως φαίνεται και από το παραπάνω πίνακα σύγχθσης και το AUC.
Επιλέγομε μέθοδο ανάλογα με το στόχο μας. Δηλαδή για απόλυτη ακρίβεια στις προβλέψεις μας επιλέγουμε την μέθοδο της λογιστικής παλινδρόμησης . Αλλά για την παρουσίαση των κανόνων ταξινόμησης σε ένα διοικητικό συμβούλιο , ώστε να γίνονται απόλυτα κατανοητοί , θα επιλέγαμε την μέθοδο CART