Clusterização de dados: Segmentação de clientes

Pandas Couple
11 min readJun 9, 2021

--

Entender o seu negócio e como os clientes se relacionam com sua empresa e seu produto é fundamental para desenvolver a melhor estratégia.

Um bom caminho a ser seguido nesse sentido é a clusterização. Uma prática nascida no universo do marketing, a formação de clusters vai além da publicidade e impacta o resultado geral da organização.

Cluster são formações de grupos de pessoas, produtos, ações, etc, que tenham características semelhantes.

Por meio da clusterização, a empresa melhora o tipo de mensagem que envia ao público, como promoções de produtos com mais propensão de aquisição ou um serviço alinhado com a situação atual do cliente. Isso fortalece a relação e, consequentemente, incrementa os lucros.

Com um mercado mais segmentado, surge a necessidade por produtos e serviços mais customizados, criando assim novas demandas. A análise dos clientes por meio dos clusters ajuda a enxergar e tomar decisões melhores, aperfeiçoando toda a estratégia de atração e vendas.

Por ser uma excelente estratégia de mercado, é que vamos, neste projeto, fazer uma clusterização de clientes para definir algum plano de ação para a empresa.

Aquisição dos Dados

Os dados deste trabalho foram adquiridos do Kaggle. Lá você encontra esse e outros datasets muito interessantes para fazer projetos como esse ou até participar de competições entre cientistas de dados.

Informação das variáveis:

CUSTID : Identificação do titular do cartão de crédito;

BALANCE : Saldo restante na conta para fazer compras;

BALANCEFREQUENCY : com que frequência o saldo é atualizado, pontuação entre 0 e 1 (1 = atualizado com frequência, 0 = não atualizado com frequência);

PURCHASES : Valor das compras realizadas;

ONEOFFPURCHASES : Valor máximo da compra realizada de uma só vez;

INSTALLMENTSPURCHASES : Valor da compra parcelada;

CASHADVANCE : Antecipado dado pelo usuário;

PURCHASESFREQUENCY : Frequência com que as compras estão sendo feitas, pontuação entre 0 e 1 (1 = frequentemente comprado, 0 = não frequentemente comprado);

ONEOFFPURCHASESFREQUENCY : Com que frequência as compras acontecem de uma vez (1 = frequentemente comprado, 0 = não frequentemente comprado);

PURCHASESINSTALLMENTSFREQUENCY : Frequência com que as compras a prazo estão sendo feitas (1 = frequentemente, 0 = não frequentemente);

CASHADVANCEFREQUENCY : Frequência com que o dinheiro antecipado está sendo pago;

CASHADVANCETRX : Número de transações feitas com “Dinheiro adiantado”;

PURCHASESTRX : Número de transações de compras feitas;

CREDITLIMIT : Limite do cartão de crédito;

PAYMENTS : Valor do pagamento feito pelo usuário;

MINIMUM_PAYMENTS : Valor mínimo dos pagamentos feitos pelo usuário;

PRCFULLPAYMENT : Porcentagem do pagamento total pago pelo usuário;

TENURE : Posse do serviço de cartão de crédito para o usuário.

OBJETIVO DO TRABALHO: Desenvolvimento de uma segmentação de clientes para definir a estratégia de marketing.

Análise exploratória dos dados

Em primeiro lugar, vamos fazer uma análise exploratória bem sucinta desses dados para conseguirmos extrair informações valiosas que nos ajudará na criação e no melhor desempenho do nosso algoritmo de clusterização.

Para tornar a análise exploratória simples de entender vamos dividir as tarefas em tópicos e ir detalhando uma a uma.

  • Verificar as 05 primeiras entradas do dataset

Note que apenas com esse comando, conseguimos ter uma visão geral do nosso dataset, identificando nossas variáveis (colunas) e nossas entradas (linhas) e assim já conseguindo obter alguns insights de como proceder com esse dataset.

  • Verificar os tipos das variáveis e tamanho do dataset

