Se llevó a cabo un análisis exploratorio de datos en el set de datos train, con el fin de analizar las variables observadas según el género que es el interés central de nuestro trabajo. Con esto se pretende analizar de manera descriptiva algún patrón de asociación entre variables discriminadas según el sexo.

inicialmente creamos un directorio de trabajo

##directorio de trabajo##
setwd("C:/Users/HP/Desktop/blackfriday")
 list.files()
## [1] "Prueba técnica - Data Scientist.docx"
## [2] "Prueba_tecnica_luisgamarra.Rmd"      
## [3] "PruebaTécnicaDataScientist.Rmd"      
## [4] "scrip.R"                             
## [5] "test.csv"                            
## [6] "trabajo.docx"                        
## [7] "train.csv"

Luego importamos los datos a R

library(tidyverse)
## -- Attaching packages ---------------------------------------------------------------------------------------------- tidyverse 1.2.1 --
## v ggplot2 3.2.1     v purrr   0.3.2
## v tibble  2.1.3     v dplyr   0.8.3
## v tidyr   1.0.0     v stringr 1.4.0
## v readr   1.3.1     v forcats 0.4.0
## -- Conflicts ------------------------------------------------------------------------------------------------- tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
datostest<-read_csv("test.CSV")
## Parsed with column specification:
## cols(
##   User_ID = col_double(),
##   Product_ID = col_character(),
##   Gender = col_character(),
##   Age = col_character(),
##   Occupation = col_double(),
##   City_Category = col_character(),
##   Stay_In_Current_City_Years = col_character(),
##   Marital_Status = col_double(),
##   Product_Category_1 = col_double(),
##   Product_Category_2 = col_double(),
##   Product_Category_3 = col_double()
## )
datostrain<-read_csv("train.csv")
## Parsed with column specification:
## cols(
##   User_ID = col_double(),
##   Product_ID = col_character(),
##   Gender = col_character(),
##   Age = col_character(),
##   Occupation = col_double(),
##   City_Category = col_character(),
##   Stay_In_Current_City_Years = col_character(),
##   Marital_Status = col_double(),
##   Product_Category_1 = col_double(),
##   Product_Category_2 = col_double(),
##   Product_Category_3 = col_double(),
##   Purchase = col_double()
## )

Los datos faltantes generan conflicto a la hora de analizar nuestros datos, ya sea dicho análisis exploratorio o un análisis mediante un modelo probabilístico.

###comprobar datos faltantes train##
sapply(datostrain, function(x) sum(is.na(x)))
##                    User_ID                 Product_ID 
##                          0                          0 
##                     Gender                        Age 
##                          0                          0 
##                 Occupation              City_Category 
##                          0                          0 
## Stay_In_Current_City_Years             Marital_Status 
##                          0                          0 
##         Product_Category_1         Product_Category_2 
##                          0                     173638 
##         Product_Category_3                   Purchase 
##                     383247                          0
###comprobar datos faltantes test##
sapply(datostest, function(x) sum(is.na(x)))
##                    User_ID                 Product_ID 
##                          0                          0 
##                     Gender                        Age 
##                          0                          0 
##                 Occupation              City_Category 
##                          0                          0 
## Stay_In_Current_City_Years             Marital_Status 
##                          0                          0 
##         Product_Category_1         Product_Category_2 
##                          0                      72344 
##         Product_Category_3 
##                     162562

Posterior mente realizamos un resumen de todas las variables, con el fin de conocer sus propiedades estadísticas o posibles errores que eventualmente puedan surgir.

