lunes, 29 de junio de 2020

Modelo de pronóstico de sobrevivientes de Titanic, Kaggle-Machine Learning (con R)

Pronóstico de sobrevivientes del Titanic

Pronósticos de sobrevivientes del Titanic propuesto en Kaggle

Como parte del estudio de Machine Learning, debemos conocer los diferentes métodos necesarios para la construcción de modelos que representan experimentos o problemas, los cuales permiten tener aproximaciones de la estructuras de los datos o incluso estimar resultados de los mismos.

Kaggle Propone un experimento que consiste en pronosticar los sobrevivientes del la tragedia del Titanic, a continuación se presenta un resumen de algunos aspectos del proyecto de modelar esta situación. En Kaggle se encuetran los dataset Train, el cual será nuestro conjunto de entrenamiento del modelo y contiene la variable Survived, para los que sobrevivieron y el dataset Test, que será nuestro conjunto de prueba del modelo no conteniendo la variable Survived. https://www.kaggle.com.

A continuación se muestran algunas filas de las variables en cada dataset Train y test. Recordemos que como se busca pronosticar un resultado o variable dependiente a partir de un conjunto de variables independientes estamos realizando un estudio supervisado.

head(Datostrain)
##   PassengerId Survived Pclass
## 1           1        0      3
## 2           2        1      1
## 3           3        1      3
## 4           4        1      1
## 5           5        0      3
## 6           6        0      3
##                                                  Name    Sex Age SibSp Parch
## 1                             Braund, Mr. Owen Harris   male  22     1     0
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer) female  38     1     0
## 3                              Heikkinen, Miss. Laina female  26     0     0
## 4        Futrelle, Mrs. Jacques Heath (Lily May Peel) female  35     1     0
## 5                            Allen, Mr. William Henry   male  35     0     0
## 6                                    Moran, Mr. James   male  NA     0     0
##             Ticket    Fare Cabin Embarked
## 1        A/5 21171  7.2500              S
## 2         PC 17599 71.2833   C85        C
## 3 STON/O2. 3101282  7.9250              S
## 4           113803 53.1000  C123        S
## 5           373450  8.0500              S
## 6           330877  8.4583              Q
head(Datostest)
##   PassengerId Pclass                                         Name    Sex  Age
## 1         892      3                             Kelly, Mr. James   male 34.5
## 2         893      3             Wilkes, Mrs. James (Ellen Needs) female 47.0
## 3         894      2                    Myles, Mr. Thomas Francis   male 62.0
## 4         895      3                             Wirz, Mr. Albert   male 27.0
## 5         896      3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0
## 6         897      3                   Svensson, Mr. Johan Cervin   male 14.0
##   SibSp Parch  Ticket    Fare Cabin Embarked
## 1     0     0  330911  7.8292              Q
## 2     1     0  363272  7.0000              S
## 3     0     0  240276  9.6875              Q
## 4     0     0  315154  8.6625              S
## 5     1     1 3101298 12.2875              S
## 6     0     0    7538  9.2250              S

Entender lo datos (Análisis Exploratorio de los Datos)

Es necesario entender los datos, para ello es importante tener información de los datos para poder tener fundamentos que permitan decidir sobre el uso correcto de los modelos, R proporciona herramientas útiles con la finalidad de obtener información de los datos; conocer las variables definidas en cada conjunto, conocer valores característicos de cada variables, como la media mediana moda, porcentajes de datos con diferentes atributos, las representaciones gráficas de los datos nos permiten comprender mejor las características de estos y poder tener un mejor manejo de los datos.

A cotinuación mostramos algunas herramientas de R, para cada uno de los conjuntos de datos el train y el test. Se deja al lector explorar otras más que permitan conocer mas acerca de los datos. En nuestro caso mostramos como hay mucha simulitud entre los conjuntos Train y test, esto obviamente necesario para nuestro proyecto.