Esse dataset é composto por 18 variáveis e 8950 entradas. Com exceção do ID do cliente, o restante das variáveis são todas numéricas.

  • Verificar o resumo estatístico do dataframe

Com esse método, conseguimos um resumo estatístico completo com as quantidades, média, desvio padrão, os quartis e valores máximos.

É muito importante termos essa visão estatística dos nossos dados para identificarmos possíveis outliers e analisar se as quantidades apresentadas fazem sentido no problema em questão.

  • Verificar a porcentagem de valores ausentes nas colunas

Esse dataset está bem completo, ou seja, ele possui poucos valores ausentes. Apenas duas variáveis, como podemos ver, possuem uma quantidade muito pequena de valores ausentes.

Na próxima etapa do projeto, que é uma etapa de preparação e limpeza dos dados iremos tratar esses valores ausentes.

Preparação e limpeza dos dados

Nesta segunda etapa do projeto, iremos fazer um trabalho muito importante que é manipular os dados para que eles fiquem na sua melhor forma possível, para finalmente, na próxima etapa, modelarmos o algoritmo de machine learning, para que o mesmo apresente um melhor desempenho.

Para tornar essa etapa mais didática, também vou dividi-la em tópicos, e detalhar cada etapa, como fizemos na análise exploratória.

  • Criar uma cópia do dataframe
  • Eliminar as colunas que não irão ter utilidade para nosso modelo

As colunas ‘CUST_ID’ E ‘TENURE’, não possuem informações relevantes para o nosso problema em questão, visto que, a variável ‘CUST_ID’ é apenas uma identificação do cliente e a variável ‘TENURE’ representa quanto tempo o usuário ficou com a posse do cartão. Nesse caso, vamos removê-las.

  • Substituindo os valores ausentes pela mediana

Os valores ausentes foram preenchidos pela mediana de seus respectivos valores. Optei pela mediana, pois, como vimos na análise exploratória, a maioria dos valores se encontra mais ou menos no intervalo da mediana. Se optássemos pela média, esses valores ficariam mais distorcidos da realidade.

Agora todo o nosso dataframe está completo sem nenhum valor ausente. Vamos em frente!

  • Padronização dos dados

Padronização é quando as features sofrem uma mudança de escala, e passa a ter as propriedades de uma distribuição normal com média μ=0 e desvio padrão σ=1.

Na padronização, os z-scores são calculados da seguinte maneira:

A padronização é essencial na análise de clusters, uma vez que se compara a similaridade das features por meio das distâncias. Note que na análise exploratória, vimos que cada uma das nossas features possuíam valores e escalas distintas, por esse motivo aplicamos a padronização, para as mesmas ficarem em uma mesma escala e não prejudicarem o desempenho do nosso modelo.

Modelo de clustering

Finalizada a parte de limpeza e preparação dos dados, vamos agora executar o nosso algoritmo de cluster. Inicialmente vamos começar com um algoritmo muito utilizado que é o KMeans.

Vou começar tentando encontrar um número ótimo de clusters, o ‘n_clusters’, que é o número de clusters a serem formados, bem como o número de centroides a serem gerados, vou começar criando um loop para o algoritmo testar vários números de clusters e validar com o método do cotovelo.

O que fizemos aqui foi rodar o KMeans diversas vezes, para vários números diferentes de clusters (Nesse caso foi de 2 a 10), e dizer qual dessas quantidades foi o número ótimo de clusters.

O que geralmente acontece ao aumentar a quantidade de clusters no KMeans é que as diferenças entre clusters se tornam muito pequenas, e as diferenças das observações intra-clusters vão aumentando. Então é preciso achar um equilíbrio em que as observações que formam cada agrupamento sejam o mais homogêneas possíveis e que os agrupamentos formados sejam o mais diferentes um dos outros.

Mas como saber qual é esse ponto onde atingimos o número ótimo de clusters, de acordo com esse gráfico acima, por exemplo?

Vamos utilizar uma outra métrica de desempenho para nos ajudar nessa tarefa!

