0.1 Clusterização K-MEANS.

0.1.1 Problema de Negócio

Em busca de solucionar os problemas da área de recursos humanos de uma empresa, foi disponibilizado uma base de dados com 220 funcionários. Contendo os Indivíduos, salario, posição e sexo. O time de RH solicitou a revisão das regras da PLR dos funcionários dessa empresa, e foi proposto uma análise de cluster para a divisão mais justa possível.
Quantos colaboradores possuem em cada cluster?



Nesse artigo foi construída uma analise de Cluster K-MEANS, utilizando o método Elbow.

Carregando pacotes

library(ggplot2)
library(dplyr)
library(knitr)
library(rmarkdown)
library(readxl)
library(kableExtra)
library(factoextra)
library(gridExtra)

Carregando banco de dados

dados <- read_excel("~/Bases/atv1.xlsx")
kable(head(dados, 10), col.names = c("Indivíduo", "Salário", "Posisão",
                                  "Anos de Experiência","Sexo")) %>%
  kable_styling(full_width = F, bootstrap_options = c("striped", "hover", "condensed", "responsive"))
Indivíduo Salário Posisão Anos de Experiência Sexo
1 148 7 16.7 1
2 165 7 6.7 1
3 145 5 14.8 1
4 139 7 13.9 0
5 142 6 6.4 0
6 144 5 9.1 1
7 128 3 8.5 0
8 143 6 18.2 1
9 157 7 13.0 1
10 150 7 21.6 1

0.1.2 K-MEANS

Existem diferentes tipos de grupos ou cluster e cada um é adequado para um determinado cenário.O K-means é um algoritmo do tipo não supervisionado, ou seja, que não trabalha com dados rotulados.O objetivo desse algoritmo é encontrar similaridades entre os dados e agrupá-los conforme o número de cluster passado pelo argumento k. O algoritimo calcula a distancia entre dois ponto, utilizando a distancia euclidiana.

A distância Euclidiana é a distância mais conhecidas dentre as métricas. Essa distância é a menor distância entre dois pontos no \(R^n\), que pode ser representada pela hipotenusa, observada no Teorema de Pitágoras. A distancia Euclidiana é definida por:

\[ d_E(x,y) =\sqrt{(x_1-y_1)^2+...+(x_n-y_n)^2}=\sqrt{{\sum_{i=1}^n}(x_i-Y_i)^2} \]

0.1.3 Calculando o wws


Importante retirar a coluna dos individuos antes de fazer a análise, caso não seja retirada o cluster ira computar essa coluna como parte da análise.

dados.quanti <- dados [,-1] 

WSS é a distância total dos pontos de dados de seus respectivos centróides do cluster

k.max <- 15
data <- dados.quanti
wss <- sapply(1:k.max,function(k){kmeans(data, k, nstart=50,
                                 iter.max = 15)$tot.withinss})
wss
##  [1] 41036.696 17268.646 11577.494  8867.078  6909.456  5806.782  5011.212
##  [8]  4410.778  3905.900  3401.095  3051.005  2719.358  2514.171  2316.940
## [15]  2170.172

0.1.4 Visualizando o wss

0.1.5 Método de agrupamento Elbow

O método elbow é conhecido como método do cotovelo. Basicamente o que o método faz é testar a variância dos dados em relação ao número de clusters. Podemos ver esse “cotovelo” quando plotamos seus resultados em um gráfico.

A partir do valor indicado pelo “cotovelo” no gráfico significa que não existe ganho em relação ao aumento de clusters.

0.1.6 Visualizando o Cotovelo

Para determinar o número ótimo de clusters da classificação, antes de rodar a função kmeans(), é possível utilizar a função fviz_nbclust() do pacote factoextra. Desta forma, utilizando a noção da soma dos quadrados intra cluster é possível verificar que o número ótimo de clusters para a amostra é 3. Isto porque novos clusters acima de 3 possuem baixo ganho para aumentar a diferenciação dos demais.

fviz_nbclust(data, kmeans, method = "wss")+
    geom_vline(xintercept = 3, linetype = 2)

0.1.7 Solução do problema de negócio

Em seguida utilizamos o número determinado de clusters (neste caso 3) com o comando kmeans.Como resultado temos a média dos centros por clusters e a classificação de cada individuo da amostra dentro do respectivo cluster. Observa-se que o cluste 1 tem 95 Indivíduos, o cluster 2 tem 65 Indivíduos e o cluster 3 possui 60 Indivíduos.

set.seed(123)
km.res=kmeans(data, 3, nstart=25)
print(km.res)
## K-means clustering with 3 clusters of sizes 95, 65, 60
## 
## Cluster means:
##    salario  posicao anosexperiencia      sexo
## 1 143.7263 5.094737        9.845263 0.6000000
## 2 127.8615 3.230769        8.358462 0.5846154
## 3 157.7667 7.016667       13.778333 0.8333333
## 
## Clustering vector:
##   [1] 1 3 1 1 1 1 2 1 3 3 2 2 2 3 2 3 2 1 1 1 1 1 1 1 2 1 2 1 1 2 2 3 2 3 3 2 1
##  [38] 2 3 3 1 3 3 1 2 2 1 2 3 1 3 1 1 1 2 1 1 1 1 2 1 2 3 1 1 2 2 2 1 1 3 3 3 1
##  [75] 2 3 2 3 2 1 1 1 2 1 1 3 1 1 1 2 1 3 3 3 1 3 2 1 2 1 2 3 2 3 1 1 2 2 1 2 1
## [112] 1 1 1 2 3 3 2 1 2 1 2 1 3 3 2 2 3 1 3 2 3 2 1 1 1 1 1 2 3 2 1 1 2 1 1 1 3
## [149] 2 3 3 1 1 1 1 3 2 1 3 1 2 1 3 3 2 3 3 1 2 1 2 1 3 1 3 1 1 3 2 1 1 1 2 2 3
## [186] 2 1 1 3 1 3 3 3 3 2 1 3 1 1 3 1 2 1 1 3 2 2 2 3 2 2 1 3 2 2 1 1 3 2 3
## 
## Within cluster sum of squares by cluster:
## [1] 3967.587 3665.815 3944.092
##  (between_SS / total_SS =  71.8 %)
## 
## Available components:
## 
## [1] "cluster"      "centers"      "totss"        "withinss"     "tot.withinss"
## [6] "betweenss"    "size"         "iter"         "ifault"

0.1.8 Característica dos clusters

Após determinado o número de clusters ideal e calculado para qual cluster cada variável do banco de dados pertence, é possível verificar as características de cada aglomeração. Com o cálculo da média utilizando a função aggregate, observa-se que a média dos salários são menores no cluster 2, os Indivíduos com maior posição estão no cluster 3, e o cluster 1 se concentra sempre fica nas posições centrais de acordo com as médias observadas

aggregate(data, by=list(cluster=km.res$cluster), mean)
##   cluster  salario  posicao anosexperiencia      sexo
## 1       1 143.7263 5.094737        9.845263 0.6000000
## 2       2 127.8615 3.230769        8.358462 0.5846154
## 3       3 157.7667 7.016667       13.778333 0.8333333

0.1.9 Conclusão

Conseguimos observar que a partir do número de três clusters, as distâncias dos erros quadráticos praticamente se estabiliza. Neste ponto que seria o “cotovelo”, ou seja, a partir desse ponto que não existe uma discrepância tão significativa em termos de variância.

0.1.10 Material de Apoio