summary(Datostrain)
##   PassengerId       Survived          Pclass     
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000  
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000  
##  Median :446.0   Median :0.0000   Median :3.000  
##  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  
##                                                  
##                                     Name         Sex           Age       
##  Abbing, Mr. Anthony                  :  1   female:314   Min.   : 0.42  
##  Abbott, Mr. Rossmore Edward          :  1   male  :577   1st Qu.:20.12  
##  Abbott, Mrs. Stanton (Rosa Hunt)     :  1                Median :28.00  
##  Abelson, Mr. Samuel                  :  1                Mean   :29.70  
##  Abelson, Mrs. Samuel (Hannah Wizosky):  1                3rd Qu.:38.00  
##  Adahl, Mr. Mauritz Nils Martin       :  1                Max.   :80.00  
##  (Other)                              :885                NA's   :177    
##      SibSp           Parch             Ticket         Fare       
##  Min.   :0.000   Min.   :0.0000   1601    :  7   Min.   :  0.00  
##  1st Qu.:0.000   1st Qu.:0.0000   347082  :  7   1st Qu.:  7.91  
##  Median :0.000   Median :0.0000   CA. 2343:  7   Median : 14.45  
##  Mean   :0.523   Mean   :0.3816   3101295 :  6   Mean   : 32.20  
##  3rd Qu.:1.000   3rd Qu.:0.0000   347088  :  6   3rd Qu.: 31.00  
##  Max.   :8.000   Max.   :6.0000   CA 2144 :  6   Max.   :512.33  
##                                   (Other) :852                   
##          Cabin     Embarked
##             :687    :  2   
##  B96 B98    :  4   C:168   
##  C23 C25 C27:  4   Q: 77   
##  G6         :  4   S:644   
##  C22 C26    :  3           
##  D          :  3           
##  (Other)    :186
summary(Datostest)
##   PassengerId         Pclass     
##  Min.   : 892.0   Min.   :1.000  
##  1st Qu.: 996.2   1st Qu.:1.000  
##  Median :1100.5   Median :3.000  
##  Mean   :1100.5   Mean   :2.266  
##  3rd Qu.:1204.8   3rd Qu.:3.000  
##  Max.   :1309.0   Max.   :3.000  
##                                  
##                                         Name         Sex           Age       
##  Abbott, Master. Eugene Joseph            :  1   female:152   Min.   : 0.17  
##  Abelseth, Miss. Karen Marie              :  1   male  :266   1st Qu.:21.00  
##  Abelseth, Mr. Olaus Jorgensen            :  1                Median :27.00  
##  Abrahamsson, Mr. Abraham August Johannes :  1                Mean   :30.27  
##  Abrahim, Mrs. Joseph (Sophie Halaut Easu):  1                3rd Qu.:39.00  
##  Aks, Master. Philip Frank                :  1                Max.   :76.00  
##  (Other)                                  :412                NA's   :86     
##      SibSp            Parch             Ticket         Fare        
##  Min.   :0.0000   Min.   :0.0000   PC 17608:  5   Min.   :  0.000  
##  1st Qu.:0.0000   1st Qu.:0.0000   113503  :  4   1st Qu.:  7.896  
##  Median :0.0000   Median :0.0000   CA. 2343:  4   Median : 14.454  
##  Mean   :0.4474   Mean   :0.3923   16966   :  3   Mean   : 35.627  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   220845  :  3   3rd Qu.: 31.500  
##  Max.   :8.0000   Max.   :9.0000   347077  :  3   Max.   :512.329  
##                                    (Other) :396   NA's   :1        
##              Cabin     Embarked
##                 :327   C:102   
##  B57 B59 B63 B66:  3   Q: 46   
##  A34            :  2   S:270   
##  B45            :  2           
##  C101           :  2           
##  C116           :  2           
##  (Other)        : 80
str(Datostrain)
## 'data.frame':    891 obs. of  12 variables:
##  $ PassengerId: 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       : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
##  $ Sex        : Factor w/ 2 levels "female","male": 2 1 1 1 2 2 2 2 1 1 ...
##  $ Age        : num  22 38 26 35 35 NA 54 2 27 14 ...
##  $ SibSp      : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch      : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Ticket     : Factor w/ 681 levels "110152","110413",..: 524 597 670 50 473 276 86 396 345 133 ...
##  $ Fare       : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Cabin      : Factor w/ 148 levels "","A10","A14",..: 1 83 1 57 1 1 131 1 1 1 ...
##  $ Embarked   : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
str(Datostest)
## 'data.frame':    418 obs. of  11 variables:
##  $ PassengerId: int  892 893 894 895 896 897 898 899 900 901 ...
##  $ Pclass     : int  3 3 2 3 3 3 3 2 3 3 ...
##  $ Name       : Factor w/ 418 levels "Abbott, Master. Eugene Joseph",..: 210 409 273 414 182 370 85 58 5 104 ...
##  $ Sex        : Factor w/ 2 levels "female","male": 2 1 2 2 1 2 1 2 1 2 ...
##  $ Age        : num  34.5 47 62 27 22 14 30 26 18 21 ...
##  $ SibSp      : int  0 1 0 0 1 0 0 1 0 2 ...
##  $ Parch      : int  0 0 0 0 1 0 0 1 0 0 ...
##  $ Ticket     : Factor w/ 363 levels "110469","110489",..: 153 222 74 148 139 262 159 85 101 270 ...
##  $ Fare       : num  7.83 7 9.69 8.66 12.29 ...
##  $ Cabin      : Factor w/ 77 levels "","A11","A18",..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Embarked   : Factor w/ 3 levels "C","Q","S": 2 3 2 3 3 3 2 3 1 3 ...
skimr::skim(Datostrain)
## Warning in sorted_count(x): Variable contains value(s) of "" that have been
## converted to "empty".