summary(datostrain)
##     User_ID         Product_ID           Gender         
##  Min.   :1000001   Length:550068      Length:550068     
##  1st Qu.:1001516   Class :character   Class :character  
##  Median :1003077   Mode  :character   Mode  :character  
##  Mean   :1003029                                        
##  3rd Qu.:1004478                                        
##  Max.   :1006040                                        
##                                                         
##      Age              Occupation     City_Category     
##  Length:550068      Min.   : 0.000   Length:550068     
##  Class :character   1st Qu.: 2.000   Class :character  
##  Mode  :character   Median : 7.000   Mode  :character  
##                     Mean   : 8.077                     
##                     3rd Qu.:14.000                     
##                     Max.   :20.000                     
##                                                        
##  Stay_In_Current_City_Years Marital_Status   Product_Category_1
##  Length:550068              Min.   :0.0000   Min.   : 1.000    
##  Class :character           1st Qu.:0.0000   1st Qu.: 1.000    
##  Mode  :character           Median :0.0000   Median : 5.000    
##                             Mean   :0.4097   Mean   : 5.404    
##                             3rd Qu.:1.0000   3rd Qu.: 8.000    
##                             Max.   :1.0000   Max.   :20.000    
##                                                                
##  Product_Category_2 Product_Category_3    Purchase    
##  Min.   : 2.00      Min.   : 3.0       Min.   :   12  
##  1st Qu.: 5.00      1st Qu.: 9.0       1st Qu.: 5823  
##  Median : 9.00      Median :14.0       Median : 8047  
##  Mean   : 9.84      Mean   :12.7       Mean   : 9264  
##  3rd Qu.:15.00      3rd Qu.:16.0       3rd Qu.:12054  
##  Max.   :18.00      Max.   :18.0       Max.   :23961  
##  NA's   :173638     NA's   :383247
summary(datostest)
##     User_ID         Product_ID           Gender         
##  Min.   :1000001   Length:233599      Length:233599     
##  1st Qu.:1001527   Class :character   Class :character  
##  Median :1003070   Mode  :character   Mode  :character  
##  Mean   :1003029                                        
##  3rd Qu.:1004477                                        
##  Max.   :1006040                                        
##                                                         
##      Age              Occupation     City_Category     
##  Length:233599      Min.   : 0.000   Length:233599     
##  Class :character   1st Qu.: 2.000   Class :character  
##  Mode  :character   Median : 7.000   Mode  :character  
##                     Mean   : 8.085                     
##                     3rd Qu.:14.000                     
##                     Max.   :20.000                     
##                                                        
##  Stay_In_Current_City_Years Marital_Status   Product_Category_1
##  Length:233599              Min.   :0.0000   Min.   : 1.000    
##  Class :character           1st Qu.:0.0000   1st Qu.: 1.000    
##  Mode  :character           Median :0.0000   Median : 5.000    
##                             Mean   :0.4101   Mean   : 5.277    
##                             3rd Qu.:1.0000   3rd Qu.: 8.000    
##                             Max.   :1.0000   Max.   :18.000    
##                                                                
##  Product_Category_2 Product_Category_3
##  Min.   : 2.00      Min.   : 3.00     
##  1st Qu.: 5.00      1st Qu.: 9.00     
##  Median : 9.00      Median :14.00     
##  Mean   : 9.85      Mean   :12.67     
##  3rd Qu.:15.00      3rd Qu.:16.00     
##  Max.   :18.00      Max.   :18.00     
##  NA's   :72344      NA's   :162562

Se observa que varias variables como el ID o la ocupación de los compradores aparecen como variables cuantitativas, lo cual es un error; con el comando fix podemos corregir dichos inconvenientes ya que mediante esta opción se puede cambiar la clasificación de la variable.

