Preprocesamiento de los Datos

Generalmente, cuando recibimos un conjunto de datos, además de encontrar valores numéricos, en la mayoría de las ocasiones debemos trabajar con datos no estructurados, que son aquellos datos que no se rigen por un esquema determinado, como pueden ser los textos, imágenes, vídeos, etc.

El realizar un preprocesamiento de los datos es importante para poder sacar el mejor provecho a los datos provenientes de los clientes, de los productos financieros, los canales de distribución y las jurisdicciones que son susceptibles de análisis; pues la realidad es que muchas veces la información de estos se ve afectada por factores negativos como: ruidos, valores perdidos, inconsistencias, datos superfluos y/o un tamaño muy grande de datos en cualquier dimensión (número de variables en registros).

Inicialmente se va a reducir el numero de columnas usando ACP. Se va a trabajar con todas las variables excepto la variable "Calificación" que es la variable sobre la cual se basa el estudio.

ACP

El análisis de componentes principales es una técnica utilizada para describir un conjunto de datos en términos de nuevas variables («componentes») no correlacionadas. Los componentes se ordenan por la cantidad de varianza original que describen, por lo que la técnica es útil para reducir la dimensionalidad de un conjunto de datos. El ACP se emplea sobre todo en análisis exploratorio de datos y para construir modelos predictivos. El ACP comporta el cálculo de la descomposición en autovalores de la matriz de covarianza, normalmente tras centrar los datos en la media de cada atributo. Entonces con el siguiente código se va a visualizar parte de la matriz de datos:

library(readxl)

data<-read_excel("A.xlsx")
head(data,5)
## # A tibble: 5 x 17
##   `Invoice ID` Branch City  `Customer type` Gender `Product line` `Unit price`
##   <chr>        <chr>  <chr> <chr>           <chr>  <chr>          <chr>       
## 1 750-67-8428  A      Yang~ Member          Female Health and be~ 74.69       
## 2 226-31-3081  C      Nayp~ Normal          Female Electronic ac~ 15.28       
## 3 631-41-3108  A      Yang~ Normal          Male   Home and life~ 46.33       
## 4 123-19-1176  A      Yang~ Member          Male   Health and be~ 58.22       
## 5 373-73-7910  A      Yang~ Normal          Male   Sports and tr~ 86.31       
## # ... with 10 more variables: Quantity <dbl>, `Tax 5%` <chr>, Total <chr>,
## #   Date <chr>, Time <dttm>, Payment <chr>, cogs <chr>, `gross margin
## #   percentage` <dbl>, `gross income` <chr>, Rating <chr>

A continuación vamos a ver los "NA" que hay en la data:

library(Rcpp)
library(readxl)
library(Amelia)
## ## 
## ## Amelia II: Multiple Imputation
## ## (Version 1.7.6, built: 2019-11-24)
## ## Copyright (C) 2005-2020 James Honaker, Gary King and Matthew Blackwell
## ## Refer to http://gking.harvard.edu/amelia/ for more information
## ##
data<-read_excel("A.xlsx")
View(data)
missing(data)
## [1] FALSE

Con lo cual no existen "NA" en los datos, lo cual era esperable, ya que se la saco del Kaggle.

Exclusion de la variable en estudio

Entonces se va a quitar la variable "calificación":

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,-17]
colnames(data)
##  [1] "Invoice ID"              "Branch"                 
##  [3] "City"                    "Customer type"          
##  [5] "Gender"                  "Product line"           
##  [7] "Unit price"              "Quantity"               
##  [9] "Tax 5%"                  "Total"                  
## [11] "Date"                    "Time"                   
## [13] "Payment"                 "cogs"                   
## [15] "gross margin percentage" "gross income"

Correlación entre variable:

Ahora para realizar la correlación se tomaron las variables numéricas:

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,c(-1,-2,-3,-4,-5,-6,-12,-11,-12,-13,-15,-17)]
View(data)
data<-cbind(as.numeric(data$`Unit price`),
        as.numeric(data$Quantity),
        as.numeric(data$`Tax 5%`),
        as.numeric(data$Total),
        as.numeric(data$cogs),
        as.numeric(data$`gross income`)
)
library(corrplot)
## corrplot 0.84 loaded
corrplot(cor(data))