## Warning in sorted_count(x): Variable contains value(s) of "" that have been
## converted to "empty".
Data summary
Name Datostrain
Number of rows 891
Number of columns 12
_______________________
Column type frequency:
factor 5
numeric 7
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
Name 0 1 FALSE 891 Abb: 1, Abb: 1, Abb: 1, Abe: 1
Sex 0 1 FALSE 2 mal: 577, fem: 314
Ticket 0 1 FALSE 681 160: 7, 347: 7, CA.: 7, 310: 6
Cabin 0 1 FALSE 148 emp: 687, B96: 4, C23: 4, G6: 4
Embarked 0 1 FALSE 4 S: 644, C: 168, Q: 77, emp: 2

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
PassengerId 0 1.0 446.00 257.35 1.00 223.50 446.00 668.5 891.00 ▇▇▇▇▇
Survived 0 1.0 0.38 0.49 0.00 0.00 0.00 1.0 1.00 ▇▁▁▁▅
Pclass 0 1.0 2.31 0.84 1.00 2.00 3.00 3.0 3.00 ▃▁▃▁▇
Age 177 0.8 29.70 14.53 0.42 20.12 28.00 38.0 80.00 ▂▇▅▂▁
SibSp 0 1.0 0.52 1.10 0.00 0.00 0.00 1.0 8.00 ▇▁▁▁▁
Parch 0 1.0 0.38 0.81 0.00 0.00 0.00 0.0 6.00 ▇▁▁▁▁
Fare 0 1.0 32.20 49.69 0.00 7.91 14.45 31.0 512.33 ▇▁▁▁▁
skimr::skim(Datostest)
## Warning in sorted_count(x): Variable contains value(s) of "" that have been
## converted to "empty".
Data summary
Name Datostest
Number of rows 418
Number of columns 11
_______________________
Column type frequency:
factor 5
numeric 6
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
Name 0 1 FALSE 418 Abb: 1, Abe: 1, Abe: 1, Abr: 1
Sex 0 1 FALSE 2 mal: 266, fem: 152
Ticket 0 1 FALSE 363 PC : 5, 113: 4, CA.: 4, 169: 3
Cabin 0 1 FALSE 77 emp: 327, B57: 3, A34: 2, B45: 2
Embarked 0 1 FALSE 3 S: 270, C: 102, Q: 46

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
PassengerId 0 1.00 1100.50 120.81 892.00 996.25 1100.50 1204.75 1309.00 ▇▇▇▇▇
Pclass 0 1.00 2.27 0.84 1.00 1.00 3.00 3.00 3.00 ▃▁▃▁▇
Age 86 0.79 30.27 14.18 0.17 21.00 27.00 39.00 76.00 ▂▇▃▂▁
SibSp 0 1.00 0.45 0.90 0.00 0.00 0.00 1.00 8.00 ▇▁▁▁▁
Parch 0 1.00 0.39 0.98 0.00 0.00 0.00 0.00 9.00 ▇▁▁▁▁
Fare 1 1.00 35.63 55.91 0.00 7.90 14.45 31.50 512.33 ▇▁▁▁▁