fix(datostrain)
fix(datostest)
summary(datostrain)
##    User_ID           Product_ID           Gender         
##  Length:550068      Length:550068      Length:550068     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##      Age             Occupation        City_Category     
##  Length:550068      Length:550068      Length:550068     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##  Stay_In_Current_City_Years Marital_Status     Product_Category_1
##  Length:550068              Length:550068      Length:550068     
##  Class :character           Class :character   Class :character  
##  Mode  :character           Mode  :character   Mode  :character  
##                                                                  
##                                                                  
##                                                                  
##  Product_Category_2 Product_Category_3    Purchase    
##  Length:550068      Length:550068      Min.   :   12  
##  Class :character   Class :character   1st Qu.: 5823  
##  Mode  :character   Mode  :character   Median : 8047  
##                                        Mean   : 9264  
##                                        3rd Qu.:12054  
##                                        Max.   :23961
summary(datostest)
##    User_ID           Product_ID           Gender         
##  Length:233599      Length:233599      Length:233599     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##      Age             Occupation        City_Category     
##  Length:233599      Length:233599      Length:233599     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##  Stay_In_Current_City_Years Marital_Status     Product_Category_1
##  Length:233599              Length:233599      Length:233599     
##  Class :character           Class :character   Class :character  
##  Mode  :character           Mode  :character   Mode  :character  
##  Product_Category_2 Product_Category_3
##  Length:233599      Length:233599     
##  Class :character   Class :character  
##  Mode  :character   Mode  :character

Con los resúmenes el anterior problema queda solucionado.

##Extraccion de las variables categoricas para el analisis grafico##

User_ID<-as.factor(datostrain$User_ID)
Gender<-as.factor(ifelse(datostrain$Gender=='M',"Masculino","Femenino"))
Occupation<-as.factor(datostrain$Occupation)
Product_ID<-as.factor(datostrain$Product_ID)
Marital_Status<-as.factor(ifelse(datostrain$Marital_Status==1,"Casado","Soltero"))
Age<-as.factor(datostrain$Age)
City_Category<-as.factor(datostrain$City_Category)
Stay_In_Current_City_Years<-as.factor(datostrain$Stay_In_Current_City_Years)
Product_Category_1<-as.factor(datostrain$Product_Category_1)
Product_Category_2<-as.factor(datostrain$Product_Category_2)
Product_Category_3<-as.factor(datostrain$Product_Category_3)
##variables continuas##
Purchase<-as.numeric(datostrain$Purchase)

A partir de los anteriores vectores construiremos dataframes pertinentes para en análisis grafico de los datos según el sexo.

#Frecuencia de ocupaciones segun el género#
ocupacion=data.frame(table(Occupation ,Gender))##data frame para ocupación##
##Resumen##
table(Occupation ,Gender)
##           Gender
## Occupation Femenino Masculino
##         0     18112     51526
##         1     17984     29442
##         10     4003      8927
##         11     1500     10086
##         12     3469     27710
##         13     1498      6230
##         14     6763     20546
##         15     2390      9775
##         16     4107     21264
##         17     3929     36114
##         18      230      6392
##         19     2017      6444
##         2      8629     17959
##         20     8811     24751
##         3      7919      9731
##         4     17836     54472
##         5      2220      9957
##         6      8160     12195
##         7     10028     49105
##         8       361      1185
##         9      5843       448
##graficos##

ggplot(data=ocupacion, aes(x=Occupation, y=Freq,fill=Gender)) + 
   geom_bar(stat="identity", position="dodge")+  scale_fill_manual("Genero",values = c("Masculino"= "black","Femenino"="blue"))+
  labs(x = 'Genero') +
  labs(y = 'Frecuencia') +
  ggtitle("Frecuencia de ocupaciones segun el género")

En los hombres las ocupaciones 0,17, 4 y 7 son las mas frecuentes; en mujeres la 0, 1, 4 son las mas frecuentes.

#Frecuencia de intervalos de edades segun el género#
edad=data.frame(table(Age ,Gender))##data frame para ocupación##
##Resumen##
table(Age ,Gender)
##        Gender
## Age     Femenino Masculino
##   0-17      5083     10019
##   18-25    24628     75032
##   26-35    50752    168835
##   36-45    27170     82843
##   46-50    13199     32502
##   51-55     9894     28607
##   55+       5083     16421
##graficos##

ggplot(data=edad, aes(x=Age, y=Freq,fill=Gender)) + 
   geom_bar(stat="identity", position="dodge")+  scale_fill_manual("Genero",values = c("Masculino"= "black","Femenino"="blue"))+
  labs(x = 'Edad') +
  labs(y = 'Frecuencia') +
  ggtitle("Frecuencia de edades segun el género")

