Εισαγωγή

Περιγραφή του Dataset

Το Titanic - Machine Learning from Disaster κοινοποιήθηκε το 2012 στο Kaggle, ένα αποθετήριο βάσεων, συνόλων δεδομένων και θεωριών πεδίων. Εντάσσεται στον χώρο της μηχανικής μάθησης και χρησιμοποιείται ευρέως για σκοπούς εκπαίδευσης και επίδειξης αλγορίθμων ταξινόμησης. Βασίζεται στο ναυάγιο του Τιτανικού, του διάσημου επιβατηγού πλοίου που βυθίστηκε το 1912 και περιέχει πληροφορίες για τους επιβάτες. Στόχος του είναι η πρόβλεψη της επιβίωσης (Survived) κάθε επιβάτη, με βάση τα χαρακτηριστικά του.

Επιχειρηματική Αναλυτική

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

Περιγραφή των Μεταβλητών

Το train dataset αποτελείται από 891 εγγραφές και 12 μεταβλητές.

Αναλυτικός πίνακας με τα στοιχεία των επιβατών του Τιτανικού:
Μεταβλητή Περιγραφή Τύπος Εύρος Μονάδα Μέτρησης
PassengerId Αναγνωριστικό Επιβάτη Αριθμητική 1 - 891
Survived Κατάφερε να επιβιώσει (ναι/όχι) Αριθμητική 0 - 1
Pclass Κατηγορία Εισιτηρίου Αριθμητική 1 - 3
Name Όνομα Κατηγορική Calic, Mr. Petar, Markoff, Mr. Marin, Kelly, Miss. Anna Katherine “Annie Kate”, Moor, Mrs. (Beila), Douglas, Mr. Walter Donald
Sex Φύλλο Κατηγορική female, male
Age Ηλικία Αριθμητική NA - NA Έτη
Sibsp Αριθμός αδελφών/συζύγου στο πλοίο Αριθμητική 0 - 8
Parch Αριθμός γονέων/παιδιών στο πλοίο Αριθμητική 0 - 6
Ticket Αριθμός εισιτηρίου Κατηγορική 349224, 19928, 19943, 370365, PC 17558
Fare Τιμή εισιτηρίου Αριθμητική 0 - 512.3292 Δολλάρια ($)
Cabin Αριθμός καμπίνας Κατηγορική B101, D7, E50, D35, B42
Embarked Λιμάνι επιβίβασης Κατηγορική , C, Q, S

Έλεγχος εγκυρότητας του dataset

Παρατηρούμε πως το dataset έχει κάποια missing values, καθώς στο εύρος των τιμών για τις ηλικίες των επιβατών εμφανίζεται NA. Επιπλέον στην μεταβλητή που δείχνει σε ποιο λιμάνι επιβιβάστηκε ο πελάτης φαίνεται να υπάρχει empty string ““, πριν τους χαρακτηριστικούς τύπους C = Cherbourg, Q = Queenstown και S = Southampton.

Ελλιπείς Τιμές

cat(sum(is.na(train)))
## 177

Διπλότυπες Εγγραφές

cat(sum(duplicated(train)))
## 0

Αφαιρούμε από το dataset τις εγρραφές που έχουν missing values.

train$Embarked[train$Embarked == ""] <- NA
clean_train <- na.omit(train)
Πινακας με τις εγγραφές που είχαν NA’s:
Μεταβλητή Περιγραφή Τύπος Εύρος Μονάδα Μέτρησης
Age Ηλικία Επιβάτη Αριθμητική 0.42 - 80 Έτη
Embarked Λιμάνι επιβίβασης Κατηγορική C, Q, S
## Συνολικές εγγραφές του dataset μετά την αφαίρεση των ελλειπών τιμών: 712

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

Κατανομή των τιμών της εξαρτημένης μεταβλητής Survived του dataset:

table(clean_train$Survived)
## 
##   0   1 
## 424 288
baseaccprop <- (288/712)*100
cat(round(baseaccprop, digits = 1))
## 40.4