El siguiente gráfico muestra proporción de hombres y mujeres para cada uno de los conjuntos Train y Test

Siguiendo con el desarrollo de obtener información de los datos, en el siguiente gráfico mostramos las proporciones de cada atributo de la variabe Sexo para cada uno de los dataset. Este es solo un gráfico de muchos más que podemos elaborar para obtener información de los datos.

Preparación de los Datos del dataset Train

Para poder elaborar un modelo que tenga sentido es necesario darle una estructura particular a los datos, la cual facilitará la manipulación y operacionalidad de estos. Entre algunas de las estrategias para la preparación de los datos tenemos que: cambiar a numérico los valores de la variable sexo y embarque. Además seguramente descartar variables que con una gran cantidad de datos faltantes (Ticket y Cabina ) y asignar valores como la media o mediana en los valores faltantes para las variables que presumimos que tienen importancia para el pronóstico.

A continuacion se muestra el resultado para el dataset Train, observemos las nuevas variables sex_num y Embarked_num, las cuales representan los valores de Sex y Embarked de forma numérica, además suprimimos variables que se consideraron que no afectaban el modelo o sonteniean una gran cantidad de datos faltantes.

##   PassengerId       Survived          Pclass     
##  Min.   :  1.0   Min.   :0.0000   Min.   :1.000  
##  1st Qu.:223.5   1st Qu.:0.0000   1st Qu.:2.000  
##  Median :446.0   Median :0.0000   Median :3.000  
##  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  
##                                                  
##                                     Name         SibSp           Parch       
##  Abbing, Mr. Anthony                  :  1   Min.   :0.000   Min.   :0.0000  
##  Abbott, Mr. Rossmore Edward          :  1   1st Qu.:0.000   1st Qu.:0.0000  
##  Abbott, Mrs. Stanton (Rosa Hunt)     :  1   Median :0.000   Median :0.0000  
##  Abelson, Mr. Samuel                  :  1   Mean   :0.523   Mean   :0.3816  
##  Abelson, Mrs. Samuel (Hannah Wizosky):  1   3rd Qu.:1.000   3rd Qu.:0.0000  
##  Adahl, Mr. Mauritz Nils Martin       :  1   Max.   :8.000   Max.   :6.0000  
##  (Other)                              :885                                   
##       Fare        Embarked    sex_num         age_compl      Embarked_num 
##  Min.   :  0.00    :  2    Min.   :0.0000   Min.   : 0.42   Min.   :0.00  
##  1st Qu.:  7.91   C:168    1st Qu.:0.0000   1st Qu.:22.00   1st Qu.:2.00  
##  Median : 14.45   Q: 77    Median :0.0000   Median :28.00   Median :3.00  
##  Mean   : 32.20   S:644    Mean   :0.3524   Mean   :29.36   Mean   :2.53  
##  3rd Qu.: 31.00            3rd Qu.:1.0000   3rd Qu.:35.00   3rd Qu.:3.00  
##  Max.   :512.33            Max.   :1.0000   Max.   :80.00   Max.   :3.00  
## 
## 'data.frame':    891 obs. of  11 variables:
##  $ PassengerId : 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        : Factor w/ 891 levels "Abbing, Mr. Anthony",..: 109 191 358 277 16 559 520 629 417 581 ...
##  $ SibSp       : int  1 1 0 1 0 0 0 3 0 1 ...
##  $ Parch       : int  0 0 0 0 0 0 0 1 2 0 ...
##  $ Fare        : num  7.25 71.28 7.92 53.1 8.05 ...
##  $ Embarked    : Factor w/ 4 levels "","C","Q","S": 4 2 4 4 4 3 4 4 4 2 ...
##  $ sex_num     : num  0 1 1 1 0 0 0 0 1 1 ...
##  $ age_compl   : num  22 38 26 35 35 28 54 2 27 14 ...
##  $ Embarked_num: num  3 1 3 3 3 2 3 3 3 1 ...

