Διερεύνηση dataset

Θα χρησιμοποιήσουμε το dataset breast_cancer.cvs το οποίο περιέχει χαρακτηριστικά όγκων με τα οποία θέλουμε να προβλέψουμε αν είναι καλοήθης ή κακοήθης.

Το dataset περιέχει 699 εγγραφές και 10 μεταβλητές.

Εξαρτημένη μεταβλητή:

class, υποδεικνύει αν ο όγκος είναι καλοήθης (class=2), ή κακοήθης (class=4).

Ανεξάρτητες μεταβλητές:

-clump thickness: Πάχος όγκου, όσο μεγαλύτερο τόσο πιο ύποπτο

-uniformity of cell size: Ομοιομορφία μεγέθους κυττάρων. Η ανομοιομορφία υποδεικνύει πιθανή κακοήθεια

-uniformity of cell shape: Ομοιομορφία σχήματος κυττάρων, οι ανωμαλίες είναι ύποπτες

-marginal adhesion: Συνοχή των κυττάρων. Χαμηλή συνοχή υποδεικνύει κακοήθεια

-single epithelial cell size: Μέγεθος μεμονωμένων επιθηλιακών κυττάρων. Όταν είναι μεγάλα, υποδεικνύουν πιθανότητα ανωμαλίας

-bare nuclei: Πυρήνες χωρίς κυτταρόπλασμα, συχνά είναι δείκτης κακοήθειας

-bland chromatin: Ομοιομορφία χρωματίνης στον πυρήνα. Όταν είναι ακανόνιστη είναι ύποπτη

-normal nucleoli: Κανονικότητα πυρηνίσκων. Όταν είναι έντονοι και πολλοί, υποδεικνύουν κακοήθεια

-mitoses: Ρυθμός κυτταρικών διαιρέσεων. Όταν ο ρυθμός είναι υψηλός, υποδεικνύει επιθετικό όγκο.

Λογιστική Παλινδρόμηση

Πριν την ανάλυση, αλλάξαμε τις τιμές της μεταβλητής Class σε 0 (καλοήθης)/ 1 (κακοήθης) και χωρίσαμε τη βάση δεδομένων σε δύο σύνολα:

-το training set (65%), το οποίο χρησιμοποιείται για την εκπαίδευση του μοντέλου

-και το testing set (35%), για την αξιολόγηση της ακρίβειάς του.

Χρησιμοποιήθηκε ο αριθμός seed 3 για τη διασφάλιση της αναπαραγωγιμότητας των αποτελεσμάτων.

data <- read.csv("C:/Users/maria/Downloads/archive (3)/breast_cancer.csv")

# Εισαγωγή βιβλιοθηκων
library(caTools)
## Warning: package 'caTools' was built under R version 4.5.3
library(ROCR)
## Warning: package 'ROCR' was built under R version 4.5.3
# Αλλαγή τιμών Class (0/1)
data$Class <- ifelse(data$Class == 4, 1, 0)
data$Class <- as.factor(data$Class)

# Ορισμός Seed 
set.seed(3) 

# Διαχωρισμός (65% train)
split <- sample.split(data$Class, SplitRatio = 0.65)
train <- subset(data, split == TRUE)
test <- subset(data, split == FALSE)

# Εμφάνιση πλήθους εγγραφών
nrow(train)
## [1] 444
nrow(test)
## [1] 239

Παρατηρούμε ότι το training set περιλαμβάνει 444 εγγραφές, ενώ το testing set 239.

Δημιουργία Μοντέλου Λογιστικής Παλινδρόμησης

Δημιουργούμε το μοντέλο λογιστικής παλινδρόμησης, χρησιμοποιώντας όλες τις ανεξάρτητες μεταβλητές.

#Δημιουργίας μοντέλου
model <- glm(Class ~ ., data = train, family = binomial)