Σχόλιο
Παρατηρείται πως μόνο οι 288 επιβάτες από τους 712 κατάφεραν να επιβιώσουν. Έαν λοιπόν προβλέψουμε ότι όλοι οι επιβάτες του πλοίου σώθηκαν τότε σύμφωνα με την μέθοδο της απλής βάσης θα πετύχουμε το αποτέλεσμα με ακρίβεια της τάξης του 40.4%. Εφαρμόζοντας τη λογιστική παλινδρόμηση στοχεύουμε στην καλύτερη ικανότητα αναγνώρισης των διασωθέντων επιβατών, δηλαδή στην αύξηση του παραπάνω ποσοστού πρόβλεψης.

Προετοιμασία των δεδομένων

Μετατρέπουμε όλες τις κατηγορικές μεταβλητές σε factors.

clean_train$Survived <- as.factor(clean_train$Survived)
clean_train$Pclass <- as.factor(clean_train$Pclass)
clean_train$Sex <- as.factor(clean_train$Sex)
clean_train$Cabin <- as.factor(clean_train$Cabin)
clean_train$Embarked <- as.factor(clean_train$Embarked)

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

Αφαιρούμε από το μοντέλο της ανεξάρτητες μεταβλητές PassengerId, Name και Ticket, καθώς αυτές αποτελούν μοναδικά αναγνωριστικά για κάθε επιβάτη και άρα δεν έχουν κάποια επίδραση στο αποτέλεσμα της πρόβλεψης.

