Titanic - Logistic Regression
2026-04-19
- Σχολιασμός - Περιγραφή Dataset
- Επεξεργσία πριν τη δημιουργία του Μοντέλου
- Δημιουργία Μοντέλου Λογιστικής Παλινδρόμησης
- Προβλέψεις
- Confusion matrix
- Δημιουργία μοντέλου ROCRpred
- Καμπύλη ROC και Υπολογισμός AUC
- Τελικά Συμπεράσματα
# Φόρτωση βιβλιοθηκών
library(readr)## Warning: package 'readr' was built under R version 4.5.3
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
# Εισαγωγή dataset
data <- read_csv("titanic.csv")Σχολιασμός - Περιγραφή Dataset
Το συγκεκριμένο σύνολο δεδομένων αφορά την επιβίωση των επιβατών του θρυλικού ναυαγίου του Τιτανικού το 1912. Το dataset περιέχει 891 εγγραφές, με στήλες που αφορούν δημογραφικά στοιχεία των επιβατών καθώς και πληροφορίες για το ταξίδι τους. Παρακάτω, υπάρχει μια μικρή περιγραφή για την κάθε στήλη ξεχωριστά, καθώς και σε παρένθεση ο τύπος μεταβλητής κάθε μίας:
- PassengerId: Αύξων αριθμός παρατήρησης, μοναδικός για κάθε επιβάτη (int)
- Survived: Η μεταβλητή στόχος. Εκφράζει αν ο επιβάτης επέζησε (1) ή όχι (0) (int/factor)
- Pclass: Η κοινωνικο-οικονομική τάξη του επιβάτη. 1 = 1η θέση, 2 = 2η θέση, 3 = 3η θέση (int/factor)
- Name: Το ονοματεπώνυμο του επιβάτη (chr)
- Sex: Το φύλο του επιβάτη, male ή female (chr/factor)
- Age: Η ηλικία του επιβάτη σε έτη (num)
- SibSp: Πλήθος αδερφών ή συζύγων που επέβαιναν μαζί στον Τιτανικό (int)
- Parch: Πλήθος γονέων ή παιδιών που επέβαιναν μαζί στον Τιτανικό (int)
- Ticket: Ο αριθμός του εισιτηρίου (chr)
- Fare: Το αντίτιμο του εισιτηρίου (ναύλος) (num)
- Cabin: Ο αριθμός της καμπίνας (chr)
- Embarked: Το λιμάνι επιβίβασης. C = Cherbourg, Q = Queenstown, S = Southampton (chr/factor)
Περιγραφή των μεταβλητών (τύπος, εύρος τιμών, μονάδες μέτρησης)
# Εμφάνιση της δομής και των τύπων των μεταβλητών
str(data)## spc_tbl_ [891 × 12] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
## $ PassengerId: num [1:891] 1 2 3 4 5 6 7 8 9 10 ...
## $ Survived : num [1:891] 0 1 1 1 0 0 0 0 1 1 ...
## $ Pclass : num [1:891] 3 1 3 1 3 3 1 3 3 2 ...
## $ Name : chr [1:891] "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
## $ Sex : chr [1:891] "male" "female" "female" "female" ...
## $ Age : num [1:891] 22 38 26 35 35 NA 54 2 27 14 ...
## $ SibSp : num [1:891] 1 1 0 1 0 0 0 3 0 1 ...
## $ Parch : num [1:891] 0 0 0 0 0 0 0 1 2 0 ...
## $ Ticket : chr [1:891] "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
## $ Fare : num [1:891] 7.25 71.28 7.92 53.1 8.05 ...
## $ Cabin : chr [1:891] NA "C85" NA "C123" ...
## $ Embarked : chr [1:891] "S" "C" "S" "S" ...
## - attr(*, "spec")=
## .. cols(
## .. PassengerId = col_double(),
## .. Survived = col_double(),
## .. Pclass = col_double(),
## .. Name = col_character(),
## .. Sex = col_character(),
## .. Age = col_double(),
## .. SibSp = col_double(),
## .. Parch = col_double(),
## .. Ticket = col_character(),
## .. Fare = col_double(),
## .. Cabin = col_character(),
## .. Embarked = col_character()
## .. )
## - attr(*, "problems")=<externalptr>
# Εμφάνιση στατιστικών στοιχείων και εύρους τιμών
summary(data)## PassengerId Survived Pclass Name
## Min. : 1.0 Min. :0.0000 Min. :1.000 Length:891
## 1st Qu.:223.5 1st Qu.:0.0000 1st Qu.:2.000 Class :character
## Median :446.0 Median :0.0000 Median :3.000 Mode :character
## Mean :446.0 Mean :0.3838 Mean :2.309
## 3rd Qu.:668.5 3rd Qu.:1.0000 3rd Qu.:3.000
## Max. :891.0 Max. :1.0000 Max. :3.000
##
## Sex Age SibSp Parch
## Length:891 Min. : 0.42 Min. :0.000 Min. :0.0000
## Class :character 1st Qu.:20.12 1st Qu.:0.000 1st Qu.:0.0000
## Mode :character Median :28.00 Median :0.000 Median :0.0000
## Mean :29.70 Mean :0.523 Mean :0.3816
## 3rd Qu.:38.00 3rd Qu.:1.000 3rd Qu.:0.0000
## Max. :80.00 Max. :8.000 Max. :6.0000
## NA's :177
## Ticket Fare Cabin Embarked
## Length:891 Min. : 0.00 Length:891 Length:891
## Class :character 1st Qu.: 7.91 Class :character Class :character
## Mode :character Median : 14.45 Mode :character Mode :character
## Mean : 32.20
## 3rd Qu.: 31.00
## Max. :512.33
##
Επεξεργσία πριν τη δημιουργία του Μοντέλου
Για αρχή, πριν το διαχωρισμό του dataset και τη δημιουργία του μοντέλου, θα μετατρέψουμε τις απαραίτητες μεταβλητές σε κατηγορικές (factors), για τη σωστή λειτουργία του μοντέλου.
# Μετατροπή σε factor για την παλινδρόμηση
data$Survived <- as.factor(data$Survived)
data$Pclass <- as.factor(data$Pclass)
data$Sex <- as.factor(data$Sex)
data$Embarked <- as.factor(data$Embarked)Αφού έγινε η μετατροπή των μεταβλητών όπου ήταν αναγκαίο, θα διαχωρίσουμε το dataset σε training και testing sets. Το training set είναι το 65% της βάσης.
# Διαχωρισμός σε 65% Training και 35% Test
set.seed(999)
split <- sample.split(data$Survived, SplitRatio = 0.65)
train <- subset(data, split == TRUE)
test <- subset(data, split == FALSE)Οι καταχωρήσεις σε κάθε set είναι:
cat("Εγγραφές στο train set:", nrow(train), "\n")## Εγγραφές στο train set: 579
cat("Εγγραφές στο test set:", nrow(test), "\n")## Εγγραφές στο test set: 312
Δημιουργία Μοντέλου Λογιστικής Παλινδρόμησης
Για τη δημιουργία του μοντέλου, θα χρησιμοποιήσουμε όλες τις ανεξάρτητες μεταβλητές που έχουν λογικό νόημα (εξαιρούμε Name, Ticket, Cabin, PassengerId).
model <- glm(Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked,
data = train, family = "binomial")
summary(model)##
## Call:
## glm(formula = Survived ~ Pclass + Sex + Age + SibSp + Parch +
## Fare + Embarked, family = "binomial", data = train)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.593445 0.674369 6.811 9.66e-12 ***
## Pclass2 -1.436146 0.433058 -3.316 0.000912 ***
## Pclass3 -2.510168 0.451028 -5.565 2.61e-08 ***
## Sexmale -2.384522 0.265857 -8.969 < 2e-16 ***
## Age -0.052514 0.010436 -5.032 4.85e-07 ***
## SibSp -0.369952 0.158425 -2.335 0.019534 *
## Parch -0.105585 0.150286 -0.703 0.482332
## Fare 0.002276 0.003825 0.595 0.551868
## EmbarkedQ -0.648465 0.712219 -0.910 0.362567
## EmbarkedS -0.284087 0.334277 -0.850 0.395406
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 622.82 on 461 degrees of freedom
## Residual deviance: 424.02 on 452 degrees of freedom
## (117 observations deleted due to missingness)
## AIC: 444.02
##
## Number of Fisher Scoring iterations: 5
Πρωτού περιγραφούν τα ευρήματα, είναι σημαντικό να αναφέρουμε ότι 117 επιβάτες εξαιρέθηκαν από το μοντέλο επειδή δε γνωρίζαμε την ηλικία τους, όπως φαίνεται στην αντίστοιχη γραμμή.
Κοιτώντας το Pr(>|z|) (p-value < 0.001) και τους αστερίσκους που δείχνουν το μέγεθος επιρροής, συμπαιράνουμε τα εξής:
Οι μεταβλητές με την ισχυρότερη συσχέτιση (Στατιστική Σημαντικότητα) είναι:
Sexmale (p-value < 2e-16): Η πιο ισχυρή μεταβλητή.Φαίνεται να έχει εξαιρετικά υψηλή στατιστική σημαντικότητα.
Pclass2 & Pclass3 (p-value < 0.001): Επίσης πολύ ισχυρή συσχέτιση. Η θέση του επιβάτη έπαιξε καθοριστικό ρόλο.
Age (p-value 4.85e-07): Πολύ ισχυρή συσχέτιση. Η ηλικία επηρέασε σημαντικά την επιβίωση.
SibSp (p-value 0.0195): Μέτρια συσχέτιση (ένα αστεράκι *). Ο αριθμός αδερφών/συζύγων είχε κάποια επίδραση, αλλά όχι τόσο καθοριστική όσο τα προηγούμενα.
Μεταβλητές χωρίς σημαντικότητα: Οι Parch, Fare και Embarked (λιμάνια Q και S) στο συγκεκριμένο μοντέλο, δεν φαίνεται να επηρεάζουν στατιστικά την επιβίωση όταν λαμβάνονται υπόψη οι υπόλοιποι παράγοντες.
Προβλέψεις
Με βάση το test set, θα κάνουμε κάποιες προβλέψεις, χρησιμοποιώντας την εντολή predict.
predictTest <- predict(model, newdata = test, type = "response")
predictTest## 1 2 3 4 5 6 7
## 0.61108470 0.31155353 0.13495519 0.75980389 0.50534501 NA 0.63070618
## 8 9 10 11 12 13 14
## 0.26448868 0.55096888 0.54276240 NA 0.63543278 0.53867410 0.61182424
## 15 16 17 18 19 20 21
## NA NA NA 0.07958491 NA 0.11375789 NA
## 22 23 24 25 26 27 28
## NA 0.17299867 0.39011634 0.11881979 0.57442605 0.13855588 0.11008197
## 29 30 31 32 33 34 35
## 0.32705896 0.19144135 0.73879548 0.73778949 0.58583664 NA 0.70937642
## 36 37 38 39 40 41 42
## 0.09124037 0.03731965 0.67124375 0.39533076 0.72805432 0.80318484 0.23384464
## 43 44 45 46 47 48 49
## 0.73876085 0.43357679 0.55106739 0.28885151 0.15613221 0.05263517 0.39289361
## 50 51 52 53 54 55 56
## NA NA 0.69179292 0.12642007 NA 0.23107514 0.34029556
## 57 58 59 60 61 62 63
## 0.12044341 0.25785821 NA NA NA 0.40664538 0.02958338
## 64 65 66 67 68 69 70
## 0.07886641 0.77247939 0.38237452 0.61048590 0.47870865 0.91261069 0.86773873
## 71 72 73 74 75 76 77
## 0.18060479 0.54461385 0.15133995 0.95633812 0.19667159 0.28913478 0.03749970
## 78 79 80 81 82 83 84
## NA 0.39485053 0.90816259 0.07050979 0.47928066 0.32131420 NA
## 85 86 87 88 89 90 91
## 0.38103177 0.22858454 0.15130342 0.62340972 0.98057212 NA 0.94158861
## 92 93 94 95 96 97 98
## 0.65902469 0.55673678 0.36672763 NA 0.38503397 0.01279970 0.17296341
## 99 100 101 102 103 104 105
## NA 0.25191800 0.17962936 0.98144170 NA NA 0.10108844
## 106 107 108 109 110 111 112
## 0.61104640 0.72342897 0.95309683 0.02243458 0.97767767 0.40139171 0.10673931
## 113 114 115 116 117 118 119
## NA 0.05068453 0.41156915 0.49182487 0.91105139 0.27846201 0.20226277
## 120 121 122 123 124 125 126
## NA NA 0.95983032 NA NA 0.08262068 NA
## 127 128 129 130 131 132 133
## 0.61637026 0.17287390 0.09554552 NA 0.73347206 NA 0.43200450
## 134 135 136 137 138 139 140
## 0.05854781 0.96350744 0.59042004 0.12648920 0.03747506 0.88563428 NA
## 141 142 143 144 145 146 147
## 0.05325735 0.85149623 0.75358896 0.74876784 NA 0.62594957 0.58828065
## 148 149 150 151 152 153 154
## 0.96324884 0.64540464 0.52355906 0.16603643 0.09531253 0.80727788 0.84421166
## 155 156 157 158 159 160 161
## 0.89372134 0.54978401 0.12788777 0.37018818 0.19339160 0.56744433 0.36926034
## 162 163 164 165 166 167 168
## 0.08686951 0.38801067 0.07143837 NA 0.07168219 0.65074090 NA
## 169 170 171 172 173 174 175
## 0.15141912 0.04687998 NA 0.90939361 NA 0.29028577 0.15845139
## 176 177 178 179 180 181 182
## 0.94049212 0.13848684 0.18872014 0.58653652 0.13918078 0.82097161 0.13840541
## 183 184 185 186 187 188 189
## 0.38559286 NA 0.66193817 0.95010912 0.04483607 NA 0.91326652
## 190 191 192 193 194 195 196
## NA 0.96576360 0.42721208 0.18204930 0.36714033 0.06025038 0.79533211
## 197 198 199 200 201 202 203
## 0.21915788 0.87729499 NA 0.17291322 0.71164607 NA 0.17507327
## 204 205 206 207 208 209 210
## 0.91070128 NA 0.12506579 0.22492674 0.08263362 0.04075787 NA
## 211 212 213 214 215 216 217
## 0.69611055 NA 0.05327170 0.92811350 NA 0.05659595 0.11343065
## 218 219 220 221 222 223 224
## 0.37026449 NA 0.64517607 0.51725231 0.17436145 0.16551845 0.97042580
## 225 226 227 228 229 230 231
## 0.37588320 0.17291322 0.34275431 NA 0.15856774 NA 0.08429719
## 232 233 234 235 236 237 238
## 0.07880030 0.31118978 NA 0.05598314 NA 0.04056804 NA
## 239 240 241 242 243 244 245
## 0.79879932 0.16594979 0.03644878 0.05648725 0.98010187 0.51416724 0.85792627
## 246 247 248 249 250 251 252
## NA 0.16831165 0.74371044 0.09578776 0.63200469 0.97065806 0.96910508
## 253 254 255 256 257 258 259
## 0.81445816 0.09107460 0.92605742 0.21973959 0.55866375 0.33413635 0.11452539
## 260 261 262 263 264 265 266
## NA NA 0.46103979 0.10165507 0.10018095 0.66328565 0.07175811
## 267 268 269 270 271 272 273
## 0.09140010 0.14490008 0.94121403 NA 0.06167768 0.19657273 0.09563160
## 274 275 276 277 278 279 280
## 0.47597775 0.18050378 0.80487606 0.05270354 NA NA NA
## 281 282 283 284 285 286 287
## 0.13236580 0.17802995 0.54761332 0.69624822 0.10015018 0.46924091 0.70508700
## 288 289 290 291 292 293 294
## NA 0.05579102 0.78849945 0.12094802 NA 0.14488835 0.90543529
## 295 296 297 298 299 300 301
## 0.18872014 NA 0.08202174 0.56262815 0.63414181 0.03088287 0.80234572
## 302 303 304 305 306 307 308
## 0.60152763 0.12645044 0.55064280 0.04595775 0.79763644 NA 0.85022335
## 309 310 311 312
## 0.09109736 0.27732031 0.96706960 0.06833794
Παραπάνω, φαίνονται οι πιθανότητες επιβίωσης για κάθε επιβάτη.
Confusion matrix
# Confusion Matrix
table(test$Survived, predictTest > 0.5)##
## FALSE TRUE
## 0 126 22
## 1 22 80
Ο παραπάνω πίνακας, δείχνει τα εξής:
- True Negatives (TN) = 126: Προβλέψαμε ότι δεν θα επιβιώσουν και όντως δεν επέζησαν.
- True Positives (TP) = 80: Προβλέψαμε ότι θα επιβιώσουν και όντως επέζησαν.
- False Positives (FP) = 22: Προβλέψαμε ότι θα επιβιώσουν, αλλά δυστυχώς χάθηκαν.
- False Negatives (FN) = 22: Προβλέψαμε ότι θα χαθούν, αλλά τελικά επέζησαν.
Σύνολο παρατηρήσεων στο test set: 126 + 22 + 22 + 80 = 250.
Υπολογισμοί με βάση τον πίνακα:
- Accuracy = (TN + TP) / Total
- (126+80)/250 * 100 = 82.4%
- Sensitivity = TP / (TP + FN) -> Πόσους από αυτούς που επέζησαν βρήκαμε;
- 80/(80+22) * 100 = 78.4%
- Specificity = TN / (TN + FP) -> Πόσους από αυτούς που χάθηκαν βρήκαμε;
- 126/(126+22) * 100 = 85.1%
# Baseline Accuracy: Πρόβλεψη πάντα του πιο συχνού αποτελέσματος (δεν επέζησαν)
baseline_acc <- table(test$Survived)[1] / nrow(test)
cat("Baseline Accuracy:", baseline_acc)## Baseline Accuracy: 0.6153846
Όσον αφορά το basiline model, αν το μοντέλο μας έλεγε για όλους <<0>> (δεν επέζησε) θα είχε ακρίβεια 61.5%. Δηλαδή, αν προβλέπαμε για όλους το πιο συχνό αποτέλεσμα. Και πράγματι, στον Τιτανικό οπι περισσότεροι επιβάτες δυστυχώς δεν επέζησαν.
Παρατηρήσεις
Το μοντέλο μας (82.4%) είναι πολύ καλύτερο από το Baseline (61.5%). Αυτό σημαίνει ότι οι μεταβλητές που επιλέξαμε (φύλο, τάξη, ηλικία) προσφέρουν πραγματική πληροφορία, η οποία δίνει αυτή τη σημαντική βελτίωση στο μοντέλο.
Επιπλέον, το μοντέλο φαίνεται πολύ ισορροπημένο, καθώς έχουμε τον ίδιο αριθμό σφαλμάτων (22) και στις δύο πλευρές (FP και FN). Αυτό δείχνει ότι το κατώφλι του 0.5 που επιλέξαμε λειτουργεί αρκετά δίκαια και για τις δύο κλάσεις.
Τέλος, μπορούμε να πούμε ότι το μοντέλο είναι ελαφρώς καλύτερο στο να εντοπίζει αυτούς που επέζησαν (Specificity: 85.1%) παρά αυτούς που επέζησαν (Sensitivity: 78.4%).
Δημιουργία μοντέλου ROCRpred
train2 <- na.omit(train)
test2 <- na.omit(test)
cat("Εγγραφές στο Train2 set:", nrow(train2), "\n")## Εγγραφές στο Train2 set: 108
cat("Εγγραφές στο Test2 set:", nrow(test2), "\n")## Εγγραφές στο Test2 set: 75
Τελικώς, από το αρχικό δείγμα, μόνο οι 183 επιβάτες είχαν πλήρη στοιχεία (δηλαδή γνωρίζαμε την ηλικία τους, την καμπίνα, το λιμάνι κτλ).
# Επανεκπαίδευση για την ROCR
model2 <- glm(Survived ~ Pclass + Sex + Age + SibSp + Parch + Fare + Embarked,
data = train2, family = "binomial")
predictTest2 <- predict(model2, newdata = test2, type = "response")
summary(model2)##
## Call:
## glm(formula = Survived ~ Pclass + Sex + Age + SibSp + Parch +
## Fare + Embarked, family = "binomial", data = train2)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.963e+00 1.301e+00 3.046 0.00232 **
## Pclass2 9.875e-01 1.515e+00 0.652 0.51457
## Pclass3 -2.269e+00 1.176e+00 -1.929 0.05370 .
## Sexmale -3.296e+00 7.540e-01 -4.370 1.24e-05 ***
## Age -4.398e-02 2.137e-02 -2.058 0.03958 *
## SibSp 2.990e-01 5.757e-01 0.519 0.60357
## Parch -9.662e-01 5.018e-01 -1.926 0.05415 .
## Fare 6.429e-03 6.020e-03 1.068 0.28556
## EmbarkedQ -1.548e+01 1.455e+03 -0.011 0.99152
## EmbarkedS 1.079e+00 6.953e-01 1.552 0.12064
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 132.948 on 107 degrees of freedom
## Residual deviance: 79.137 on 98 degrees of freedom
## AIC: 99.137
##
## Number of Fisher Scoring iterations: 14
Λόγω της σμίκρυνσης του δείγματος, το μοντέλο δυσκολεύεται να βρει στατιστικά σημαντικές σχέσεις, καθώς πλέον χρειάζονται πολύ ισχυρότερες ενδείξεις για να θεωρήσουμε κάτι σημαντικό. Πλέον, το φύλλο δαιτηρεί τη σημασία του, η σημασία της ηλικίας μειώθηκε, η Pclass2 δεν θεωρείται σημαντική και η Pclass3 οριακά σημαντική.
Δημιουργία ROCpred
Με τον τρόπο αυτό, συνδυάζουμε τις πιθανότητες που υπολόγισε η predict (predictTest2) με τα πραγματικά δεδομένα (test2$Survived). Έτσι, θα σχηματιστεί η καμπύλη ROC.
# Δημιουργία του αντικειμένου πρόβλεψης
ROCRpred <- prediction(predictTest2, test2$Survived)
ROCRpred## A prediction instance
## with 75 data points
Καμπύλη ROC και Υπολογισμός AUC
# Υπολογισμός των μετρικών για την καμπύλη (True Positive Rate & False Positive Rate)
ROCRperf <- performance(ROCRpred, "tpr", "fpr")
# Σχεδίαση της καμπύλης ROC
# Το colorize = TRUE προσθέτει χρωματική κλίμακα για τις τιμές του κατωφλιού (threshold)
plot(ROCRperf, colorize = TRUE,
print.cutoffs.at = seq(0, 1, 0.1),
text.adj = c(-0.2, 1.7),
main = "ROC Curve - Titanic Survival Prediction")
# Προσθήκη διαγώνιας γραμμής (τυχαία πρόβλεψη - baseline)
abline(a = 0, b = 1, lty = 2, col = "gray")Στο σχήμα βλέπουμε ότι η καμπύλη γίνεται πιο έντονη στο πάνω αριστερά κομμάτι. Αυτό δείχνει ότι το μοντέλο πετυχαίνει υψηλό True Positive Rate (βρίσκει τους επιζώντες) διατηρώντας χαμηλό το False Positive Rate (δεν κάνει πολλά λάθη χαρακτηρίζοντας κάποιον ως επιζώντα ενώ δεν είναι).
# Υπολογισμός της τιμής AUC (Area Under the Curve)
auc_val <- as.numeric(performance(ROCRpred, "auc")@y.values)
cat("Η τιμή AUC για το μοντέλο είναι:", round(auc_val, 4))## Η τιμή AUC για το μοντέλο είναι: 0.7099
Μια πιθανή εξήγηση για την τιμή που παρατηρούμε στο AUC, είναι ο περιορισμένος αριθμός δείγματος (λόγω της εντολής na.omit). Έτσι, το μοντέλο δυσκολεύεται να συσχετίσει τις σχέσεις μεταξύ τους (πχ φύλο και κοινωνική τάξη) και η προγνωστική ικανότητα μειώνεται. Τελικώς, το μοντέλο θα κατέτασσε σωστά έναν επιβάτη (επιζών ή θανόντα), στο 71% των περιπτώσεων, ξεπερνώντας το baseline (0.615 ή 61.5%).
Τελικά Συμπεράσματα
Όσον αφορά την απόδοση του μοντέλου, πέτυχε ικανοποιητική ακρίβεια, ξεπερνώντας το Baseline μοντέλο. Η τελική τιμή AUC 0.7099 υποδηλώνει μια καλή διακριτική ικανότητα, αν και επηρεάστηκε από τον περιορισμένο αριθμό δεδομένων.
Παρά τη μείωση του δείγματος λόγω των ελλειπουσών τιμών (NAs), το Φύλο και η Ηλικία παρέμειναν στατιστικά σημαντικοί παράγοντες. Το μοντέλο επιβεβαίωσε ότι οι γυναίκες και οι νεότεροι επιβάτες είχαν σαφές προβάδισμα επιβίωσης.
Η χρήση της na.omit ήταν απαραίτητη για την παραγωγή της καμπύλης ROC, ωστόσο η μείωση του training set σε μόλις 108 παρατηρήσεις εξηγεί τη μείωση της τιμής AUC σε σχέση με ευρύτερα μοντέλα. Η διαγραφή των εγγραφών με NAs στερεί από το μοντέλο πολύτιμη πληροφορία.