Modelo de clasificación de los supervivientes del Titanic

Simón Cuartas Rendón

Introducción

Quarto se erige como una herramienta de edición fundamental en el contexto de la ciencia de datos en la medida que permite la integración de diversas herramientas de análisis para la generación de informes con apariencia profesional, elegante y bella.

Así, en este documento se hará una demostración de las diapositivas que pueden ser generadas usando Quarto aplicándola al análisis de una base de datos relacionada con los pasajeros a bordo del RMS Titanic en su viaje inaugural de abril de 1912.

El RMS Titanic

El RMS Titanic fue un trasatlántico de la White Star Line que en su momento fue el mayor barco de pasajeros del mundo y célebre por haberse hundido en su viaje inaugural desde Southampton (Reino Unido) hacia Nueva York (EE.UU.) a unos 600 kilómetros de la isla de Terranova (Canadá) luego de haber impactado con un íceberg.

Pintura del RMS Titanic

Hundimiento

El RMS Titanic zarpó hacia Nueva York con 2208 personas abordo entre pasajeros y miembros de la tripulación el 10 de abril de 1912. A las 11:40 pm aproximadamente chocó un íceberg provocando su hundimiento. Ante la ausencia de suficientes botes salvavidas para todos los pasajeros, y dado que la mayoría no fueron llenados hasta su entera capacidad, 1496 pasajeros fallecieron. El resto fueron rescatados hacia el amanecer del 15 de abril por el RMS Carpathia.

Hundimiento

‘Der Untergang der Titanic’. Pintura de Willy Stöwer.

Hundimiento

Trayectoria del Titanic. En rojo sólido el recorrido realizado y en línea discontinua el hipótetico de no haberse hundido.

Modelo estadístico

En la plataforma Kaggle se tienen algunas bases de datos con información de los pasajeros del RMS Titanic. Esta está dividida de antemano en un conjunto de entrenamiento y en un conjunto de validación. Así, el objetivo es usar los datos del conjunto de entrenamiento para poder predecir si cuáles pasajeros del conjunto de validación logran sobrevivir de la tragedia y cuáles no.

Lectura de los datos

train <- read.csv('./Datos/train.csv')
test <- read.csv('./Datos/test.csv')
super <- read.csv('./Datos/gender_submission.csv')

A continuación se revisan las dimensiones de cada base de datos:

lapply(list(train, test, super), dim)
[[1]]
[1] 891  12

[[2]]
[1] 418  11

[[3]]
[1] 418   2

Revisión. Train.

train %>% str()
'data.frame':   891 obs. of  12 variables:
 $ passenger_id: int  1 2 3 4 5 6 7 8 9 10 ...
 $ survived    : int  0 1 1 1 0 0 0 0 1 1 ...
 $ pclass      : int  3 1 3 1 3 3 1 3 3 2 ...
 $ name        : chr  "Braund, Mr. Owen Harris" "Cumings, Mrs. John Bradley (Florence Briggs Thayer)" "Heikkinen, Miss. Laina" "Futrelle, Mrs. Jacques Heath (Lily May Peel)" ...
 $ sex         : chr  "male" "female" "female" "female" ...
 $ age         : num  22 38 26 35 35 NA 54 2 27 14 ...
 $ sib_sp      : int  1 1 0 1 0 0 0 3 0 1 ...
 $ parch       : int  0 0 0 0 0 0 0 1 2 0 ...
 $ ticket      : chr  "A/5 21171" "PC 17599" "STON/O2. 3101282" "113803" ...
 $ fare        : num  7.25 71.28 7.92 53.1 8.05 ...
 $ cabin       : chr  "" "C85" "" "C123" ...
 $ embarked    : chr  "S" "C" "S" "S" ...

Revisión. Train.

Las variables categóricas serán recodificadas para que sean de tipo factor.

train$survived %<>% as.factor()
train$pclass %<>% as.factor()
train$sex %<>% as.factor()
train$embarked %<>% as.factor()

Revisión. Test.

test %>% str()
'data.frame':   418 obs. of  11 variables:
 $ passenger_id: int  892 893 894 895 896 897 898 899 900 901 ...
 $ pclass      : int  3 3 2 3 3 3 3 2 3 3 ...
 $ name        : chr  "Kelly, Mr. James" "Wilkes, Mrs. James (Ellen Needs)" "Myles, Mr. Thomas Francis" "Wirz, Mr. Albert" ...
 $ sex         : chr  "male" "female" "male" "male" ...
 $ age         : num  34.5 47 62 27 22 14 30 26 18 21 ...
 $ sib_sp      : int  0 1 0 0 1 0 0 1 0 2 ...
 $ parch       : int  0 0 0 0 1 0 0 1 0 0 ...
 $ ticket      : chr  "330911" "363272" "240276" "315154" ...
 $ fare        : num  7.83 7 9.69 8.66 12.29 ...
 $ cabin       : chr  "" "" "" "" ...
 $ embarked    : chr  "Q" "S" "Q" "S" ...