En hombres los intervalos de edad más frecuentes son 18-25, 26-35 y 36-45, en mujeres son las mismas que en los hombres.

#Frecuencia de categoria de ciudades segun el género#
categoria=data.frame(table(City_Category ,Gender))##data frame para ocupación##
##Resumen##
table(City_Category ,Gender)
##              Gender
## City_Category Femenino Masculino
##             A    35704    112016
##             B    57796    173377
##             C    42309    128866
##graficos##

ggplot(data=categoria, aes(x=City_Category, y=Freq,fill=Gender)) + 
   geom_bar(stat="identity", position="dodge")+  scale_fill_manual("Genero",values = c("Masculino"= "black","Femenino"="blue"))+
  labs(x = 'Categoria de ciudad') +
  labs(y = 'Frecuencia') +
  ggtitle("Frecuencia de categoría de ciudad segun el género")

La categoría de ciudad más frecuente en hombres es la B, luego la C, lo mismo ocurre con las mujeres, quizás esta variable no tenga un buen poder discriminatorio.

#Frecuencia Anos de permanencia en la ciudad segun el género#
permanencia=data.frame(table(Stay_In_Current_City_Years ,Gender))##data frame para ocupación##
##Resumen##
table(Stay_In_Current_City_Years ,Gender)
##                           Gender
## Stay_In_Current_City_Years Femenino Masculino
##                         0     17063     57335
##                         1     51298    142523
##                         2     24332     77506
##                         3     24520     70765
##                         4+    18596     66130
##graficos##

ggplot(data=permanencia, aes(x=Stay_In_Current_City_Years, y=Freq,fill=Gender)) + 
   geom_bar(stat="identity", position="dodge")+  scale_fill_manual("Genero",values = c("Masculino"= "black","Femenino"="blue"))+
  labs(x = 'Anos de permanencia en la ciudad') +
  labs(y = 'Frecuencia') +
  ggtitle("Frecuencia Anos de permanencia en la ciudad segun el género")

El comportamiento de esta variable de años de permanencia en la ciudad es muy similar en ambos sexos.

#Frecuencia estados civiles segun el género#
estado=data.frame(table(Marital_Status  ,Gender))##data frame para ocupación##
##Resumen##
table(Marital_Status  ,Gender)
##               Gender
## Marital_Status Femenino Masculino
##        Casado     56988    168349
##        Soltero    78821    245910
##graficos##

ggplot(data=estado, aes(x=Marital_Status , y=Freq,fill=Gender)) + 
   geom_bar(stat="identity", position="dodge")+  scale_fill_manual("Genero",values = c("Masculino"= "black","Femenino"="blue"))+
  labs(x = 'Estado Civil') +
  labs(y = 'Frecuencia') +
  ggtitle("Frecuencia estados civiles segun el género")

en ambos sexos el estado civil más frecuente es el soltero.

#Frecuencia productos de la categoria 1 segun el género#
categoria1=data.frame(table(Product_Category_1  ,Gender))##data frame para ocupación##
##Resumen##
table(Product_Category_1  ,Gender)
##                   Gender
## Product_Category_1 Femenino Masculino
##                 1     24831    115547
##                 10     1162      3963
##                 11     4739     19548
##                 12     1532      2415
##                 13     1462      4087
##                 14      623       900
##                 15     1046      5244
##                 16     2402      7426
##                 17       62       516
##                 18      382      2743
##                 19      451      1152
##                 2      5658     18206
##                 20      723      1827
##                 3      6006     14207
##                 4      3639      8114
##                 5     41961    108972
##                 6      4559     15907
##                 7       943      2778
##                 8     33558     80367
##                 9        70       340
##graficos##

ggplot(data=categoria1, aes(x=Product_Category_1 , y=Freq,fill=Gender)) + 
   geom_bar(stat="identity", position="dodge")+  scale_fill_manual("Genero",values = c("Masculino"= "black","Femenino"="blue"))+
  labs(x = 'Categoria 1') +
  labs(y = 'Frecuencia') +
  ggtitle("Frecuencia de productos de la categoria 1 segun el género")

