7 Clusterización
Una de las cosas interesantes sobre la posibilidad de hacer Inteligencia de Negocios (BI por sus siglas en ingles – Business Intelligence) es que nos permite discubrir patrones no visibles en primera instancia, pero que ayudan a preguntarnos ¿por qué sucede esto?. En esta serie de ejercicios teóricos, además de familiarizarnos con el lenguaje R-Cran y su uso en clusters, trataremos de ver como podemos valernos de las bondades del entorno de trabajo para responder a esas preguntas.
Hasta ahora tenemos claro temas referidos al concepto estadísticos clásicos (monovariados), y hemos insinuado algo sobre las estructuras de los entornos multivariados.
Tanto sea para empresas industriales o de servicios en las que sus sistemas de información abarquen los campos de medición y administración de la estrategia o el aspecto operativo; es de crucial importancia determinar los niveles en los que las variables que representan a las perspectivas tengan claramente establecidas sus franjas de flotación. En otras palabras debemos sentar las bases para construir un Cuadro de mando o tablero de control, que no es sólo hacer que luces rojas amarillas y verdes se enciendan en un semáforo, sino tener relevancia para la toma de decisión sobre lo que los datos nos aportan.
Utilizaremos una base de datos ficticia (cualquier semejanza con la realidad es pura coincidencia).
https://ceal.ingenieria.uncuyo.edu.ar/r-cran/BSC_proveedores.csv
En ella se ha realizado un estudio sobre varias empresas que son contratistas o proveedores de servicios de alto valor agregado de grandes compañías constructora. Se ha indagado el desempeño de unos 150 contratistas según cuatro dimensiones o indicadores del BSC.
7.0.1 Carga de datos desde archivos externos
Si bien sería posible cargar datos a mano en R-CRAN, no sería práctico hacer lo así. Todos los datos que se utilizan en este entorno de trabajo se manejan internamente como matrices. Estas matrices de datos (semejantes a bases de datos) se llaman data-frames.
Un data frame podría ser una matriz de una fila por una columna así por ejemplo
> X <-200 ;
> Y= 20 ;
> Y= X+Z
Intente carga dos dataframes a y b con valores numéricos y realizamos la suma de ambos como se muestra en el código.
Esto nos permitiría usar R-CRAN como si se tratase de una calculadora.
7.1 Captura de datos
Cargando datos desde la línea de comando
Ejecute los comandos "scan()" y luego tipee los números separados por <Enter>.
Para finalizar la carga tipee dos veces
7.1.1 ¿Desde dónde podemos cargar datos?
Uno de los requisitos para poder cargar datos es que sepamos en que carpeta estamos trabajando. En este ejercicio veremos como hacer para saber donde estamos parados.
getwd()
## [1] "/media/rpalma/OS/AAA_Datos/2020/Posgrado/Di3/ADI_TD/Analitica_Datos_Industriales"
Puedes cambiar tu carpeta (directorio) de trabajo con el comando setwd()
Debes poner entre comillas lo que va dentro del paréntesis
Prepare un archivo en excel y guardelo con formato csv "comma separated values" para capturarlo desde R-CRAN.
7.1.2 Revisión de Datos Ejemplo
Con los siguientes comando importaremos una planilla generada con una hoja de cálculo que contiene las 150 respuestas de las encuestas que se realizaron
library(readr)
BSC_proveedores <- read_csv("~/BSC_proveedores.csv")
## Parsed with column specification:
## cols(
## PK = col_double(),
## Rec_Humano = col_double(),
## Tecnologia = col_double(),
## Capital = col_double(),
## Equipo = col_double(),
## Empresa = col_character()
## )
Podemos ver el contenido del dataframe BSC_Proveedores que se llama igual que el archivo de texto separado por comas. Para ello ejecutamos el siguiente comando.
BSC_proveedores [c(1:5 ,70:73, 126:129) ,]
## # A tibble: 13 x 6
## PK Rec_Humano Tecnologia Capital Equipo
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 5.1 3.5 1.4 0.2
## 2 2 4.9 3 1.4 0.2
## 3 3 4.7 3.2 1.3 0.2
## 4 4 4.6 3.1 1.5 0.2
## 5 5 5 3.6 1.4 0.2
## 6 70 5.6 2.5 3.9 1.1
## 7 71 5.9 3.2 4.8 1.8
## 8 72 6.1 2.8 4 1.3
## 9 73 6.3 2.5 4.9 1.5
## 10 126 7.2 3.2 6 1.8
## 11 127 6.2 2.8 4.8 1.8
## 12 128 6.1 3 4.9 1.8
## 13 129 6.4 2.8 5.6 2.1
## # … with 1 more variable: Empresa <chr>
7.2 Análisis Exploratorio
Si quisiésemos ver el desempeño respecto a la variable TECNOLOGÍA tendríamos que interponer entre el nombre del dataset el signo pesos y luego el nombre de la columna
BSC_proveedores [c(1:5 ,70:73, 126:129) ,]
## # A tibble: 13 x 6
## PK Rec_Humano Tecnologia Capital Equipo
## <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 1 5.1 3.5 1.4 0.2
## 2 2 4.9 3 1.4 0.2
## 3 3 4.7 3.2 1.3 0.2
## 4 4 4.6 3.1 1.5 0.2
## 5 5 5 3.6 1.4 0.2
## 6 70 5.6 2.5 3.9 1.1
## 7 71 5.9 3.2 4.8 1.8
## 8 72 6.1 2.8 4 1.3
## 9 73 6.3 2.5 4.9 1.5
## 10 126 7.2 3.2 6 1.8
## 11 127 6.2 2.8 4.8 1.8
## 12 128 6.1 3 4.9 1.8
## 13 129 6.4 2.8 5.6 2.1
## # … with 1 more variable: Empresa <chr>
Repita todo el prceso con el resto de la dimensiones NORMA, CAPITAL, EQUIPO, EMPRESA.
7.3 Historgramas Análisis de Histograma
Veremos como se comportan las muestras (contratistar) utilizando el histograma
hist(BSC_proveedores$Tecnologia)
El gráfico nos muestra que hay dos grupos de contratistas (casi 29 ocurrencias en cada uno) con un desempeño de 6 en la variable TECNOLOGÍA . La escala original era de 1 a 10.
Utilizaremos el comando par() que permite dividir el área de ploteo en una matriz especificada por el comando Numero de Columna (nmfrow)
Haga las interpretaciones de estos gráficos.
** Particionado del área de impresión
par(mfrow=c(2,2))
hist(BSC_proveedores$Tecnologia)
hist(BSC_proveedores$Rec_Humano)
hist(BSC_proveedores$Capital)
hist(BSC_proveedores$Equipo)
7.4 Gráficos de Densidad
Algunas personas prefieren utilizar la envolvente del histograma que es el gráfico de densidad
<
par(mfrow=c(1,1))
plot(density(BSC_proveedores$Equipo))
par(mfrow=c(2,2))
plot(density(BSC_proveedores$Tecnologia))
plot(density(BSC_proveedores$Rec_Humano))
plot(density(BSC_proveedores$Capital))
plot(density(BSC_proveedores$Equipo))
Algunas de estas gráficas ya nos muestran que existen ciertas diferencias entre las contratistas, es como si hubiese diferentes campanas de Gauss que agrupan a las diferentes muestras.
7.5 Gráficas Ralas y Análisis Multivariado
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:boot':
##
## logit
## The following object is masked from 'package:psych':
##
## logit
BSC_Rawdata <- BSC_proveedores[ ,c(2,3,4,5)]
BSC_Rawdata
## # A tibble: 150 x 4
## Rec_Humano Tecnologia Capital Equipo
## <dbl> <dbl> <dbl> <dbl>
## 1 5.1 3.5 1.4 0.2
## 2 4.9 3 1.4 0.2
## 3 4.7 3.2 1.3 0.2
## 4 4.6 3.1 1.5 0.2
## 5 5 3.6 1.4 0.2
## 6 5.4 3.9 1.7 0.4
## 7 4.6 3.4 1.4 0.3
## 8 5 3.4 1.5 0.2
## 9 4.4 2.9 1.4 0.2
## 10 4.9 3.1 1.5 0.1
## # … with 140 more rows
scatterplotMatrix(BSC_Rawdata)
Este tipo de análisis multivariado nos permite construir una matriz de gráficas que en la diagonal principal nos muestra los ya conocidos gráficos de densidad. Luego cada una de las otras intersecciones nos señala si existe algún tipo de correlación montónica (creciente o decreciente) entre las variables analizadas. Esto es importante, pues a priori no sabemos si las dimensiones que estamos usando tienen o no relación entre ellas. En otras palabras si las dimensiones o metas tienen correlación quiere decir que podríamos prescindir de una de ellas. Así capital y equipo parecen a priori tener alta linealidad en su correlación.
Notar también las líneas de puntos que nos marcan el intervalo de confianza que podríamos tener sobre esa variable. Es justamente ese margen el que nos perite establecer la franja de flotación que motiva el paso de verde a amarillo. Si se desplazase a tres veces la varianza estaríamos en rojo.
7.6 Mínimo numero de dimensiones
Cuándo nos enfrentamos a situaciones como esta, suele ocurrir que al definir los indicadores nos encontramos con el dilema del gran volumen de datos. Esto no es un problema que provenga tan solo del número de casos que estudiamos con el objeto de conocer el recorrido de una variable, sino más bien por la gran cantidad de variables o calificadores con los que los definimos o estudiamos. Ya vimos en el caso anterior como dimensiones o variables que tienen distinto nombre no son en realidad más que la misma cosa. En el ejemplo anterior la pregunta era si podríamos prescindir de una variable. En este ejercicio trataremos de ver cuantas podemos eliminar. La consigna es Mientras menos variables mejor, y la restricción que impondremos será la de perder variables siempre que podamos seguir describiendo con alto nivel de confianza el comportamiento de todos los casos. Otra mirada sobre el problema podría enunciarse así. “Como puedo saber que valores o recorrido le impondría a la mínima cantidad de variables para calificar como candidato interesante en la nómina de contratistas de las grandes empresas constructoras”.
Para auxilio en este problema utilizaremos el Método de Análisis de Componentes Principales. En este caso y al igual que en el caso anterior usaré un subconjunto de datos (sólo los numéricos) y en especial la matriz de correlación. Esta matriz está armada con las pendientes de las aproximaciones lineales de las rectas del gráfico de densidades.
Las técnicas que usaremos pretenden desde sus diferentes enfoques abrodar el problema de simplificar la interpretación del comportamiento individual y colectivo de los casos (empresas constructoras y contratista) y como podemos valernos del proceso de ingeniería inversa para mover los controles de nuestra “nave” en el tablero de comando con el que fijaremos la altura de la vara del tablero de control.
7.7 Análisis de Componentes Principales
Crearemos un objeto nuevo que se llamará PC1 (por Principal Component 1) y la instrucción con el que crearemos la matriz de correlaciones es princomp.
PC1 <- princomp(BSC_Rawdata)
PC1
## Call:
## princomp(x = BSC_Rawdata)
##
## Standard deviations:
## Comp.1 Comp.2 Comp.3 Comp.4
## 2.0494032 0.4909714 0.2787259 0.1538707
##
## 4 variables and 150 observations.
plot(PC1)
En el ploteo podemos ver que uno de los componentes principales aporta casi el 4 veces más de la información referida al comportamiento de la varianza de todos los casos. Este componente es el que más incluye en la clasificación o posible identificación del comportamiento de cada individuo de la muestra.
<
summary(PC1)
## Importance of components:
## Comp.1 Comp.2
## Standard deviation 2.0494032 0.49097143
## Proportion of Variance 0.9246187 0.05306648
## Cumulative Proportion 0.9246187 0.97768521
## Comp.3 Comp.4
## Standard deviation 0.27872586 0.153870700
## Proportion of Variance 0.01710261 0.005212184
## Cumulative Proportion 0.99478782 1.000000000
Si observamos bien el reporte que nos entrega el comando summary nos podemos dar cuenta que con los dos primeros componentes podríamos explicar 97.768521% del comportamiento de las muestras de la población. En nuestro caso del total de empresas contratistas analizadas.
¿Qué pasaría si representamos a las empresas en un gŕafico en el que las variables de los ejes sean los dos componentes principales? , pues tendríamos un primer indicio de la bondad de las dimensiones o variables para agrupar a las muestras Esto lo podemos realizar con el comando bilot
biplot(PC1)
Los ńumeros que aparecen el el diagrama son el caso de estudio (renglón en que se encuentra la empresa contratista). A simple vista observamos que hay como tres tipos distintos empresas (tres nubes claramente diferenciadas). Aquí nos queda claro que el principal componente que ordena o divide a estas colonias es indistintamente el CAPITAL o el EQUIPAMIENTO con que cuentas.
También podemos ver que hay empresas como la 15, 16, 132, 118, 61, 107 sobre las que el gráfico nos recomienda estudiarlas más pues no es capaz de clasificarlas bien (son casos extremos o anómalos). Tal vez con poco capital o sin equipo pueden llegar a ser competitivas o interesantes para las grandes constructoras.
Por último la dimensión referida a la cetificación de NORMAS es la dimensión que menos valor aporta. Esto no implica que no certificar sea poco importante, sino que probablemente sea una pregunta irrelevante si todos contestaron que SI certificaron ISO 9000.