Outros critérios de validação

Conforme sabemos, um modelo de machine learning deve ser quantificável, seja em termos de desempenho ou precisão.

Avaliar o desempenho de um algoritmo de agrupamento não é tão trivial quanto contar o número de erros ou a precisão e recuperação de um algoritmo de classificação supervisionado. Em particular, qualquer métrica de avaliação não deve levar em consideração os valores absolutos dos rótulos do cluster, mas sim se esse cluster definir separações dos dados analisados. Essas separações devem satisfazer a algum conjunto de classes verdadeiras ou alguma suposição de modo que os membros pertençam à mesma classe de acordo com alguma métrica de similaridade.

No caso de modelos de clusterização, podemos testar o desempenho do modelo utilizando as seguintes métricas:

  • Coeficiente de silhueta;
  • Pontuação do davies bouldin;
  • Pontuação do Calinski;

Neste trabalho irei trabalhar apenas com o coeficiente de silhueta (além do método do cotovelo) para verificar o desempenho do nosso cluster.

Coeficiente de silhueta

O Coeficiente silhueta é calculado usando a distância média dentro do cluster (a) e a distância média do cluster mais próximo (b) para cada amostra.

Para esclarecer, é a distância entre uma amostra e o cluster mais próximo do qual a amostra não faz parte.

Matematicamente, o coeficiente de silhueta é definido da seguinte forma:

O melhor valor é 1 e o pior valor é -1. Valores próximos a 0 indicam clusters sobrepostos. Valores negativos geralmente indicam que uma amostra foi atribuída ao cluster errado, pois um cluster diferente é “mais semelhante”.

O melhor valor para o número de clusters foi 3. Apesar do valor do coeficiente de silhueta ter dado positivo (por volta de 0,25), ainda está um pouco distante do máximo ideal que seria 1,0. Podemos considerar esse valor bom, pois, foi apenas nosso primeiro teste utilizando o KMeans + standard scaler.

Em projetos de machine learning tanto supervisionado quanto não supervisionado, devemos sempre fazer diversos testes com vários modelos de machine learning, vários modelos de pré-processamento e vários hyperparâmetros diferentes. É testando e avaliando que conseguimos melhorar nossos resultados.

Bônus — Teste do KMeans com outros métodos de pré-processamento

Conforme falado no tópico anterior, é sempre muito recomendado que se teste os modelos de machine learning de diversas formas diferentes. Vamos testar o KMeans com outras formas de pré-processamento dos dados para conseguir alcançar desempenhos melhores.

Já fizemos o algoritmo com a padronização pelo standard scaler. Vou fazer mais três testes, um utilizando o normalizer e outro utilizando o PCA, que um algoritmo de redução de dimensionalidade das variáveis.

Vamos lá !

Teste 1 — KMeans + Normalizer

Note como o teste de várias hipóteses é muito importante. Conseguimos aumentar significativamente o nosso coeficiente de silhueta, agora ele está em aproximadamente 0,35.

Vamos para mais um teste!

Teste 2 — KMeans + PCA + StandardScaler

O PCA tem que ser utilizado combinado com um algoritmo de padronização/normalização dos dados. Aqui vamos testar utilizando os dois que já havíamos trabalhado.

Conseguimos mais uma vez superar o último teste. Agora o coeficiente de silhueta está em quase 0,5.

Vamos para nosso último teste!

Teste 3 — KMeans + PCA + Normalizer

Chegamos em um valor ótimo para os nossos testes com o número de clusters igual a 3 e o coeficiente de silhueta em quase 0,51.

Vamos utilizar este modelo (teste 3) para elaborar nosso modelo final e entender melhor o que foi feito.

Modelo final

Com todos os testes que foram propostos para esse trabalho feitos, vamos instanciar, treinar e fazer previsões com o modelo final adotado e tirar conclusões que definam alguma estratégia para o problema em questão.

Essa é a contagem da quantidade de clientes em cada um dos três clusters.