A pesar de que las mismas categorías de productos son las más frecuentes en ambos sexos el orden de frecuencias no es la misma.

#Frecuencia productos de la categoria 2 segun el género#
categoria2=data.frame(table(Product_Category_2  ,Gender))##data frame para ocupación##
##Resumen##
table(Product_Category_2  ,Gender)
##                   Gender
## Product_Category_2 Femenino Masculino
##                 10      736      2307
##                 11     2754     11380
##                 12     1744      3784
##                 13     2669      7862
##                 14    19693     35415
##                 15     6432     31423
##                 16     9496     33759
##                 17     2484     10836
##                 18      478      2292
##                 2      9199     40018
##                 3       617      2267
##                 4      7619     18058
##                 5      6155     20080
##                 6      3291     13175
##                 7       137       489
##                 8     16529     47559
##                 9      1497      4196
##graficos##

ggplot(data=categoria2, aes(x=Product_Category_2 , y=Freq,fill=Gender)) + 
   geom_bar(stat="identity", position="dodge")+  scale_fill_manual("Genero",values = c("Masculino"= "black","Femenino"="blue"))+
  labs(x = 'Categoria 2') +
  labs(y = 'Frecuencia') +
  ggtitle("Frecuencia de productos de la categoria 2 segun el género")

Esta variable de categoría de producto 2 parece ser una buena opción para discriminar, al igual que la variable categoría 1, ya que sus valores más frecuentes son diferentes en los sexos.

#Frecuencia productos de la categoria 3 segun el género#
categoria3=data.frame(table(Product_Category_3  ,Gender))##data frame para ocupación##
##Resumen##
table(Product_Category_3  ,Gender)
##                   Gender
## Product_Category_3 Femenino Masculino
##                 10      414      1312
##                 11      334      1471
##                 12     2722      6524
##                 13     1229      4230
##                 14     5623     12805
##                 15     4610     23403
##                 16     6774     25862
##                 17     3738     12964
##                 18      880      3749
##                 3        95       518
##                 4       433      1442
##                 5      4297     12361
##                 6       828      4062
##                 8      2941      9621
##                 9      2676      8903
##graficos##

ggplot(data=categoria3, aes(x=Product_Category_3 , y=Freq,fill=Gender)) + 
   geom_bar(stat="identity", position="dodge")+  scale_fill_manual("Genero",values = c("Masculino"= "black","Femenino"="blue"))+
  labs(x = 'Categoria 3') +
  labs(y = 'Frecuencia') +
  ggtitle("Frecuencia de productos de la categoria 3 segun el género")

Esta variable de categoría de producto 3 parece ser una buena opción para discriminar, al igual que la variable categoría 1 y 2, ya que sus valores más frecuentes son diferentes en los sexos.A pesar de que las mismas categorías de productos son las más frecuentes en ambos sexos el orden de frecuencias no es la misma.

Antes de correr el análisis tome la decisión de eliminar los datos faltantes y no eliminar las dos variables con tenían este inconveniente, de las dos formas se pierde información, sin embargo el modelo logístico podría verse afectado en gran medida en su poder clasificatorio de individuos al ser estas variables potenciales variables con diferencias por género.