Training con el Modelo de Regresión Logística

Usemos un modelo de regresión logística, el cual entrenamos con el conjunto de datos Datostrain9, el cual proviene de Train, donde ya fueron preparados los datos.

#########$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
###### Trainind del Modelo de regresión logistica multiple
#############################################################################
glm.multipltitanic1=glm(Survived∼Pclass+SibSp+Parch+Fare+sex_num+age_compl+Embarked_num ,
                        data=Datostrain9 ,family =binomial )

summary (glm.multipltitanic1)
## 
## Call:
## glm(formula = Survived ~ Pclass + SibSp + Parch + Fare + sex_num + 
##     age_compl + Embarked_num, family = binomial, data = Datostrain9)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.6321  -0.5826  -0.4152   0.6183   2.4369  
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   2.747663   0.566417   4.851 1.23e-06 ***
## Pclass       -1.085992   0.139629  -7.778 7.38e-15 ***
## SibSp        -0.326010   0.109145  -2.987  0.00282 ** 
## Parch        -0.094950   0.117926  -0.805  0.42073    
## Fare          0.001944   0.002383   0.816  0.41466    
## sex_num       2.736073   0.199038  13.746  < 2e-16 ***
## age_compl    -0.039015   0.007827  -4.985 6.21e-07 ***
## Embarked_num -0.222047   0.114463  -1.940  0.05239 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 1186.66  on 890  degrees of freedom
## Residual deviance:  785.43  on 883  degrees of freedom
## AIC: 801.43
## 
## Number of Fisher Scoring iterations: 5
coef(glm.multipltitanic1)
##  (Intercept)       Pclass        SibSp        Parch         Fare      sex_num 
##  2.747662738 -1.085991990 -0.326009839 -0.094949993  0.001943544  2.736072689 
##    age_compl Embarked_num 
## -0.039014912 -0.222046567
glm.probs.sobrev<-predict(glm.multipltitanic1,
                          type = "response")
glm.probs.sobrev[1:10]
##          1          2          3          4          5          6          7 
## 0.08732842 0.92453784 0.63659937 0.89503860 0.07403289 0.11604944 0.26688648 
##          8          9         10 
## 0.09224704 0.58369373 0.90686387
glm.pred.s=rep("No",891)
glm.pred.s[glm.probs.sobrev>0.5]="Yes"
matr_confu<-table(Survived,glm.pred.s)
accuracy<- function(x){sum(diag(x)/(sum(rowSums(x))))*100}
accuracy(matr_confu)
## [1] 79.91021

Notemos que al final en la evaluación del modelo obtenemos un ajuste de la precisión del modelo del 79.9 %. Hay observaciones referente a éste modelo, al notar p-valores considerablemente grande para las variables Parch,Fare incluso Embarked_num, las cuales en trajabo mas extensos se discuten.

Preparación de los Datos del dataset Test

De manera similar preparamos los datos del conjunto Test, que va a servir para evaluar el pronóstico del modelo.