LRmodel <- glm(Survived ~ Pclass + Cabin + Sex + Age + SibSp + Parch + Fare + Embarked, data = clean_train, family = "binomial")
summary(LRmodel)
## 
## Call:
## glm(formula = Survived ~ Pclass + Cabin + Sex + Age + SibSp + 
##     Parch + Fare + Embarked, family = "binomial", data = clean_train)
## 
## Coefficients:
##                        Estimate Std. Error z value Pr(>|z|)    
## (Intercept)           3.972e+00  8.258e-01   4.809 1.51e-06 ***
## Pclass2              -7.848e-01  6.233e-01  -1.259 0.208016    
## Pclass3              -1.868e+00  6.516e-01  -2.866 0.004153 ** 
## CabinA10             -1.848e+01  6.523e+03  -0.003 0.997739    
## CabinA16              1.709e+01  6.523e+03   0.003 0.997910    
## CabinA20              1.964e+01  6.523e+03   0.003 0.997598    
## CabinA23              2.128e+01  6.523e+03   0.003 0.997397    
## CabinA24             -1.842e+01  6.523e+03  -0.003 0.997747    
## CabinA26              1.966e+01  6.523e+03   0.003 0.997595    
## CabinA31              1.892e+01  6.523e+03   0.003 0.997685    
## CabinA34              1.717e+01  6.523e+03   0.003 0.997900    
## CabinA36             -1.758e+01  6.523e+03  -0.003 0.997849    
## CabinA5              -1.673e+01  6.523e+03  -0.003 0.997953    
## CabinA6               1.870e+01  6.523e+03   0.003 0.997713    
## CabinA7              -1.743e+01  6.523e+03  -0.003 0.997868    
## CabinB101             1.443e+01  6.523e+03   0.002 0.998234    
## CabinB18              1.570e+01  4.425e+03   0.004 0.997169    
## CabinB19             -1.681e+01  6.523e+03  -0.003 0.997944    
## CabinB20              1.805e+01  3.685e+03   0.005 0.996091    
## CabinB22             -1.471e-03  2.620e+00  -0.001 0.999552    
## CabinB3               1.525e+01  6.523e+03   0.002 0.998135    
## CabinB30             -1.724e+01  6.523e+03  -0.003 0.997891    
## CabinB35              1.515e+01  4.612e+03   0.003 0.997379    
## CabinB37             -1.732e+01  6.523e+03  -0.003 0.997881    
## CabinB38             -1.753e+01  6.523e+03  -0.003 0.997856    
## CabinB39              1.528e+01  6.523e+03   0.002 0.998131    
## CabinB4               1.649e+01  6.523e+03   0.003 0.997983    
## CabinB41              2.000e+01  6.523e+03   0.003 0.997554    
## CabinB42              1.566e+01  6.523e+03   0.002 0.998085    
## CabinB49              1.714e+01  3.798e+03   0.005 0.996400    
## CabinB5               1.425e+01  4.565e+03   0.003 0.997510    
## CabinB50              1.854e+01  6.523e+03   0.003 0.997732    
## CabinB51 B53 B55     -1.706e+00  2.928e+00  -0.583 0.560082    
## CabinB57 B59 B63 B66  1.429e+01  4.610e+03   0.003 0.997527    
## CabinB58 B60         -3.002e+00  2.070e+00  -1.451 0.146884    
## CabinB69              1.723e+01  6.523e+03   0.003 0.997892    
## CabinB71             -1.793e+01  6.523e+03  -0.003 0.997807    
## CabinB73              1.563e+01  6.523e+03   0.002 0.998088    
## CabinB77              1.577e+01  4.610e+03   0.003 0.997271    
## CabinB79              1.501e+01  6.523e+03   0.002 0.998164    
## CabinB80              1.613e+01  6.523e+03   0.002 0.998027    
## CabinB82 B84         -1.834e+01  6.523e+03  -0.003 0.997756    
## CabinB86             -1.941e+01  6.523e+03  -0.003 0.997625    
## CabinB94             -1.753e+01  6.523e+03  -0.003 0.997855    
## CabinB96 B98          1.747e+01  2.712e+03   0.006 0.994860    
## CabinC101             1.813e+01  6.523e+03   0.003 0.997782    
## CabinC103             1.758e+01  6.523e+03   0.003 0.997849    
## CabinC104             1.991e+01  6.523e+03   0.003 0.997564    
## CabinC110            -1.765e+01  6.523e+03  -0.003 0.997841    
## CabinC111            -1.867e+01  6.523e+03  -0.003 0.997717    
## CabinC118            -1.832e+01  6.523e+03  -0.003 0.997759    
## CabinC123            -4.554e-01  1.847e+00  -0.247 0.805228    
## CabinC124            -1.752e+01  6.523e+03  -0.003 0.997857    
## CabinC125             1.610e+01  4.527e+03   0.004 0.997162    
## CabinC126             2.003e+01  6.523e+03   0.003 0.997550    
## CabinC148             1.825e+01  6.523e+03   0.003 0.997768    
## CabinC2              -1.086e+00  1.920e+00  -0.566 0.571697    
## CabinC22 C26         -3.905e+00  1.639e+00  -2.383 0.017163 *  
## CabinC23 C25 C27     -1.720e+00  1.952e+00  -0.881 0.378200    
## CabinC30             -1.707e+01  6.523e+03  -0.003 0.997911    
## CabinC32              1.515e+01  6.523e+03   0.002 0.998147    
## CabinC45              1.444e+01  6.523e+03   0.002 0.998234    
## CabinC46             -1.792e+01  6.523e+03  -0.003 0.997808    
## CabinC49             -2.036e+01  6.523e+03  -0.003 0.997510    
## CabinC50              1.661e+01  6.523e+03   0.003 0.997968    
## CabinC52              1.878e+01  6.523e+03   0.003 0.997703    
## CabinC54              1.503e+01  6.523e+03   0.002 0.998162    
## CabinC62 C64          1.397e+01  6.523e+03   0.002 0.998291    
## CabinC65             -2.249e+00  1.885e+00  -1.193 0.232749    
## CabinC68             -9.526e-01  1.988e+00  -0.479 0.631834    
## CabinC7               1.510e+01  6.523e+03   0.002 0.998153    
## CabinC70              1.715e+01  6.523e+03   0.003 0.997903    
## CabinC78             -1.391e-02  2.227e+00  -0.006 0.995018    
## CabinC82             -2.039e+01  6.523e+03  -0.003 0.997506    
## CabinC83             -5.286e-01  1.963e+00  -0.269 0.787742    
## CabinC85              1.632e+01  6.523e+03   0.003 0.998004    
## CabinC86             -1.788e+01  6.523e+03  -0.003 0.997812    
## CabinC87             -1.670e+01  6.523e+03  -0.003 0.997957    
## CabinC90              1.533e+01  6.523e+03   0.002 0.998125    
## CabinC91             -1.896e+01  6.523e+03  -0.003 0.997681    
## CabinC92              1.935e+01  6.523e+03   0.003 0.997633    
## CabinC93              1.821e+01  3.842e+03   0.005 0.996218    
## CabinC99              1.550e+01  6.523e+03   0.002 0.998104    
## CabinD                2.058e-01  1.529e+00   0.135 0.892943    
## CabinD10 D12          1.783e+01  6.523e+03   0.003 0.997818    
## CabinD11              1.729e+01  6.523e+03   0.003 0.997884    
## CabinD15              1.548e+01  6.523e+03   0.002 0.998106    
## CabinD17              1.713e+01  4.612e+03   0.004 0.997037    
## CabinD19              1.973e+01  6.523e+03   0.003 0.997586    
## CabinD20              1.699e+01  4.611e+03   0.004 0.997060    
## CabinD26             -1.850e+01  4.362e+03  -0.004 0.996617    
## CabinD28              1.545e+01  6.523e+03   0.002 0.998110    
## CabinD30             -1.852e+01  6.523e+03  -0.003 0.997734    
## CabinD33              1.846e+01  3.902e+03   0.005 0.996226    
## CabinD35              1.867e+01  4.039e+03   0.005 0.996313    
## CabinD36              1.542e+01  4.595e+03   0.003 0.997322    
## CabinD37              1.736e+01  6.523e+03   0.003 0.997877    
## CabinD46             -1.749e+01  6.523e+03  -0.003 0.997860    
## CabinD47              1.574e+01  6.523e+03   0.002 0.998075    
## CabinD48             -1.801e+01  6.523e+03  -0.003 0.997797    
## CabinD49              1.789e+01  6.523e+03   0.003 0.997812    
## CabinD50             -1.680e+01  6.523e+03  -0.003 0.997945    
## CabinD56              1.998e+01  6.523e+03   0.003 0.997556    
## CabinD6              -1.833e+01  6.523e+03  -0.003 0.997757    
## CabinD7               1.788e+01  6.523e+03   0.003 0.997813    
## CabinD9               1.533e+01  6.523e+03   0.002 0.998125    
## CabinE10              2.100e+01  6.523e+03   0.003 0.997431    
## CabinE101             1.713e+01  4.605e+03   0.004 0.997032    
## CabinE12              1.975e+01  6.523e+03   0.003 0.997584    
## CabinE121             1.902e+01  4.204e+03   0.005 0.996390    
## CabinE17              1.990e+01  6.523e+03   0.003 0.997566    
## CabinE24              1.930e+01  4.599e+03   0.004 0.996652    
## CabinE25              1.917e+01  4.612e+03   0.004 0.996684    
## CabinE31             -1.728e+01  6.523e+03  -0.003 0.997886    
## CabinE33              1.561e+01  6.523e+03   0.002 0.998091    
## CabinE34              1.588e+01  6.523e+03   0.002 0.998057    
## CabinE36              1.555e+01  6.523e+03   0.002 0.998098    
## CabinE38             -1.655e+01  6.523e+03  -0.003 0.997975    
## CabinE40              1.540e+01  6.523e+03   0.002 0.998116    
## CabinE44             -6.632e-02  1.967e+00  -0.034 0.973106    
## CabinE46             -1.731e+01  6.523e+03  -0.003 0.997882    
## CabinE49              1.629e+01  6.523e+03   0.002 0.998008    
## CabinE50              1.848e+01  6.523e+03   0.003 0.997739    
## CabinE58             -1.742e+01  6.523e+03  -0.003 0.997869    
## CabinE63             -1.753e+01  6.523e+03  -0.003 0.997855    
## CabinE67             -2.030e-01  2.003e+00  -0.101 0.919259    
## CabinE68              1.522e+01  6.523e+03   0.002 0.998139    
## CabinE77             -1.867e+01  6.523e+03  -0.003 0.997716    
## CabinE8               1.810e+01  3.978e+03   0.005 0.996370    
## CabinF G63           -1.564e+01  6.523e+03  -0.002 0.998087    
## CabinF G73           -1.662e+01  4.603e+03  -0.004 0.997119    
## CabinF2               1.419e+00  1.307e+00   1.086 0.277574    
## CabinF33              1.711e+01  3.751e+03   0.005 0.996361    
## CabinF4               1.824e+01  3.932e+03   0.005 0.996300    
## CabinG6              -8.281e-01  1.084e+00  -0.764 0.444953    
## CabinT               -1.760e+01  6.523e+03  -0.003 0.997847    
## Sexmale              -2.655e+00  2.517e-01 -10.547  < 2e-16 ***
## Age                  -4.868e-02  1.048e-02  -4.643 3.43e-06 ***
## SibSp                -5.037e-01  1.508e-01  -3.341 0.000835 ***
## Parch                -2.407e-02  1.362e-01  -0.177 0.859708    
## Fare                  8.820e-03  6.854e-03   1.287 0.198179    
## EmbarkedQ            -7.944e-01  6.627e-01  -1.199 0.230622    
## EmbarkedS            -4.011e-01  3.623e-01  -1.107 0.268273    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 960.90  on 711  degrees of freedom
## Residual deviance: 490.18  on 569  degrees of freedom
## AIC: 776.18
## 
## Number of Fisher Scoring iterations: 17