#Εμφάνιση αποτελεσμάτων
summary(model)
## 
## Call:
## glm(formula = Class ~ ., family = binomial, data = train)
## 
## Coefficients:
##                              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                 -11.71205    1.85944  -6.299    3e-10 ***
## Clump.Thickness               0.70278    0.20101   3.496 0.000472 ***
## Uniformity.of.Cell.Size      -0.05977    0.27191  -0.220 0.826007    
## Uniformity.of.Cell.Shape      0.15260    0.32456   0.470 0.638221    
## Marginal.Adhesion             0.31364    0.15224   2.060 0.039381 *  
## Single.Epithelial.Cell.Size   0.12280    0.23101   0.532 0.595029    
## Bare.Nuclei                   0.48746    0.13212   3.690 0.000225 ***
## Bland.Chromatin               0.53397    0.23005   2.321 0.020280 *  
## Normal.Nucleoli               0.29898    0.14603   2.047 0.040616 *  
## Mitoses                       0.69042    0.59118   1.168 0.242859    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 574.436  on 443  degrees of freedom
## Residual deviance:  55.914  on 434  degrees of freedom
## AIC: 75.914
## 
## Number of Fisher Scoring iterations: 9

Προβλέψεις στο test

predictTest <- predict(model, newdata  =  test, type = "response")
head(predictTest)
##           2          15          16          20          22          23 
## 0.914184377 0.999929819 0.521488413 0.022653574 0.999748516 0.001647522

Η εντολή predict με την παράμετρο type = “response” δίνει την εκτιμώμενη πιθανότητα (από 0 έως 1) ο όγκος να είναι κακοήθης (Class=4).

Για τη μετατροπή των πιθανοτήτων σε κατηγορίες χρησιμοποιήσαμε κατώφλι (threshold) 0.5, όπου τιμές μεγαλύτερες του 0.5 ταξινομούνται ως κακοήθεις (1), ενώ μικρότερες ως καλοήθεις (0).

# Δημιουργία του Confusion Matrix
conf_matrix <- table(test$Class, predictTest > 0.5)
conf_matrix
##    
##     FALSE TRUE
##   0   152    3
##   1     6   78
# Υπολογισμός Ακρίβειας (Accuracy)
accuracy <- sum(diag(conf_matrix)) / sum(conf_matrix)
accuracy
## [1] 0.9623431
table(test$Class)
## 
##   0   1 
## 155  84
# Υπολογισμός Sensitivity και Specificity
sensitivity <- conf_matrix[2,2] / sum(conf_matrix[2,])
specificity <- conf_matrix[1,1] / sum(conf_matrix[1,])
sensitivity
## [1] 0.9285714
specificity
## [1] 0.9806452
# Υπολογισμός Baseline Accuracy
baseline_accuracy <- max(prop.table(table(test$Class)))
baseline_accuracy
## [1] 0.6485356

Η ακρίβεια του μοντέλου είναι 96.2%, η οποία είναι μεγαλύτερη από τη baseline accuracy (περίπου 65%). Αυτό σημαίνει ότι το μοντέλο κάνει καλύτερες προβλέψεις από μια απλή τυχαία ή βασική επιλογή.

Καμπύλη ROC

# Kαμπύλη ROC
ROCRpred <- prediction(predictTest, test$Class)
ROCRperf <- performance(ROCRpred, "tpr", "fpr")
plot(ROCRperf, colorize = TRUE)

Η καμπύλη ROC δείχνει ότι το μοντέλο δουλεύει πολύ καλά, αφού η γραμμή είναι κοντά στην πάνω αριστερή πλευρά του γραφήματος. Αυτό σημαίνει ότι ξεχωρίζει σωστά τους καλοήθεις από τους κακοήθεις όγκους στις περισσότερες περιπτώσεις.

Δέντρο Απόφασης

Έχουμε ήδη χωρίσει το dataset σε train και test, οπότε εισάγουμε τις απαραίτητες βιβλιοθήκες και δημιουργούμε το μοντέλο CART με όνομα CancerTree.