Aqui, concatenamos os nossos clusters com o dataframe inicial para ter uma visualização dos clusters pertencentes as suas respectivas características.

Essa é uma visualização muito interessante na nossa segmentação de clientes, pois, conseguimos ver cliente por cliente, em qual cluster ele pertence e quais características ele tem.

Aqui estão nossos clusters dispostos graficamente em função das nossas variáveis reduzidas com o algoritmo do PCA.

Vamos agora, fazer uma análise estatística dos nossos clusters, selecionando algumas variáveis. Nesse caso, vamos tentar selecionar as “melhores” variáveis, ou seja, as variáveis que vão melhor descrever o porque dessa segmentação, o porque cada cliente está em seu respectivo cluster.

Para fazer isso, vamos primeiro selecionar essas variáveis com base na variância entre elas. As variáveis que possuírem maior variância, serão as que vamos adotar para analisar estatisticamente os clusters.

Seleção das variáveis — parte 01
Seleção das variáveis — parte 02

Selecionamos então, 6 variáveis para fazer essa análise. Lembrando que essa análise pode se estender para todas as variáveis, porém, escolhi as 6 que possuem uma maior variância e/ou fazem mais sentido nesse momento.

Os valores apresentados, são uma média dos valores das respectivas variáveis, em cada cluster, por exemplo, os clientes do cluster 1, em média, possuem um limite de crédito de U$ 5226.35.

Esse é o momento de deduzir conclusões mais aprofundadas. Essas deduções são subjetivas e irão depender muito do objetivo da empresa, mas vamos aqui fazer algumas análises que possam ser de grande valor:

Cluster 0: Clientes com limite de crédito baixo; Fazem compras com grandes valores; Pagam em dia.

Cluster 1: Clientes com limite de crédito alto; Fazem compras com pequenos valores; Pagam em dia.

Cluster 2: Clientes com limite de crédito médio; Fazem compras com pequenos valores; Não pagam em dia.

Com essas deduções baseadas nos clusters, podemos pensar em estratégias como:

  • Já que os clientes do cluster 0 fazem compras com grandes valores e pagam em dia, não seria interessante aumentar o limite de crédito desses clientes para que eles possam gastar mais e gerar mais lucro para a empresa?
  • Já que os clientes do cluster 1 possuem um alto limite de crédito, porém fazem compras com pequenos valores, não seria interessante, por exemplo, fazer uma parceria com alguma empresa que fornece pontos por gastos em cartões de crédito para fazer com que esses clientes gastem mais?
  • Já que os clientes do cluster 2 não pagam em dia e possuem um limite de crédito razoável, não seria interessante diminuir esse limite para que a empresa não sofra com prejuízos maiores?

Enfim, essas são algumas das deduções que conseguimos fazer, mas, como sabemos, tudo isso é bem subjetivo e depende do que a empresa quer no momento e se a estratégia x, y ou z faz sentido nesse momento. Não necessariamente existe um certo ou errado nessas análises, isso depende do objetivo final.

Conclusão

Ao longo deste projeto vimos uma série de trabalhos que tanto a empresa quanto o cientista de dados tem que fazer. Resumidamente foram:

  • Estudo do problema para fazer uma clusterização;
  • Aquisição dos dados;
  • Análise exploratória dos dados;
  • Preparação e limpeza dos dados;
  • Modelo base de machine learning;
  • Testes de hipóteses modificando diversas variáveis no modelo de machine learning;
  • Escolha do modelo final;
  • Conclusão do objetivo e definição do plano de ação.

Este projeto é uma pequena amostra do que podemos fazer com uma clusterização, claro que aqui nos limitamos apenas a algumas análises. Fica então, um convite para em uma outra oportunidade explorarmos outras abordagens e outros problemas nesse vasto mundo da clusterização e do aprendizado não supervisionado.

Espero ter ajudado !

Obrigado !

--

--

Pandas Couple

Casal de Cientistas de Dados, contribuindo para a comunidade de Data Science.