str(Datostest9)
## 'data.frame':    418 obs. of  10 variables:
##  $ PassengerId : int  892 893 894 895 896 897 898 899 900 901 ...
##  $ Pclass      : int  3 3 2 3 3 3 3 2 3 3 ...
##  $ Name        : Factor w/ 418 levels "Abbott, Master. Eugene Joseph",..: 210 409 273 414 182 370 85 58 5 104 ...
##  $ SibSp       : int  0 1 0 0 1 0 0 1 0 2 ...
##  $ Parch       : int  0 0 0 0 1 0 0 1 0 0 ...
##  $ Fare        : num  7.83 7 9.69 8.66 12.29 ...
##  $ Embarked    : Factor w/ 3 levels "C","Q","S": 2 3 2 3 3 3 2 3 1 3 ...
##  $ sex_num     : num  0 1 0 0 1 0 1 0 1 0 ...
##  $ age_compl   : num  34.5 47 62 27 22 14 30 26 18 21 ...
##  $ Embarked_num: num  2 3 2 3 3 3 2 3 1 3 ...
summary(Datostest9)
##   PassengerId         Pclass     
##  Min.   : 892.0   Min.   :1.000  
##  1st Qu.: 996.2   1st Qu.:1.000  
##  Median :1100.5   Median :3.000  
##  Mean   :1100.5   Mean   :2.266  
##  3rd Qu.:1204.8   3rd Qu.:3.000  
##  Max.   :1309.0   Max.   :3.000  
##                                  
##                                         Name         SibSp       
##  Abbott, Master. Eugene Joseph            :  1   Min.   :0.0000  
##  Abelseth, Miss. Karen Marie              :  1   1st Qu.:0.0000  
##  Abelseth, Mr. Olaus Jorgensen            :  1   Median :0.0000  
##  Abrahamsson, Mr. Abraham August Johannes :  1   Mean   :0.4474  
##  Abrahim, Mrs. Joseph (Sophie Halaut Easu):  1   3rd Qu.:1.0000  
##  Aks, Master. Philip Frank                :  1   Max.   :8.0000  
##  (Other)                                  :412                   
##      Parch             Fare         Embarked    sex_num         age_compl    
##  Min.   :0.0000   Min.   :  0.000   C:102    Min.   :0.0000   Min.   : 0.17  
##  1st Qu.:0.0000   1st Qu.:  7.896   Q: 46    1st Qu.:0.0000   1st Qu.:23.00  
##  Median :0.0000   Median : 14.454   S:270    Median :0.0000   Median :28.00  
##  Mean   :0.3923   Mean   : 35.578            Mean   :0.3636   Mean   :29.81  
##  3rd Qu.:0.0000   3rd Qu.: 31.472            3rd Qu.:1.0000   3rd Qu.:35.75  
##  Max.   :9.0000   Max.   :512.329            Max.   :1.0000   Max.   :76.00  
##                                                                              
##   Embarked_num  
##  Min.   :1.000  
##  1st Qu.:2.000  
##  Median :3.000  
##  Mean   :2.402  
##  3rd Qu.:3.000  
##  Max.   :3.000  
## 

Observemos algunas características de los conjuntos de datos obtenidos de la preparación, para notar que mantienen basicamente la misma información y no sean distorcionados luego de su preparación.

skimr::skim(Datostrain9)
## Warning in sorted_count(x): Variable contains value(s) of "" that have been
## converted to "empty".
Data summary
Name Datostrain9
Number of rows 891
Number of columns 11
_______________________
Column type frequency:
factor 2
numeric 9
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
Name 0 1 FALSE 891 Abb: 1, Abb: 1, Abb: 1, Abe: 1
Embarked 0 1 FALSE 4 S: 644, C: 168, Q: 77, emp: 2

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
PassengerId 0 1 446.00 257.35 1.00 223.50 446.00 668.5 891.00 ▇▇▇▇▇
Survived 0 1 0.38 0.49 0.00 0.00 0.00 1.0 1.00 ▇▁▁▁▅
Pclass 0 1 2.31 0.84 1.00 2.00 3.00 3.0 3.00 ▃▁▃▁▇
SibSp 0 1 0.52 1.10 0.00 0.00 0.00 1.0 8.00 ▇▁▁▁▁
Parch 0 1 0.38 0.81 0.00 0.00 0.00 0.0 6.00 ▇▁▁▁▁
Fare 0 1 32.20 49.69 0.00 7.91 14.45 31.0 512.33 ▇▁▁▁▁
sex_num 0 1 0.35 0.48 0.00 0.00 0.00 1.0 1.00 ▇▁▁▁▅
age_compl 0 1 29.36 13.02 0.42 22.00 28.00 35.0 80.00 ▂▇▃▁▁
Embarked_num 0 1 2.53 0.80 0.00 2.00 3.00 3.0 3.00 ▁▂▁▁▇
skimr::skim(Datostest9)
Data summary
Name Datostest9
Number of rows 418
Number of columns 10
_______________________
Column type frequency:
factor 2
numeric 8
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
Name 0 1 FALSE 418 Abb: 1, Abe: 1, Abe: 1, Abr: 1
Embarked 0 1 FALSE 3 S: 270, C: 102, Q: 46

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
PassengerId 0 1 1100.50 120.81 892.00 996.25 1100.50 1204.75 1309.00 ▇▇▇▇▇
Pclass 0 1 2.27 0.84 1.00 1.00 3.00 3.00 3.00 ▃▁▃▁▇
SibSp 0 1 0.45 0.90 0.00 0.00 0.00 1.00 8.00 ▇▁▁▁▁
Parch 0 1 0.39 0.98 0.00 0.00 0.00 0.00 9.00 ▇▁▁▁▁
Fare 0 1 35.58 55.85 0.00 7.90 14.45 31.47 512.33 ▇▁▁▁▁
sex_num 0 1 0.36 0.48 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▅
age_compl 0 1 29.81 12.67 0.17 23.00 28.00 35.75 76.00 ▁▇▂▁▁
Embarked_num 0 1 2.40 0.85 1.00 2.00 3.00 3.00 3.00 ▃▁▂▁▇