Δημιουργία μοντέλου CART

# Εισαγωγή βιβλιοθηκων
library(rpart)
## Warning: package 'rpart' was built under R version 4.5.3
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.5.3
# Δημιουργία μοντέλου CART
CancerTree <- rpart(Class ~ ., data = train, method="class", minbucket=25)
prp(CancerTree)

Παρατηρούμε ότι το δέντρο χρησιμοποιεί μόνο δύο μεταβλητές (uniformity of cell size και bare nuclei), παρόλο που δόθηκαν όλες οι μεταβλητές στο μοντέλο.

Αυτό συμβαίνει επειδή το CART επιλέγει μόνο τις πιο σημαντικές μεταβλητές που βελτιώνουν σημαντικά τον διαχωρισμό των δεδομένων.

Στη συγκεκριμένη περίπτωση, αυτές οι δύο μεταβλητές είναι αρκετές για να επιτύχουν υψηλή ακρίβεια, επομένως το μοντέλο δεν χρειάζεται επιπλέον splits.

Αυτό δείχνει ότι το μοντέλο είναι απλό και εύκολα ερμηνεύσιμο.

summary(CancerTree)
## Call:
## rpart(formula = Class ~ ., data = train, method = "class", minbucket = 25)
##   n= 444 
## 
##           CP nsplit rel error    xerror       xstd
## 1 0.79354839      0 1.0000000 1.0000000 0.06480247
## 2 0.06451613      1 0.2064516 0.2064516 0.03515608
## 3 0.01000000      2 0.1419355 0.2193548 0.03614999
## 
## Variable importance
##     Uniformity.of.Cell.Size    Uniformity.of.Cell.Shape 
##                          21                          18 
##                 Bare.Nuclei             Bland.Chromatin 
##                          17                          15 
##             Normal.Nucleoli Single.Epithelial.Cell.Size 
##                          15                          13 
##             Clump.Thickness 
##                           1 
## 
## Node number 1: 444 observations,    complexity param=0.7935484
##   predicted class=0  expected loss=0.3490991  P(node) =1
##     class counts:   289   155
##    probabilities: 0.651 0.349 
##   left son=2 (303 obs) right son=3 (141 obs)
##   Primary splits:
##       Uniformity.of.Cell.Size     < 3.5 to the left,  improve=142.4200, (0 missing)
##       Uniformity.of.Cell.Shape    < 3.5 to the left,  improve=137.6203, (0 missing)
##       Bare.Nuclei                 < 3.5 to the left,  improve=130.6364, (0 missing)
##       Single.Epithelial.Cell.Size < 2.5 to the left,  improve=125.7415, (0 missing)
##       Normal.Nucleoli             < 2.5 to the left,  improve=124.1403, (0 missing)
##   Surrogate splits:
##       Uniformity.of.Cell.Shape    < 3.5 to the left,  agree=0.939, adj=0.809, (0 split)
##       Bland.Chromatin             < 3.5 to the left,  agree=0.894, adj=0.667, (0 split)
##       Bare.Nuclei                 < 3.5 to the left,  agree=0.885, adj=0.638, (0 split)
##       Normal.Nucleoli             < 2.5 to the left,  agree=0.885, adj=0.638, (0 split)
##       Single.Epithelial.Cell.Size < 2.5 to the left,  agree=0.883, adj=0.631, (0 split)
## 
## Node number 2: 303 observations,    complexity param=0.06451613
##   predicted class=0  expected loss=0.07590759  P(node) =0.6824324
##     class counts:   280    23
##    probabilities: 0.924 0.076 
##   left son=4 (277 obs) right son=5 (26 obs)
##   Primary splits:
##       Bare.Nuclei                 < 3.5 to the left,  improve=21.611830, (0 missing)
##       Normal.Nucleoli             < 2.5 to the left,  improve=18.998950, (0 missing)
##       Uniformity.of.Cell.Shape    < 2.5 to the left,  improve=12.676730, (0 missing)
##       Single.Epithelial.Cell.Size < 2.5 to the left,  improve=12.503970, (0 missing)
##       Uniformity.of.Cell.Size     < 1.5 to the left,  improve= 9.281664, (0 missing)
##   Surrogate splits:
##       Clump.Thickness          < 6.5 to the left,  agree=0.941, adj=0.308, (0 split)
##       Normal.Nucleoli          < 3.5 to the left,  agree=0.937, adj=0.269, (0 split)
##       Uniformity.of.Cell.Shape < 4.5 to the left,  agree=0.927, adj=0.154, (0 split)
##       Bland.Chromatin          < 3.5 to the left,  agree=0.927, adj=0.154, (0 split)
##       Marginal.Adhesion        < 3.5 to the left,  agree=0.921, adj=0.077, (0 split)
## 
## Node number 3: 141 observations
##   predicted class=1  expected loss=0.06382979  P(node) =0.3175676
##     class counts:     9   132
##    probabilities: 0.064 0.936 
## 
## Node number 4: 277 observations
##   predicted class=0  expected loss=0.01805054  P(node) =0.6238739
##     class counts:   272     5
##    probabilities: 0.982 0.018 
## 
## Node number 5: 26 observations
##   predicted class=1  expected loss=0.3076923  P(node) =0.05855856
##     class counts:     8    18
##    probabilities: 0.308 0.692