##conjunto de datos sin datos faltantes train##
datostrain2 <- datostrain[!is.na(datostrain$Product_Category_2),]
datostrain2 <- datostrain2[!is.na(datostrain2$Product_Category_3),]
summary(datostrain2)
##    User_ID           Product_ID           Gender         
##  Length:166821      Length:166821      Length:166821     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##      Age             Occupation        City_Category     
##  Length:166821      Length:166821      Length:166821     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##  Stay_In_Current_City_Years Marital_Status     Product_Category_1
##  Length:166821              Length:166821      Length:166821     
##  Class :character           Class :character   Class :character  
##  Mode  :character           Mode  :character   Mode  :character  
##                                                                  
##                                                                  
##                                                                  
##  Product_Category_2 Product_Category_3    Purchase    
##  Length:166821      Length:166821      Min.   :  185  
##  Class :character   Class :character   1st Qu.: 7869  
##  Mode  :character   Mode  :character   Median :11756  
##                                        Mean   :11658  
##                                        3rd Qu.:15626  
##                                        Max.   :23959
##conjunto de datos sin datos faltantes test##
datostest2 <- datostest[!is.na(datostest$Product_Category_2),]
datostest2 <- datostest2[!is.na(datostest2$Product_Category_3),]
summary(datostest2)
##    User_ID           Product_ID           Gender         
##  Length:71037       Length:71037       Length:71037      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##      Age             Occupation        City_Category     
##  Length:71037       Length:71037       Length:71037      
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##  Stay_In_Current_City_Years Marital_Status     Product_Category_1
##  Length:71037               Length:71037       Length:71037      
##  Class :character           Class :character   Class :character  
##  Mode  :character           Mode  :character   Mode  :character  
##  Product_Category_2 Product_Category_3
##  Length:71037       Length:71037      
##  Class :character   Class :character  
##  Mode  :character   Mode  :character

para el trabajo de machine learning es claro que se va a trabajar con un algoritmo supervisado y trabajaremos modelos de clasificación ya que la variable de interés es categórica; específicamente se trabajara una regresión logística debido a que es especial para variables de interés o dependiente (y) dicotómicas. En los análisis anteriores mencionamos que se trabajarían en esta fase 2 sets de datos, uno de entrenamiento (train) y otro de prueba (test). Por lo tanto una vez obtenido el modelo o el algoritmo de clasificación con los datos train, probaremos los datos test en el modelo ajustado, y observaremos su desempeño.

##Modelo de clasificación con datos de entrenamiento sin datos faltantes##
##etiquetar los resultados de la variable genero como 1 y 0##
datostrain2$Gender <- factor(datostrain2$Gender,levels = c("M","F"),labels = c("1", "0"))

