Titanic - Logistic Regression

2026-04-19

Michail Ioannidis

# Φόρτωση βιβλιοθηκών
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 εγγραφές, με στήλες που αφορούν δημογραφικά στοιχεία των επιβατών καθώς και πληροφορίες για το ταξίδι τους. Παρακάτω, υπάρχει μια μικρή περιγραφή για την κάθε στήλη ξεχωριστά, καθώς και σε παρένθεση ο τύπος μεταβλητής κάθε μίας:

  1. PassengerId: Αύξων αριθμός παρατήρησης, μοναδικός για κάθε επιβάτη (int)
  2. Survived: Η μεταβλητή στόχος. Εκφράζει αν ο επιβάτης επέζησε (1) ή όχι (0) (int/factor)
  3. Pclass: Η κοινωνικο-οικονομική τάξη του επιβάτη. 1 = 1η θέση, 2 = 2η θέση, 3 = 3η θέση (int/factor)
  4. Name: Το ονοματεπώνυμο του επιβάτη (chr)
  5. Sex: Το φύλο του επιβάτη, male ή female (chr/factor)
  6. Age: Η ηλικία του επιβάτη σε έτη (num)
  7. SibSp: Πλήθος αδερφών ή συζύγων που επέβαιναν μαζί στον Τιτανικό (int)
  8. Parch: Πλήθος γονέων ή παιδιών που επέβαιναν μαζί στον Τιτανικό (int)
  9. Ticket: Ο αριθμός του εισιτηρίου (chr)
  10. Fare: Το αντίτιμο του εισιτηρίου (ναύλος) (num)
  11. Cabin: Ο αριθμός της καμπίνας (chr)
  12. 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

Ο παραπάνω πίνακας, δείχνει τα εξής:

  1. True Negatives (TN) = 126: Προβλέψαμε ότι δεν θα επιβιώσουν και όντως δεν επέζησαν.
  2. True Positives (TP) = 80: Προβλέψαμε ότι θα επιβιώσουν και όντως επέζησαν.
  3. False Positives (FP) = 22: Προβλέψαμε ότι θα επιβιώσουν, αλλά δυστυχώς χάθηκαν.
  4. False Negatives (FN) = 22: Προβλέψαμε ότι θα χαθούν, αλλά τελικά επέζησαν.

Σύνολο παρατηρήσεων στο test set: 126 + 22 + 22 + 80 = 250.

Υπολογισμοί με βάση τον πίνακα:

  1. Accuracy = (TN + TP) / Total
  1. Sensitivity = TP / (TP + FN) -> Πόσους από αυτούς που επέζησαν βρήκαμε;
  1. Specificity = TN / (TN + FP) -> Πόσους από αυτούς που χάθηκαν βρήκαμε;
# 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 στερεί από το μοντέλο πολύτιμη πληροφορία.