Ερμηνεία Συσχετίσεων
Θεωρούμε στατιστικά σημαντικές τις ανεξάρτητες μεταβλητές που στη στήλη Pr(>|z|) έχουν τιμές <0.01, δηλαδή αυτές που έχουν τουλάχιστον δύο ** από δίπλα τους.

Στατιστικά σημαντικές μεταβλητές (p < 0.01):
Μεταβλητή Συντελεστής (Estimate) P-value Επίδραση
Pclass3 -1.868e+00 0.004153 Ισχυρή
Sexmale -2.655e+00 < 2e-16 Πολύ ισχυρή
Age -4.868e-02 3.43e-06 Αρκετά ισχυρή
SibSp -5.037e-01 0.000835 Ισχυρή

Παρατηρήσεις:

  • Εάν το εισιτήριο του επιβάτη ανήκει στην 2η (ή και 3η όπως θα δούμε παρακάτω) κατηγορία, τότε η πιθανότητα επιβίωσης μειώνεται.

  • Εάν ο επιβάτης είναι άνδρας, τότε η πιθανότητα επιβίωσης μειώνεται.

  • Όσο μεγαλύτερος είναι ο επιβάτης ηλικιακά, τόσο μικρότερη είναι η πιθανότητα επιβίωσης.

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

Διαδικασία αφαίρεσης μεταβλητών