Prueba del modelo de Regresión Logística para el dataset Test

Observemos algunas características de los conjuntos de datos obtenidos de la preparación, para notar que mantienen basicamente la misma información y no distorcionaron luego de su preparación.

#####$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
#############     Aplicacion del modelo en el dataset TEST
################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
glm.multipltitanic1=glm(Survived∼Pclass+SibSp+Parch+Fare+sex_num+age_compl+Embarked_num ,
                        data=Datostrain9 ,family =binomial )
newdatarankp<-predict(glm.multipltitanic1,newdata = Datostest9,type = "response")
head(newdatarankp)
##          1          2          3          4          5          6 
## 0.09235576 0.35744151 0.09376468 0.09858740 0.57547213 0.15384818
newdatarankp[1:10]
##          1          2          3          4          5          6          7 
## 0.09235576 0.35744151 0.09376468 0.09858740 0.57547213 0.15384818 0.65159251 
##          8          9         10 
## 0.18702688 0.78843117 0.06908379
sobrevivientes=rep(0,418)
sobrevivientes[newdatarankp>0.5]=1
sobrevivientes
##   [1] 0 0 0 0 1 0 1 0 1 0 0 0 1 0 1 1 0 0 1 1 0 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1
##  [38] 1 0 0 0 0 0 1 1 0 0 0 1 0 0 0 1 1 0 0 0 0 0 1 0 0 0 1 1 1 1 0 1 1 1 0 1 1
##  [75] 1 1 0 1 0 1 0 0 0 0 0 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0
## [112] 1 1 1 1 0 0 1 1 1 1 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0
## [149] 0 0 1 0 0 0 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 1 0 0 0 0 0 1 1 0 1 1 0 0 1 0 1
## [186] 0 1 0 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0
## [223] 1 0 1 1 0 1 0 0 0 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0 0 0 0 1
## [260] 0 0 0 1 1 0 0 0 0 1 0 0 0 1 1 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0
## [297] 1 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 1 0 1 0 0 0 1 0 0
## [334] 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1 0 1 1 0 0 0 1 0 1 0 0 1 0 1 1 0 1 0 0 1 1 0
## [371] 0 1 0 0 1 1 1 0 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 0 0 1 0 1 0 0 1 0 1 1 0 0 0
## [408] 0 1 1 1 1 1 0 1 0 0 0
#####

Pronóstico con el modelo para los pasajeros del dataset Test

A continuación el pronóstico para los datos del conjunto Test

