Εισαγωγή

Στην παρουσίαση αυτής της εργασίας θα αναπτύξουμε ένα μοντέλο Δένδρου απόφασης για την πρόβλεψη του τύπου κρασιού (Λευκό ή Κόκκινο). Για το σκοπό αυτό θα χρησιμοποιήσουμε το datase “Wine Quality” που χρησιμοποιήσα και στην λογιστική παλινδρόμηηση.Στοχος μας είναι να εφαρμόσουμε τα 4 βήματα δημιουργίας ενός μοντέλου CART και στην συνέχεια να συγκρίνουμε τα αποτελέσματα του με αυτά τιυ μοντέλου της Λογιστικής Παλινδρόμησης.

Βήμα 1 : Διερεύνηση και προετοιμασία δεδομένων

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)

Βήμα 2 : Δημιουργία μοντέλου CART

Για την δημιουργία του δέντρου απόφασης θα χρησιμοποιήσουμε τη συνάρτηση 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 για να διαχωρίσει άμεσα τα κόκκινα από τα λευκάα κρασία. Το πλεονέκτημα εδώ είναι η άμεση ερμηνευσημότιτα των κανόνων σε σχέση με τη Λογιστική Παλινδρόμηση.

Βήμα 3 : Εφαρμογή προβλέψεις και αξιολόγηση

Θα εφαρμόσουμε το μοντέλο μας στο σύνολο του ελέγχου για να αξιολογήσουμε την ικανότητα γενίκευσης του .

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 %

Βήμα 4 : Καμπύλη ROC και υπολογισμός AUC

Η καμπύλη 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