Aprendizaje<- glm(Gender ~Age+Occupation+City_Category+Stay_In_Current_City_Years+Marital_Status+Product_Category_1+Product_Category_2+Product_Category_3   , datostrain2, family = binomial(link="logit"))
summary(Aprendizaje)
## 
## Call:
## glm(formula = Gender ~ Age + Occupation + City_Category + Stay_In_Current_City_Years + 
##     Marital_Status + Product_Category_1 + Product_Category_2 + 
##     Product_Category_3, family = binomial(link = "logit"), data = datostrain2)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.5956  -0.7295  -0.5753  -0.3567   2.8493  
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                  -0.451106   0.119786  -3.766 0.000166 ***
## Age18-25                     -0.630830   0.054102 -11.660  < 2e-16 ***
## Age26-35                     -0.746872   0.053879 -13.862  < 2e-16 ***
## Age36-45                     -0.594042   0.054874 -10.826  < 2e-16 ***
## Age46-50                     -0.399837   0.057825  -6.915 4.69e-12 ***
## Age51-55                     -0.706676   0.059132 -11.951  < 2e-16 ***
## Age55+                       -0.754900   0.064031 -11.790  < 2e-16 ***
## Occupation1                   0.526159   0.024872  21.154  < 2e-16 ***
## Occupation10                 -0.317283   0.058372  -5.436 5.46e-08 ***
## Occupation11                 -0.834332   0.056598 -14.741  < 2e-16 ***
## Occupation12                 -0.983892   0.036673 -26.829  < 2e-16 ***
## Occupation13                 -0.326728   0.063643  -5.134 2.84e-07 ***
## Occupation14                 -0.102359   0.031720  -3.227 0.001251 ** 
## Occupation15                 -0.381789   0.045662  -8.361  < 2e-16 ***
## Occupation16                 -0.551684   0.037008 -14.907  < 2e-16 ***
## Occupation17                 -1.100959   0.033920 -32.458  < 2e-16 ***
## Occupation18                 -2.233634   0.129251 -17.281  < 2e-16 ***
## Occupation19                 -0.070257   0.052481  -1.339 0.180659    
## Occupation2                   0.312357   0.030528  10.232  < 2e-16 ***
## Occupation20                  0.100323   0.029399   3.413 0.000644 ***
## Occupation3                   0.961197   0.033347  28.824  < 2e-16 ***
## Occupation4                  -0.015846   0.025173  -0.629 0.529036    
## Occupation5                  -0.532791   0.048520 -10.981  < 2e-16 ***
## Occupation6                   0.706952   0.032298  21.888  < 2e-16 ***
## Occupation7                  -0.536803   0.026982 -19.895  < 2e-16 ***
## Occupation8                  -0.069428   0.104916  -0.662 0.508130    
## Occupation9                   3.813864   0.098167  38.851  < 2e-16 ***
## City_CategoryB                0.014184   0.015790   0.898 0.369031    
## City_CategoryC                0.082444   0.016760   4.919 8.70e-07 ***
## Stay_In_Current_City_Years1   0.149604   0.020075   7.452 9.17e-14 ***
## Stay_In_Current_City_Years2   0.063854   0.022375   2.854 0.004320 ** 
## Stay_In_Current_City_Years3   0.118042   0.022648   5.212 1.87e-07 ***
## Stay_In_Current_City_Years4+ -0.001541   0.023766  -0.065 0.948299    
## Marital_Status1               0.039614   0.013571   2.919 0.003512 ** 
## Product_Category_110          0.081859   0.066896   1.224 0.221073    
## Product_Category_111          0.152559   0.063745   2.393 0.016700 *  
## Product_Category_112          0.739195   0.174957   4.225 2.39e-05 ***
## Product_Category_113          0.397854   0.076029   5.233 1.67e-07 ***
## Product_Category_115          0.103529   0.253418   0.409 0.682885    
## Product_Category_12           0.270130   0.033774   7.998 1.26e-15 ***
## Product_Category_13           0.458805   0.046964   9.769  < 2e-16 ***
## Product_Category_14           0.402208   0.041020   9.805  < 2e-16 ***
## Product_Category_15           0.366383   0.024645  14.866  < 2e-16 ***
## Product_Category_16           0.044848   0.040767   1.100 0.271283    
## Product_Category_18           0.414952   0.034611  11.989  < 2e-16 ***
## Product_Category_211         -0.226499   0.072892  -3.107 0.001888 ** 
## Product_Category_212         -0.010887   0.089249  -0.122 0.902915    
## Product_Category_213         -0.089440   0.076429  -1.170 0.241903    
## Product_Category_214          0.136404   0.070652   1.931 0.053528 .  
## Product_Category_215         -0.350711   0.071227  -4.924 8.49e-07 ***
## Product_Category_216         -0.381303   0.121723  -3.133 0.001733 ** 
## Product_Category_22          -0.170564   0.068209  -2.501 0.012398 *  
## Product_Category_23          -0.466092   0.104643  -4.454 8.42e-06 ***
## Product_Category_24          -0.114991   0.077168  -1.490 0.136186    
## Product_Category_25          -0.118687   0.070430  -1.685 0.091956 .  
## Product_Category_26          -0.381790   0.069964  -5.457 4.84e-08 ***
## Product_Category_28          -0.113639   0.063812  -1.781 0.074939 .  
## Product_Category_29          -0.331708   0.080540  -4.119 3.81e-05 ***
## Product_Category_311         -0.304427   0.097705  -3.116 0.001835 ** 
## Product_Category_312         -0.126205   0.080745  -1.563 0.118049    
## Product_Category_313         -0.120370   0.081995  -1.468 0.142100    
## Product_Category_314          0.122163   0.076548   1.596 0.110510    
## Product_Category_315         -0.447446   0.075579  -5.920 3.21e-09 ***
## Product_Category_316         -0.242341   0.075961  -3.190 0.001421 ** 
## Product_Category_317         -0.382615   0.079068  -4.839 1.30e-06 ***
## Product_Category_318         -0.433827   0.084958  -5.106 3.28e-07 ***
## Product_Category_33          -0.481313   0.138082  -3.486 0.000491 ***
## Product_Category_34          -0.008696   0.084114  -0.103 0.917661    
## Product_Category_35          -0.139931   0.078512  -1.782 0.074703 .  
## Product_Category_36          -0.403305   0.086012  -4.689 2.75e-06 ***
## Product_Category_38          -0.072274   0.078784  -0.917 0.358946    
## Product_Category_39          -0.214293   0.079272  -2.703 0.006866 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 178032  on 166820  degrees of freedom
## Residual deviance: 162019  on 166749  degrees of freedom
## AIC: 162163
## 
## Number of Fisher Scoring iterations: 5