#####
result.logist.model<-mutate(Datostest9,Survived=sobrevivientes)
head(result.logist.model)
##   PassengerId Pclass                                         Name SibSp Parch
## 1         892      3                             Kelly, Mr. James     0     0
## 2         893      3             Wilkes, Mrs. James (Ellen Needs)     1     0
## 3         894      2                    Myles, Mr. Thomas Francis     0     0
## 4         895      3                             Wirz, Mr. Albert     0     0
## 5         896      3 Hirvonen, Mrs. Alexander (Helga E Lindqvist)     1     1
## 6         897      3                   Svensson, Mr. Johan Cervin     0     0
##      Fare Embarked sex_num age_compl Embarked_num Survived
## 1  7.8292        Q       0      34.5            2        0
## 2  7.0000        S       1      47.0            3        0
## 3  9.6875        Q       0      62.0            2        0
## 4  8.6625        S       0      27.0            3        0
## 5 12.2875        S       1      22.0            3        1
## 6  9.2250        S       0      14.0            3        0
final1<-select(result.logist.model,PassengerId,Survived)
head(final1)
##   PassengerId Survived
## 1         892        0
## 2         893        0
## 3         894        0
## 4         895        0
## 5         896        1
## 6         897        0

Comentario final

Este es solo un modelo y una forma de elaborarlo si deseas mas detalles del modelo puedes escribirme a mi correo. En Kaggle puedes obtener mayor información de este reto y al final puedes obtener una evaluación del modelo, éste en particular obtuvo un score de 0.7559/1. A continuación dejo otro modelo usando el metodo de k- vencidad cerana (k-nearest neighbour).

#                              MODELO KNN 
################################################################################

###la función de normalizar
nor<-function(x){(x-min(x))/(max(x)-min(x))}
#los datos normalizados

Datostrain9_norm<-as.data.frame(lapply(Datostrain9[,c(3,5,6,7,9,10,11)], nor))
Datostest9_norm<-as.data.frame(lapply(Datostest9[,c(2,4,5,6,8,9,10)], nor))

Survived_categorias<-Datostrain9[,2]
##
## pronóstico con el modelo knn con train para evaluar el modelo
pronoprueba<-class::knn(Datostrain9_norm,Datostrain9_norm,cl=Survived_categorias,k=13)
res_knn2<-mutate(Datostrain9,Survived2=pronoprueba)
head(res_knn2)
##   PassengerId Survived Pclass
## 1           1        0      3
## 2           2        1      1
## 3           3        1      3
## 4           4        1      1
## 5           5        0      3
## 6           6        0      3
##                                                  Name SibSp Parch    Fare
## 1                             Braund, Mr. Owen Harris     1     0  7.2500
## 2 Cumings, Mrs. John Bradley (Florence Briggs Thayer)     1     0 71.2833
## 3                              Heikkinen, Miss. Laina     0     0  7.9250
## 4        Futrelle, Mrs. Jacques Heath (Lily May Peel)     1     0 53.1000
## 5                            Allen, Mr. William Henry     0     0  8.0500
## 6                                    Moran, Mr. James     0     0  8.4583
##   Embarked sex_num age_compl Embarked_num Survived2
## 1        S       0        22            3         0
## 2        C       1        38            1         1
## 3        S       1        26            3         0
## 4        S       1        35            3         1
## 5        S       0        35            3         0
## 6        Q       0        28            2         0
##Evaluación de Train
matr_confu2<-table(res_knn2$Survived,res_knn2$Survived2)
accuracy<- function(x){sum(diag(x)/(sum(rowSums(x))))*100}
accuracy(matr_confu2)
## [1] 82.37935
## Pronóstico para data Test
prono1<-class::knn(Datostrain9_norm,Datostest9_norm,cl=Survived_categorias,k=13)

result.prono.knn<-mutate(Datostest9,Survived=prono1)
finalknn<-select(result.logist.model,PassengerId,Survived)
head(finalknn)
##   PassengerId Survived
## 1         892        0
## 2         893        0
## 3         894        0
## 4         895        0
## 5         896        1
## 6         897        0

El método de k-nearest neighbour, se encuentra dentro de los algorítmos de clasificación, si deseas conocer un poco de éste método, puedes encontrar información en uno de mis post de mi blog: http://vasquezivan23.blogspot.com