Εφαρμογή Πρόβλεψης

Χρησιμοποιούμε το εκπαιδευμένο δέντρο απόφασης για την πρόβλεψη των τιμών στο test set.

Η συνάρτηση predict() με την επιλογή type = “class” επιστρέφει την τελική κατηγορία (0 ή 1) για κάθε εγγραφή.

PredictCART <- predict (CancerTree, newdata=test, type='class')

# Ακρίβεια μοντέλου
table(test$Class, PredictCART)
##    PredictCART
##       0   1
##   0 146   9
##   1   2  82

Για την αξιολόγηση του μοντέλου χρησιμοποιούμε επίσης την καμπύλη ROC. Σε αυτή την περίπτωση, χρησιμοποιούνται πιθανότητες (type = “prob”) αντί για κατηγορίες, ώστε να υπολογιστεί σωστά η απόδοση του μοντέλου σε όλα τα πιθανά thresholds.

# Καμπλύλη ROC από το CART
PredictROC <- predict(CancerTree, newdata = test, type = "prob")
PredictROC
##              0          1
## 2   0.06382979 0.93617021
## 15  0.06382979 0.93617021
## 16  0.06382979 0.93617021
## 20  0.98194946 0.01805054
## 22  0.06382979 0.93617021
## 23  0.98194946 0.01805054
## 26  0.98194946 0.01805054
## 27  0.98194946 0.01805054
## 35  0.98194946 0.01805054
## 39  0.06382979 0.93617021
## 40  0.06382979 0.93617021
## 42  0.06382979 0.93617021
## 43  0.06382979 0.93617021
## 44  0.98194946 0.01805054
## 47  0.98194946 0.01805054
## 56  0.98194946 0.01805054
## 66  0.30769231 0.69230769
## 74  0.98194946 0.01805054
## 79  0.98194946 0.01805054
## 83  0.06382979 0.93617021
## 84  0.06382979 0.93617021
## 85  0.30769231 0.69230769
## 91  0.98194946 0.01805054
## 94  0.98194946 0.01805054
## 95  0.98194946 0.01805054
## 96  0.98194946 0.01805054
## 98  0.06382979 0.93617021
## 100 0.30769231 0.69230769
## 101 0.98194946 0.01805054
## 103 0.06382979 0.93617021
## 108 0.06382979 0.93617021
## 110 0.06382979 0.93617021
## 111 0.30769231 0.69230769
## 112 0.06382979 0.93617021
## 115 0.98194946 0.01805054
## 116 0.06382979 0.93617021
## 118 0.98194946 0.01805054
## 120 0.98194946 0.01805054
## 121 0.06382979 0.93617021
## 125 0.06382979 0.93617021
## 126 0.98194946 0.01805054
## 132 0.98194946 0.01805054
## 133 0.98194946 0.01805054
## 134 0.98194946 0.01805054
## 135 0.98194946 0.01805054
## 141 0.30769231 0.69230769
## 142 0.98194946 0.01805054
## 144 0.98194946 0.01805054
## 145 0.98194946 0.01805054
## 148 0.30769231 0.69230769
## 149 0.06382979 0.93617021
## 151 0.98194946 0.01805054
## 152 0.06382979 0.93617021
## 153 0.98194946 0.01805054
## 159 0.98194946 0.01805054
## 165 0.98194946 0.01805054
## 166 0.98194946 0.01805054
## 168 0.06382979 0.93617021
## 176 0.98194946 0.01805054
## 177 0.98194946 0.01805054
## 178 0.06382979 0.93617021
## 179 0.06382979 0.93617021
## 180 0.98194946 0.01805054
## 181 0.06382979 0.93617021
## 182 0.06382979 0.93617021
## 187 0.98194946 0.01805054
## 202 0.98194946 0.01805054
## 203 0.98194946 0.01805054
## 204 0.98194946 0.01805054
## 207 0.98194946 0.01805054
## 208 0.06382979 0.93617021
## 214 0.98194946 0.01805054
## 215 0.98194946 0.01805054
## 217 0.30769231 0.69230769
## 218 0.06382979 0.93617021
## 220 0.98194946 0.01805054
## 224 0.06382979 0.93617021
## 228 0.06382979 0.93617021
## 230 0.06382979 0.93617021
## 233 0.06382979 0.93617021
## 236 0.98194946 0.01805054
## 240 0.06382979 0.93617021
## 245 0.30769231 0.69230769
## 247 0.06382979 0.93617021
## 248 0.06382979 0.93617021
## 260 0.30769231 0.69230769
## 265 0.30769231 0.69230769
## 267 0.98194946 0.01805054
## 268 0.98194946 0.01805054
## 269 0.98194946 0.01805054
## 271 0.06382979 0.93617021
## 273 0.98194946 0.01805054
## 276 0.06382979 0.93617021
## 277 0.06382979 0.93617021
## 278 0.06382979 0.93617021
## 283 0.98194946 0.01805054
## 284 0.06382979 0.93617021
## 285 0.06382979 0.93617021
## 287 0.98194946 0.01805054
## 289 0.06382979 0.93617021
## 291 0.06382979 0.93617021
## 293 0.30769231 0.69230769
## 297 0.06382979 0.93617021
## 302 0.98194946 0.01805054
## 307 0.06382979 0.93617021
## 308 0.06382979 0.93617021
## 309 0.98194946 0.01805054
## 310 0.06382979 0.93617021
## 311 0.98194946 0.01805054
## 312 0.98194946 0.01805054
## 316 0.06382979 0.93617021
## 318 0.98194946 0.01805054
## 321 0.06382979 0.93617021
## 323 0.06382979 0.93617021
## 327 0.30769231 0.69230769
## 328 0.98194946 0.01805054
## 331 0.06382979 0.93617021
## 332 0.98194946 0.01805054
## 333 0.98194946 0.01805054
## 335 0.06382979 0.93617021
## 343 0.98194946 0.01805054
## 344 0.06382979 0.93617021
## 351 0.98194946 0.01805054
## 358 0.98194946 0.01805054
## 361 0.98194946 0.01805054
## 363 0.98194946 0.01805054
## 364 0.98194946 0.01805054
## 367 0.98194946 0.01805054
## 368 0.06382979 0.93617021
## 369 0.98194946 0.01805054
## 372 0.98194946 0.01805054
## 373 0.06382979 0.93617021
## 375 0.98194946 0.01805054
## 376 0.98194946 0.01805054
## 377 0.98194946 0.01805054
## 380 0.98194946 0.01805054
## 385 0.98194946 0.01805054
## 387 0.06382979 0.93617021
## 389 0.98194946 0.01805054
## 390 0.30769231 0.69230769
## 392 0.98194946 0.01805054
## 396 0.98194946 0.01805054
## 397 0.98194946 0.01805054
## 407 0.06382979 0.93617021
## 410 0.98194946 0.01805054
## 418 0.98194946 0.01805054
## 423 0.98194946 0.01805054
## 426 0.06382979 0.93617021
## 427 0.30769231 0.69230769
## 428 0.98194946 0.01805054
## 429 0.98194946 0.01805054
## 432 0.98194946 0.01805054
## 439 0.06382979 0.93617021
## 440 0.98194946 0.01805054
## 444 0.98194946 0.01805054
## 445 0.98194946 0.01805054
## 446 0.98194946 0.01805054
## 449 0.98194946 0.01805054
## 450 0.98194946 0.01805054
## 459 0.98194946 0.01805054
## 460 0.98194946 0.01805054
## 461 0.98194946 0.01805054
## 475 0.30769231 0.69230769
## 483 0.98194946 0.01805054
## 484 0.98194946 0.01805054
## 485 0.98194946 0.01805054
## 486 0.98194946 0.01805054
## 493 0.30769231 0.69230769
## 494 0.98194946 0.01805054
## 495 0.98194946 0.01805054
## 499 0.98194946 0.01805054
## 502 0.98194946 0.01805054
## 503 0.98194946 0.01805054
## 505 0.06382979 0.93617021
## 506 0.98194946 0.01805054
## 508 0.06382979 0.93617021
## 510 0.98194946 0.01805054
## 511 0.98194946 0.01805054
## 518 0.98194946 0.01805054
## 520 0.98194946 0.01805054
## 521 0.98194946 0.01805054
## 525 0.98194946 0.01805054
## 527 0.98194946 0.01805054
## 529 0.98194946 0.01805054
## 530 0.98194946 0.01805054
## 531 0.98194946 0.01805054
## 533 0.98194946 0.01805054
## 534 0.98194946 0.01805054
## 537 0.98194946 0.01805054
## 540 0.98194946 0.01805054
## 541 0.98194946 0.01805054
## 543 0.98194946 0.01805054
## 551 0.06382979 0.93617021
## 559 0.98194946 0.01805054
## 561 0.98194946 0.01805054
## 563 0.98194946 0.01805054
## 564 0.98194946 0.01805054
## 570 0.98194946 0.01805054
## 573 0.98194946 0.01805054
## 577 0.06382979 0.93617021
## 580 0.06382979 0.93617021
## 582 0.98194946 0.01805054
## 583 0.98194946 0.01805054
## 590 0.30769231 0.69230769
## 591 0.06382979 0.93617021
## 594 0.06382979 0.93617021
## 597 0.06382979 0.93617021
## 598 0.06382979 0.93617021
## 600 0.98194946 0.01805054
## 601 0.98194946 0.01805054
## 602 0.98194946 0.01805054
## 610 0.30769231 0.69230769
## 612 0.30769231 0.69230769
## 613 0.98194946 0.01805054
## 615 0.98194946 0.01805054
## 618 0.06382979 0.93617021
## 619 0.98194946 0.01805054
## 622 0.98194946 0.01805054
## 626 0.98194946 0.01805054
## 630 0.98194946 0.01805054
## 634 0.98194946 0.01805054
## 640 0.98194946 0.01805054
## 641 0.98194946 0.01805054
## 644 0.98194946 0.01805054
## 645 0.98194946 0.01805054
## 653 0.06382979 0.93617021
## 657 0.98194946 0.01805054
## 658 0.98194946 0.01805054
## 662 0.98194946 0.01805054
## 670 0.98194946 0.01805054
## 672 0.98194946 0.01805054
## 673 0.98194946 0.01805054
## 674 0.98194946 0.01805054
## 675 0.98194946 0.01805054
## 676 0.06382979 0.93617021
## 679 0.98194946 0.01805054
## 680 0.98194946 0.01805054
## 682 0.06382979 0.93617021
## 683 0.06382979 0.93617021
pred <- prediction(PredictROC[,2], test$Class)
perf <- performance(pred, "tpr", "fpr")
plot(perf)