Con lo cual la tercera, la cuarta y la sexta variable están altamente correlacionadas.

Matriz de Covarianzas

Entonces la matriz de covarianzas viene definida como:

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,c(-1,-2,-3,-4,-5,-6,-11,-12,-13,-15,-17)]
data<-cbind(as.numeric(data$`Unit price`),
        as.numeric(data$Quantity),
        as.numeric(data$`Tax 5%`),
        as.numeric(data$Total),
        as.numeric(data$cogs),
        as.numeric(data$`gross income`)
)
cov(data)
##              [,1]         [,2]         [,3]         [,4]         [,5]
## [1,] 7.019653e+02 8.347785e-01 5.112948e+05 1.069345e+07 3.933367e+03
## [2,] 8.347785e-01 8.546446e+00 5.024463e+04 1.050144e+06 4.829914e+02
## [3,] 5.112948e+05 5.024463e+04 5.893190e+09 1.237111e+11 6.200922e+06
## [4,] 1.069345e+07 1.050144e+06 1.237111e+11 2.597137e+12 1.298967e+08
## [5,] 3.933367e+03 4.829914e+02 6.200922e+06 1.298967e+08 5.483864e+04
## [6,] 5.112948e+05 5.024463e+04 5.893190e+09 1.237111e+11 6.200922e+06
##              [,6]
## [1,] 5.112948e+05
## [2,] 5.024463e+04
## [3,] 5.893190e+09
## [4,] 1.237111e+11
## [5,] 6.200922e+06
## [6,] 5.893190e+09

Valores y Vectores Propios

Con lo cual se va a calcular los valores y vectores propios:

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,c(-1,-2,-3,-4,-5,-6,-12,-11,-12,-13,-15,-17)]
View(data)
data<-cbind(as.numeric(data$`Unit price`),
        as.numeric(data$Quantity),
        as.numeric(data$`Tax 5%`),
        as.numeric(data$Total),
        as.numeric(data$cogs),
        as.numeric(data$`gross income`)
)
eigen(cor(data))
## eigen() decomposition
## $values
## [1] 3.460439e+00 1.496630e+00 9.861383e-01 5.675246e-02 3.975352e-05
## [6] 5.186213e-17
## 
## $vectors
##            [,1]       [,2]        [,3]         [,4]         [,5]          [,6]
## [1,] -0.2442146  0.3723866  0.76266117 -0.469067791  0.003282690  0.000000e+00
## [2,] -0.2372746  0.5040208 -0.64432683 -0.523921540  0.003596035  1.407232e-16
## [3,] -0.5054313 -0.2774334 -0.02830660 -0.005985389 -0.408329285 -7.071068e-01
## [4,] -0.5052196 -0.2782949 -0.02841004  0.001623252  0.816391627  3.834746e-13
## [5,] -0.3433533  0.6131106  0.02795018  0.710920067 -0.003923625  6.695416e-16
## [6,] -0.5054313 -0.2774334 -0.02830660 -0.005985389 -0.408329285  7.071068e-01

Grafico de Sedimentación

El gráfico de sedimentación se obtiene al representar en las ordenadas las raíces características y en abscisas los números de las componentes principales correspondientes a cada raíz característica en orden decreciente.

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,c(-1,-2,-3,-4,-5,-6,-12,-11,-12,-13,-15,-17)]
d<-as.numeric(data$`Unit price`)
data<-cbind(as.numeric(data$`Unit price`),
        as.numeric(data$Quantity),
        as.numeric(data$`Tax 5%`),
        as.numeric(data$Total),
        as.numeric(data$cogs),
        as.numeric(data$`gross income`)
)
library(psych)
#data<-matrix(1,34,34)
#scree((data),main ="Grafico_de_Sedimentacion")
fa.parallel(data,fa="pc")
## Warning in cor.smooth(R): Matrix was not positive definite, smoothing was done

## Warning in cor.smooth(R): Matrix was not positive definite, smoothing was done

## Warning in cor.smooth(R): Matrix was not positive definite, smoothing was done
## Warning in cor.smooth(r): Matrix was not positive definite, smoothing was done