Με βάση τον παραπάνω πίνακα, έχει νοήμα να κρατήσουμε στο τελικό μοντέλο της λογιστικής παλινδρόμησης τις ανεξάρτητες μεταβλητές Pclass, Sex, Age και SibSp.

LRmodel2 <- glm(Survived ~ Pclass + Sex + Age + SibSp , data = clean_train, family = "binomial")
summary(LRmodel2)
## 
## Call:
## glm(formula = Survived ~ Pclass + Sex + Age + SibSp, family = "binomial", 
##     data = clean_train)
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  4.325373   0.450707   9.597  < 2e-16 ***
## Pclass2     -1.406282   0.284836  -4.937 7.93e-07 ***
## Pclass3     -2.644961   0.285906  -9.251  < 2e-16 ***
## Sexmale     -2.618972   0.215008 -12.181  < 2e-16 ***
## Age         -0.044938   0.008237  -5.456 4.88e-08 ***
## SibSp       -0.378564   0.121377  -3.119  0.00182 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 960.90  on 711  degrees of freedom
## Residual deviance: 636.04  on 706  degrees of freedom
## AIC: 648.04
## 
## Number of Fisher Scoring iterations: 5

Σχόλιο
Όπως φαίνεται και από τον δείκτη AIC, το δεύτερο μοντέλο λογιστικής παλινδρόμησης προβλέπει καλύτερα την πιθανότητα της επιβίωσης.

  • LRmodel: AIC = 776.18

  • LRmodel2: AIC = 648.04