Η τιμή AUC που προκύπτει δείχνει τη συνολική ικανότητα του μοντέλου να διαχωρίζει τις δύο κατηγορίες. Όσο πιο κοντά είναι στο 1, τόσο καλύτερη είναι η απόδοση.

as.numeric(performance(pred, "auc")@y.values)
## [1] 0.9769585

Σύγκριση Λογιστικής Παλινδρόμησης και CART

Η λογιστική παλινδρόμηση και το δέντρο απόφασης (CART) εφαρμόστηκαν στο ίδιο dataset με στόχο την πρόβλεψη της κατηγορίας του όγκου (καλοήθης ή κακοήθης).

Η λογιστική παλινδρόμηση πέτυχε πολύ υψηλή ακρίβεια (περίπου 96%), η οποία είναι σημαντικά μεγαλύτερη από τη baseline accuracy. Η καμπύλη ROC έδειξε επίσης πολύ καλή απόδοση, γεγονός που σημαίνει ότι το μοντέλο διαχωρίζει σωστά τις δύο κατηγορίες.

Το μοντέλο CART παρουσίασε επίσης καλή απόδοση, αν και σε ορισμένες περιπτώσεις μπορεί να έχει ελαφρώς χαμηλότερη ακρίβεια από τη λογιστική παλινδρόμηση.