## Warning in cor.smooth(r): Matrix was not positive definite, smoothing was done

## Parallel analysis suggests that the number of factors =  NA  and the number of components =  2

Entonces la mejor opción es tomar 2 componentes, puesto que este valor se encuentra por encima de la línea aceptable de la grafica .

Realización de las Componentes

Se usa la función “prcomp” la cual realiza un análisis de componentes principales en la matriz de datos y devuelve los resultados como un objeto:

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,c(-1,-2,-3,-4,-5,-6,-12,-11,-12,-13,-15,-17)]
d<-as.numeric(data$`Unit price`)
data<-cbind(as.numeric(data$`Unit price`),
        as.numeric(data$Quantity),
        as.numeric(data$`Tax 5%`),
        as.numeric(data$Total),
        as.numeric(data$cogs),
        as.numeric(data$`gross income`)
)
summary(prcomp(data, scale=TRUE,center = TRUE))
## Importance of components:
##                           PC1    PC2    PC3     PC4      PC5       PC6
## Standard deviation     1.8602 1.2234 0.9930 0.23823 0.006305 5.895e-16
## Proportion of Variance 0.5767 0.2494 0.1644 0.00946 0.000010 0.000e+00
## Cumulative Proportion  0.5767 0.8262 0.9905 0.99999 1.000000 1.000e+00

De esta manera se tiene que las dos primeras componentes muestran el 0.8262 del porcentaje de la varianza, note se que tomando la tercera componente tenemos el 0.9905, por lo cual consideramos también la tercera componente.

Gráfico de la data en cada componente

Se analiza el porcentaje de la data que existe en cada variable:

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,c(-1,-2,-3,-4,-5,-6,-12,-11,-12,-13,-15,-17)]
d<-as.numeric(data$`Unit price`)
data<-cbind(as.numeric(data$`Unit price`),
        as.numeric(data$Quantity),
        as.numeric(data$`Tax 5%`),
        as.numeric(data$Total),
        as.numeric(data$cogs),
        as.numeric(data$`gross income`)
)
componentes_cli<-prcomp(data, scale=TRUE,center = TRUE)
plot(componentes_cli)

Se tiene que en las tres primeras variables se concentra una gran cantidad de data.

Gráfica de las Componentes

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,c(-1,-2,-3,-4,-5,-6,-12,-11,-12,-13,-15,-17)]
d<-as.numeric(data$`Unit price`)
data<-cbind(as.numeric(data$`Unit price`),
        as.numeric(data$Quantity),
        as.numeric(data$`Tax 5%`),
        as.numeric(data$Total),
        as.numeric(data$cogs),
        as.numeric(data$`gross income`)
)
componentes_cli<-prcomp(data, scale=TRUE,center = TRUE)
biplot(componentes_cli, scale=0.5)

Extracción de las Componentes:

library(readxl)
library(Amelia)

data<-read_excel("A.xlsx")
data<-data[,c(-1,-2,-3,-4,-5,-6,-12,-11,-12,-13,-15,-17)]

data<-cbind(as.numeric(data$`Unit price`),
        as.numeric(data$Quantity),
        as.numeric(data$`Tax 5%`),
        as.numeric(data$Total),
        as.numeric(data$cogs),
        as.numeric(data$`gross income`)
)
View(data)
componentes_cli<-prcomp(data, scale=TRUE,center = TRUE)
componentes_principales<-componentes_cli$x
componentes_principales<-data[,1:3]
head(componentes_principales,5)
##       [,1] [,2]      [,3]
## [1,] 74.69    7 261415.00
## [2,] 15.28    5      3.82
## [3,] 46.33    7 162155.00
## [4,] 58.22    8  23288.00
## [5,] 86.31    7 302085.00

Obtenemos como resultado de la aplicación de ACP las tres componentes que corresponden a Unit Price, Quantity y Tax 5%.

Conclusiones

El Análisis de Componentes Principales (ACP) nos ayuda a reducir la dimensión de la data, es decir el número de variables en los datos, siempre que se trabaje con variables no incorreladas, pues las componentes que se generan tienen la misma dimensión que en el caso de que se trabajara con variables numéricas, y de mayor dimensión que las variables originales si trabajáramos con variables del tipo categóricas.