Se observa que casi todas las variables son estadísticamente significativas, por lo que tienen un efecto la variable de respuesta (Genero); el estado civil y otras categorías de las variables como ocupación y edad también resultan no ser estadísticamente significativas, cabe recordar que R lo que hace es crear variables de diseño para aquellas variables categóricas, por lo cual cada categoría queda como una variable de diseño o dummy, y es acá justamente donde se hace más claro a lo que me refiero con que algunas categorías de las variables resultan no ser significativas.

En anterior resumen se observan las estimaciones de máxima verosimilitud de los coeficientes del modelos, llamémoslos betas, es con estos coeficientes que vamos a hacer predicciones del género y a observar el poder de predicción de nuestro algoritmo.

Miremos un poco el poder de predicción del modelo ajustado probando el conjunto de datos test y mediante una matrix de conflicto observar la tasa de error.

##Clasificacion de los individuos de el set de datos test en el modelo construido Aprendizaje##
 ##etiquetar los resultados de la variable genero como 1 y 0##
datostest2$Gender <- factor(datostest2$Gender,levels = c("M","F"),labels = c("1", "0"))
Prediccion <- round(predict(Aprendizaje, newdata =datostest2, type = "response"))
MC <- data.frame(table(datostest2[, "Gender"],Prediccion))   # Matriz de Confusión
names (MC) = c("Valor verdadero","Prediccion","Conteo")
MC

Se observa que las predicciones hechas por el modelo no son tan eficientes, como propuesta a mejorarlo sería ir sacando aquellas variables y categorías de variables que no tienen significancia estadística, a continuación se mostrara una medida de desempeño tanto en los datos train como el los datos test.

##Promedio de predicciones en los datos de test##
logit.predictions1 <- ifelse(Prediccion > 0, 1, 0)
mean(with(datostest2, logit.predictions1 ==Gender))
## [1] 0.2161972
#Promedio de predicciones en los datos del test##
logit.predictions <- ifelse(predict(Aprendizaje) > 0, 1, 0)
mean(with(datostrain2, logit.predictions ==Gender))
## [1] 0.2144634

Lo anterior quiere decir que mi modelo solo acertó aproximadamente el 21% de las predicciones en ambos sets de datos (train y test). la tasa de falsos negativos es alto y a diferencia de la de falsos positivos que es aproximadamente del 8%, es decir el modelo es bueno prediciendo en elgrupo de mujeres.

library(ROCR)
## Loading required package: gplots
## 
## Attaching package: 'gplots'
## The following object is masked from 'package:stats':
## 
##     lowess
grocr <- prediction(as.numeric(logit.predictions1), as.numeric(datostest2$Gender))
datos <- performance(grocr, "tpr", "fpr")
plot(datos)

del grafico anterior se puede inferir que el modelo no posee un buen rendimiento,como ya habiamos mencionado anteriormente, la line trazada esta muy cerca a la linea diagonal, lo cualquiere decir que esta dejando muchos puntos por debajo de la diagonal, es decir los esta clasificando mal.