Η βασική διαφορά μεταξύ των δύο μοντέλων είναι ότι:

Η λογιστική παλινδρόμηση είναι πιο σταθερή και συχνά πιο ακριβής. Το δέντρο απόφασης είναι πιο εύκολο στην κατανόηση, καθώς παρουσιάζει τις αποφάσεις με μορφή κανόνων (if-else).

Συνολικά, και τα δύο μοντέλα αποδίδουν πολύ καλά, αλλά εξυπηρετούν διαφορετικούς σκοπούς.

Τελικά Συμπεράσματα

Στην παρούσα εργασία εφαρμόστηκαν δύο διαφορετικά μοντέλα ταξινόμησης: η λογιστική παλινδρόμηση και το δέντρο απόφασης (CART), με στόχο την πρόβλεψη της κατηγορίας ενός όγκου (καλοήθης/κακοήθης).

Τα αποτελέσματα έδειξαν ότι και τα δύο μοντέλα έχουν πολύ καλή απόδοση, με υψηλή ακρίβεια και καλή συμπεριφορά στην καμπύλη ROC.

Η λογιστική παλινδρόμηση παρουσίασε ελαφρώς καλύτερη ακρίβεια, γεγονός που την καθιστά πιο κατάλληλη όταν ο βασικός στόχος είναι η όσο το δυνατόν πιο σωστή πρόβλεψη.

Από την άλλη πλευρά, το δέντρο απόφασης έχει το πλεονέκτημα της απλότητας και της ευκολίας ερμηνείας. Οι αποφάσεις του μπορούν να παρουσιαστούν με απλούς κανόνες, κάτι που είναι ιδιαίτερα χρήσιμο σε εφαρμογές όπου απαιτείται κατανόηση του μοντέλου.

Επιπλέον, παρατηρήθηκε ότι το δέντρο χρησιμοποίησε μόνο λίγες μεταβλητές, κάτι που δείχνει ότι το dataset μπορεί να διαχωριστεί αποτελεσματικά με περιορισμένη πληροφορία.

Καταλήγουμε ότι η επιλογή του κατάλληλου μοντέλου εξαρτάται από τον στόχο της ανάλυσης.