Εισαγωγή και προετοιμασία του test set

test <- read.csv("test.csv")
clean_test <- na.omit(test)
clean_test$Survived <- as.factor(clean_test$Survived)
clean_test$Pclass <- as.factor(clean_test$Pclass)
clean_test$Sex <- as.factor(clean_test$Sex)

Προβλέψεις τιμών στο test set

predictTest <- predict(LRmodel2, newdata = clean_test, type = "response")

Confusion Matrix

threshold <- 0.5
pred_class <- ifelse(predictTest >= threshold, "Survived", "Died")
pred_class <- factor(pred_class, levels = c("Died", "Survived"))
actual_class <- factor(clean_test$Survived, levels = c(0, 1), labels = c("Died", "Survived"))

conf_mat <- table(Predicted = pred_class, Actual = actual_class)
print(conf_mat)
##           Actual
## Predicted  Died Survived
##   Died      188       10
##   Survived   16      117
cat("Accuracy =", sum(diag(conf_mat)) / sum(conf_mat), "\n", 
    "Sensitivity =", conf_mat["Survived", "Survived"] / sum(conf_mat[, "Survived"]), "\n",
    "Specificity =", conf_mat["Died", "Died"] / sum(conf_mat[, "Died"]))
## Accuracy = 0.9214502 
##  Sensitivity = 0.9212598 
##  Specificity = 0.9215686

Σχόλιο
Σαφώς πιο βελτιωμένη η τιμή του Accuracy στο μοντέλο της λογιστικής παλινδρόμησης από την αντίστοιχη του baseline (0.404).

Καμπύλη ROC και AUC

ROCRpredLR <- prediction(predictTest, clean_test$Survived)
ROCperf <- performance(ROCRpredLR, "tpr", "fpr")
plot(ROCperf, colorize = TRUE, main = "ROC Curve", xlab = "Specificity", ylab = "Sensitivity")

cat("AUC =", as.numeric(performance(ROCRpredLR, "auc")@y.values))
## AUC = 0.9759148

Σχόλιο
Η καμπύλη ROC δείχνει ότι το μοντέλο λογιστικής παλινδρόμησης έχει πολύ καλή ικανότητα πρόβλεψης των επιβατών που κατάφεραν να επιβιώσουν. Η τιμή του AUC = 0.9759148 μας δίνει την απόλυτη τιμή της ποιότητας πρόβλεψης, δηλαδή ότι το μοντέλο προβλέπει με ακρίβεια 97.6%.

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

Cross Validation