Revisión. Test.

test$pclass %<>% as.factor()
test$sex %<>% as.factor()
test$embarked %<>% as.factor()

Una revisión a los datos

Se analizarán algunas características generales de los datos de los pasajeros. Para ello, se van a unir las dos bases de datos excluyendo la columna que tiene información sobre los supervivientes.

datos <- rbind(train[, -2], test)

Edades

Sexo

Clases

Modelo binomial. Ajuste.

Se va considerar inicialmente un modelo de clasificación binomial usando las variables asociadas a la clase, el sexo, la edad, el número de hermanos o padres abordo en el Titanic con el pasajero, el puerto de embarque y la tarifa pagada por el pasajero.

Modelo binomial. Ajuste.


Call:
glm(formula = survived ~ pclass + sex + age + sib_sp + parch + 
    fare + embarked, family = "binomial", data = train)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-2.7220  -0.6455  -0.3770   0.6293   2.4461  

Coefficients:
              Estimate Std. Error z value Pr(>|z|)    
(Intercept)  16.691979 607.920015   0.027 0.978095    
pclass2      -1.189637   0.329197  -3.614 0.000302 ***
pclass3      -2.395220   0.343356  -6.976 3.04e-12 ***
sexmale      -2.637859   0.223006 -11.829  < 2e-16 ***
age          -0.043308   0.008322  -5.204 1.95e-07 ***
sib_sp       -0.362925   0.129290  -2.807 0.005000 ** 
parch        -0.060365   0.123944  -0.487 0.626233    
fare          0.001451   0.002595   0.559 0.576143    
embarkedC   -12.259048 607.919885  -0.020 0.983911    
embarkedQ   -13.082427 607.920088  -0.022 0.982831    
embarkedS   -12.661895 607.919868  -0.021 0.983383    
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 964.52  on 713  degrees of freedom
Residual deviance: 632.34  on 703  degrees of freedom
  (177 observations deleted due to missingness)
AIC: 654.34

Number of Fisher Scoring iterations: 13

Modelo binomial. Pronóstico

Matriz de confusión. Train.

Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 365  83
         1  59 207
                                          
               Accuracy : 0.8011          
                 95% CI : (0.7699, 0.8298)
    No Information Rate : 0.5938          
    P-Value [Acc > NIR] : < 2e-16         
                                          
                  Kappa : 0.5823          
                                          
 Mcnemar's Test P-Value : 0.05359         
                                          
            Sensitivity : 0.8608          
            Specificity : 0.7138          
         Pos Pred Value : 0.8147          
         Neg Pred Value : 0.7782          
             Prevalence : 0.5938          
         Detection Rate : 0.5112          
   Detection Prevalence : 0.6275          
      Balanced Accuracy : 0.7873          
                                          
       'Positive' Class : 0               
                                          

Matriz de confusión. Train.

En el conjunto de entrenamiento se tienen a 142 pasajeros clasificados de forma incorrecta, de los cuales 83 fueron clasificados como supervivientes cuando en realidad fallecieron, mientras que 59 fueron clasificados como muertos cuando en realidad sobrevivieron. Se tiene que la tasa de clasificación incorrecta es del 19.89 %.

Matriz de confusión. Test.

Confusion Matrix and Statistics

          Reference
Prediction   0   1
         0 186  14
         1  18 113
                                          
               Accuracy : 0.9033          
                 95% CI : (0.8663, 0.9329)
    No Information Rate : 0.6163          
    P-Value [Acc > NIR] : <2e-16          
                                          
                  Kappa : 0.7968          
                                          
 Mcnemar's Test P-Value : 0.5959          
                                          
            Sensitivity : 0.9118          
            Specificity : 0.8898          
         Pos Pred Value : 0.9300          
         Neg Pred Value : 0.8626          
             Prevalence : 0.6163          
         Detection Rate : 0.5619          
   Detection Prevalence : 0.6042          
      Balanced Accuracy : 0.9008          
                                          
       'Positive' Class : 0               
                                          

Matriz de confusión. Test.

En este modelo, para el conjunto de validación, 32 pasajeros fueron clasificados de forma incorrecta, de los cuales 14 se salvaron y fueron clasificados como fallecidos, mientras que 18 fallecidos fueron clasificados como salvados. La tasa de clasificación incorrecta es del 9.67 %.

Observaciones

Nótese que en el conjunto de entrenamiento se tiene una tasa de clasificación incorrecta diez puntos porcentuales mayor que en el conjunto de validación, y esta de todos modos roza el 20 %, es decir, un quinto de los pasajeros en el conjunto de entrenamiento es clasificado de forma incorrecta. Así, vale la pena intentar otras metodologías de clasificación.