O que são Clusters e como criá-los utilizando R
Hoje em dia, o mercado discute cada vez mais o uso da Inteligência Artificial (ou Machine Learning) e Analytics, o conjunto de métodos, praticas e ferramentas que auxiliam na tomada de decisões. Muito se diz das formas mais engenhosas e mirabolantes nas quais alguns “algoritmos” ou “modelos” podem ajudar os mais diversos segmentos de negócios a resolverem grandes problemas. Dentro destas discussões, uma das técnicas mais faladas é a de clusters, mas, bem… o que eles são exatamente?
Cluster, na tradução literal do inglês, significa: grupo, agrupamento ou aglomeração. É exatamente com o intuito de “formar um conjunto” que os clusters são usados em modelos estatísticos (de onde os tais “algoritmos” acabaram saindo). Basicamente, os clusters são agrupamentos que criamos nos dados para encontrar padrões ou evidenciar diferenças.
Quais os benefícios da criação destes agrupamentos?
Existem diversos. Para exemplificar, vamos utilizar um caso prático: imagine que uma área de marketing de uma instituição financeira (ou, hoje em dia, praticamente de qualquer empresa) deseja identificar os grupos de clientes para criar diferentes comunicações. Imagine também que você é um destes clientes. Você consegue se lembrar dos e-mails marketing que já chegaram na sua caixa de entrada e que traziam fotos, textos e promoções que combinam com o seu estilo de vida?
Então, muito provavelmente essa área de marketing criou diversos clusters, por meio dos mais variados atributos que, para eles, definem seu perfil e você faz parte de um destes clusters.
Entre outros benefícios, podemos também citar:
- Atendimento diferenciado de clientes;
- Lançamento de produtos;
- Redução de custos;
- Controle de estoque;
- Controle de logística;
- Ou até influenciar em eleições.
Talvez neste momento você já tenha se interessado pelos clusters, mas, e agora… por onde começar?
A primeira coisa para se ter em mente, antes de sair criando clusters, é lembrar do principal objetivo da criação de grupos, que é: aglutinar agrupamentos que são diferentes entre si mas que, ao mesmo tempo, possuam semelhanças dentro deles, isto é, dentro de cada grupo a variabilidade deve ser mínima, porém a variabilidade entre eles deve ser máxima.
Mas, espere, agrupar não é tão simples assim… Veja as imagens abaixo:
A leoa é mais parecida com a gata ou com a cadela? Se olharmos pelo porte do animal, a cadela se aproxima mais, mas se olharmos pelo formato das orelhas, a gata está mais próxima visualmente. Neste sentido chegamos a dois conceitos importantes: similaridade e dissimilaridade. Quanto maior for a medida de similaridade, maior será a semelhança entre os elementos (a dissimilaridade é o inverso).
Agora, como podemos ter uma forma objetiva de definir a similaridade ou dissimilaridade? Uma das técnicas é a distância euclidiana (e a distância euclidiana ao quadrado).
**Importante: Neste artigo estamos abordando a clusterização por meio de variáveis quantitativas, mensuráveis. Existem formas de agrupar valores para variáveis qualitativas, descritivas, e uma destas formas é a Árvore de decisão (que podemos falar em um próximo artigo).
Por exemplo, dado o conjunto abaixo:
Podemos dizer que a distância entre os candidatos 2 e 4 é a distância euclidiana entre eles:
Calculando a distância euclidiana entre todos os pontos, temos um indicador objetivo sobre a dissimilaridade entre eles (no exemplo acima entre tempo de empresa e tempo de formação).
**Importante: Você pode encontrar mais informações sobre como calcular a distância euclidiana aqui.
Após calcular a distância entre todos os pontos, chegamos a uma das principais ferramentas para formação de Clusters: a matriz de distância euclidiana ao quadrado:
Bem, estamos chegando lá… Depois de tudo isso, chegamos nos agrupamentos de fato!
Existem inúmeros métodos de agrupamento dos dados e podemos dividi-los em hierárquicos e não hierárquicos. Neste artigo abordaremos o funcionamento do hierárquico e também o K-médias (ou K-means).
O método hierárquico se faz pela distância da matriz euclidiana ao quadrado, isto é, ele utiliza essa matriz (e a recalcula várias e várias vezes) para encontrar os grupos. Umas das técnicas é o vizinho mais próximo (nearest neighbor), que avalia qual é o menor valor na matriz e os agrupa.
Para resumir um pouco a conversa, vamos mostrar o passo-a-passo de seu funcionamento:
1- Agrupar as observações com menor distância:
2- Calcular a distância entre as observações 1 e 2 e as demais observações:
3- Elaborar uma nova matriz de distância com as observações 1 e 2 agrupadas:
4- Repetir os passos 1, 2 e 3 até a tabela ficar com apenas dois grupos (ou esteja suficientemente agrupada):
Como você pode ver, conseguimos através da distância euclidiana analisar a semelhanças entre os valores observados e criar os grupos (Grupo: 1+2+5 e Grupo: 3+4) que se assemelham dentro deles mas se diferenciam entre si. Contudo, é extremamente trabalhoso (inclusive para uma máquina).
**Importante: Um gráfico que pode ajudar na análise dos cruzamentos da matriz e os grupos formados, é o dendograma, e você pode ler mais sobre ele neste link. Para utilizar o R, você deve puxá-lo e instala-lo, disponível neste link, e depois você pode utilizar o RStudio como IDE de desenvolvimento, disponível neste link.
Neste cenário, chegamos ao K-média. Para ele, usaremos o R.
Usaremos uma base de exemplo (que estará disponível no fim deste artigo) que apresenta dados de faturas de cartão de crédito para exemplificar o uso do K-means. Vamos com um passo-a-passo no R.
Os campos da base que vamos usar neste exemplo:
1- Para começar, vamos instalar as libraries que utilizaremos neste exemplo:
2- Devemos setar o diretório de trabalho e importar a planilha para dentro do R:
Agora, a variável (ou tabela) “base” possui os dados de nossa planilha.
3- Um passo importante em toda análise estatística é avaliar os dados e realizar os devidos ajustes necessários para que eles tenham a acurácia necessária. No exemplo temos a idade dos clientes, mas alguns valores estão com algum problema, vejam:
Uma das ideias para “ajustar” estes valores (idade = 999 ou idade = -67) é: gerar a mediana das Idades e atribuir estes valores para as “idades estranhas”:
4- Para enriquecer nossos clusters (quanto mais variáveis, mais opções), vamos gerar um campo de percentual de valor de limite utilizado (BILL_AMT) sobre o valor do limite (LIMIT_BAL). Vamos aproveitar também para atribuir 0 quando este valor for negativo (o negativo, nesta base de exemplo, significa: valores a estornar de cartão de crédito. Por definição vamos adotar apenas faturas positivas, isto é, que o cliente deve pagar para a operadora do cartão):
**Importante: Em toda análise estatística é necessário realizar o passo de análise exploratória dos dados, avaliando questões como do campo Idade e entendendo o comportamento dos dados.
5- Agora, vamos isolar apenas as variáveis quantitativas que queremos usar no K-means:
6- Em muitas análises precisamos “padronizar” as variáveis para que não sejam numericamente tão diferentes (afetando os cálculos, como o da distância euclidiana), para isto, podemos usar o método de scale, que é: subtrair os valores de sua média e dividir pelo desvio padrão. No R, conseguimos isso de maneira simples pela função abaixo:
Veja como ficam os dados (mas não se preocupe, isto apenas ajudará na operação do algoritmo):
7- Vamos setar o seed de nossa base, isto é, um identificador para nossa base (que garante que sempre usaremos a mesma amostra/base):
8- Chegamos na execução do K-means. Este método tem uma característica importante: diferente do hierárquico, nós precisamos definir quantos grupos queremos, além da quantidade iterações, isto é, a quantidade de vezes que o algoritmo vai se “reprocessar” em busca de melhores grupos, vejam nos comentários abaixo o funcionamento da função:
Após este passo, o resultado do K-means já está na variável dados.k2, com dois grupos (centers = 2). Agora, vamos ver como ficaram os grupos:
9- Parabéns! Agora você já tem um dois clusters formados, utilizando o K-means. Contudo, ainda ficou um pouco confuso, não? Dois grupos parecem ser pouco, vamos testar mais:
Lembre-se do que estamos buscando: grupos similares dentro de si e diferentes entre eles.
10- Vamos usar o grupo 3, que parece ser o “melhor” para gerarmos uma análise exploratória e exportarmos estes grupos. Abaixo estamos levando os dados do grupo 3 para a variável dadosFinal:
11- Um passo tão importante quanto gerar os grupos com o algoritmo é entender o que representa cada grupo. O código abaixo pode ajudar, por meio do box-plot (um box-plot por variável):
Assim, temos três grupos:
- Grupo 1 – Clientes de maior idade;
- Grupo 2 – Clientes com maior limite, em meia-idade, mas pouca utilização dele (talvez os “ricos”);
- Grupo 3 – Os mais jovens (talvez começo de carreira), com menor limite.
**Importante: Entender o gráfico de box-plot é importantíssimo para qualquer análise estatística, ou modelagem, ou clusterização. Você pode ler mais sobre neste link.
12- E agora o passo final, exportar os dados:
Este arquivo é gerado no mesmo local que o set-wd foi executado.
Com isto, passamos pela maior parte dos aspectos importantes sobre clusterização e como podemos gerar isto através do R, uma ferramenta open source e relativamente simples (versus diversas linguagens de programação que vemos todos os dias).
É sempre importante lembrar que conhecimentos em estatísticas são essenciais para utilizar este e outros métodos. Mas, ainda mais que isso, uma vez acostumado, você conseguirá utilizá-los da melhor maneira para agregar valor em seu negócio!
E aí, também ficou empolgado com o potencial da clusterização para os desafios da sua TI?
Entre em contato com a Iteris e saiba como podemos ajudar a elevar o desempenho de suas aplicações.
Referências:
- Professora Natália Zamziboni – FIA 2019 – Aplicações de Estatística para Tomada de Decisão – Turma 1 – aula ministrada em 26/6/19, junto com material de referência, exemplos e código em R;
- http://www.leg.ufpr.br/~walmes/cursoR/guia_rapido_R.pdf