numFolds <- trainControl(method = "cv", number=7)
cpGrid <- expand.grid(.cp = seq(0.01,0.47,0.01))
train(Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Cabin + Embarked, data=clean_train, method="rpart", trControl=numFolds, tuneGrid=cpGrid)
## CART 
## 
## 712 samples
##   8 predictor
##   2 classes: '0', '1' 
## 
## No pre-processing
## Resampling: Cross-Validated (7 fold) 
## Summary of sample sizes: 610, 611, 610, 610, 609, 611, ... 
## Resampling results across tuning parameters:
## 
##   cp    Accuracy   Kappa     
##   0.01  0.8060944  0.57757756
##   0.02  0.7963318  0.56460612
##   0.03  0.7794557  0.52728267
##   0.04  0.7738529  0.51819048
##   0.05  0.7795107  0.53450047
##   0.06  0.7795107  0.53450047
##   0.07  0.7795107  0.53450047
##   0.08  0.7795107  0.53450047
##   0.09  0.7795107  0.53450047
##   0.10  0.7795107  0.53450047
##   0.11  0.7795107  0.53450047
##   0.12  0.7795107  0.53450047
##   0.13  0.7795107  0.53450047
##   0.14  0.7795107  0.53450047
##   0.15  0.7795107  0.53450047
##   0.16  0.7795107  0.53450047
##   0.17  0.7795107  0.53450047
##   0.18  0.7795107  0.53450047
##   0.19  0.7795107  0.53450047
##   0.20  0.7795107  0.53450047
##   0.21  0.7795107  0.53450047
##   0.22  0.7795107  0.53450047
##   0.23  0.7795107  0.53450047
##   0.24  0.7795107  0.53450047
##   0.25  0.7795107  0.53450047
##   0.26  0.7795107  0.53450047
##   0.27  0.7795107  0.53450047
##   0.28  0.7795107  0.53450047
##   0.29  0.7795107  0.53450047
##   0.30  0.7795107  0.53450047
##   0.31  0.7795107  0.53450047
##   0.32  0.7795107  0.53450047
##   0.33  0.7795107  0.53450047
##   0.34  0.7795107  0.53450047
##   0.35  0.7795107  0.53450047
##   0.36  0.7795107  0.53450047
##   0.37  0.7795107  0.53450047
##   0.38  0.7795107  0.53450047
##   0.39  0.7795107  0.53450047
##   0.40  0.7795107  0.53450047
##   0.41  0.7795107  0.53450047
##   0.42  0.7795107  0.53450047
##   0.43  0.7795107  0.53450047
##   0.44  0.7153976  0.35681421
##   0.45  0.6291176  0.11449984
##   0.46  0.6291176  0.11449984
##   0.47  0.6067086  0.04476307
## 
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was cp = 0.01.

Σχόλιο
Η ιδανική τιμή για το cp που προκύπτει είναι 0.01.

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

Κρατάμε τις ίδιες 8 ανεξάρτητες μεταβλητές που δώσαμε και στο μοντέλο της λογιστικής παλινδρόμησης.

SurvivedTree <- rpart(Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked, data = clean_train, method="class", cp=0.01)
prp(SurvivedTree)

Παρατηρήσεις
Το δέντρο βασίζεται κυρίως στις μεταβλητές Sex, Age, SibSp, Pclass, Fare και Parch για να καταλήξει σε απόφαση. Αποφεύγει την προσθήκη της μεταβλητής Cabin, καθώς σε αρκετές εγγραφές έχει missing values, αλλά και της Embarked, η οποία έχει λίγες κατηγορίες (π.χ. S, C, Q) και μικρή επίδραση στο Survived. Κάθε διαδρομή από τη ρίζα έως ένα φύλλο (0 ή 1) αποτελεί μια πιθανή διαδρομή απόφασης.

Προβλέψεις τιμών στο test set

predictTestCart <- predict(SurvivedTree, newdata = clean_test, type = "prob")[, 2]

Confusion Matrix

predictTestCart_class <- predict(SurvivedTree, newdata = clean_test, type = "class")
conf_mat <- table(
  Predicted = factor(predictTestCart_class, levels = c(0, 1), labels = c("Died", "Survived")),
  Actual = factor(clean_test$Survived, levels = c(0, 1), labels = c("Died", "Survived"))
)

