Pronóstico de sobrevivientes del Titanic
Iván Leonel Vasquez R.
6/28/2020
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".
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".
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".
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)
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
No hay comentarios:
Publicar un comentario