print(conf_mat)
##           Actual
## Predicted  Died Survived
##   Died      198       20
##   Survived    6      107
cat("Accuracy =", sum(diag(conf_mat)) / sum(conf_mat), "\n", 
    "Sensitivity =", conf_mat["Survived", "Survived"] / sum(conf_mat[, "Survived"]), "\n",
    "Specificity =", conf_mat["Died", "Died"] / sum(conf_mat[, "Died"]))
## Accuracy = 0.9214502 
##  Sensitivity = 0.8425197 
##  Specificity = 0.9705882

Σχόλιο
Η τιμή του Accuracy στο μοντέλο Cart είναι ίδια με την αντίστοιχη της λογιστικής παλινδρόμησης (0.9214502). Ωστόσο το μοντέλο Cart προβλέπει 10 παραπάνω True Negatives και 10 λιγότερα True Positives, από το μοντέλο της λογιστικής παλινδρόμησης.

Καμπύλη ROC και AUC

ROCRpredCart <- prediction(predictTestCart, clean_test$Survived)
ROCperfCart <- performance(ROCRpredCart, "tpr", "fpr")
plot(ROCperfCart, colorize = TRUE, main = "ROC Curve", xlab = "Specificity", ylab = "Sensitivity")

cat("AUC =", as.numeric(performance(ROCRpredCart, "auc")@y.values))
## AUC = 0.9025012

Σχόλια
Η καμπύλη ROC δείχνει ότι το μοντέλο Cart έχει αρκετά καλή ικανότητα πρόβλεψης των επιβατών που κατάφεραν να επιβιώσουν. Η τιμή του AUC = 0.9025012 μας δίνει την απόλυτη τιμή της ποιότητας πρόβλεψης, δηλαδή ότι το μοντέλο προβλέπει με ακρίβεια 90.2%.

Συμπεράσματα

Αναλυτικός πίνακας μετρικών:
Μετρική Logistic Regression CART
Accuracy 0.9214502 0.9214502
AUC (ROC) 0.9759148 0.9025012
Sensitivity 0.9212598 0.8425197
Specificity 0.9215686 0.9705882
Confusion Matrix Απόλυτα συμμετρικός Σχετικά συμμετρικός

Σχολιασμός Αποτελεσμάτων

  • Και τα δύο μοντέλα έχουν την ίδια ακρίβεια στις προβλέψεις του test set (ίδιο Accuracy / 0.921), γεγονός που δείχνει ότι είναι εξίσου ικανά στο να προβλέπουν σωστά την πιθανότητα επιβίωσης. Ωστόσο, η τιμή αυτή από μόνη της δεν επαρκεί για την πλήρη αξιολόγηση της απόδοσης, ειδικά σε περιπτώσεις ανισορροπίας μεταξύ των κλάσεων.

  • Το μοντέλο της λογιστικής παλινδρόμησης παρουσιάζει υψηλότερη τιμή AUC, κάτι που δείχνει ότι είναι πιο ικανό να διαχωρίζει τις δύο κλάσεις με βάση τις προβλεπόμενες πιθανότητες. Το μοντέλο Cart από την άλλη, λόγω του διακριτού χαρακτήρα των προβλέψεών του, έχει χαμηλότερη ευελιξία στο διαχωρισμό, με συνέπεια χαμηλότερη AUC.

  • Το μοντέλο της λογιστικής παλινδρόμησης έχει πιο ισορροπημένες τιμές: Sensitivity = 0.921 και Specificity = 0.922, σε αντίθεση με το μοντέλο CART που παρουσιάζει ελαφρώς πιο συντηρητική συμπεριφορά: Specificity = 0.971 και Sensitivity = 0.843. Αυτό σημαίνει πως το μοντέλο CART είναι πιο αυστηρό στο να προβλέπει την πιθανότητα επιβίωσης, με αποτέλεσμα να μειώνει τα False Positives, αλλά και να αυξάνει τα False Negatives.

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