[Python / Power B.I] Clusterização — K-Prototype

Alex
5 min readAug 26, 2024

--

Definição: (Todo o código referente a esse post encontra-se aqui: https://github.com/arexdevson/Analises-Python/blob/main/KPrototype_PowerB_I.ipynb)
Já o relatório em Power B.I pode ser visualizado aqui: https://app.powerbi.com/view?r=eyJrIjoiZjZmMDA0ZTAtNzBhZC00ZDQ2LTlmMzUtOTY2ZjllMmIxZGYzIiwidCI6IjVjYmQwMzc0LTFjZWMtNDVkOS05ZDc4LTIzNTMxMGIzNjY5MCJ9

[Clique aqui para visualizar em inglês]

Primeiro para a definição de clusterização é possivel entender como uma técnica de agrupamento onde a base para essa ação são as características/pontos similares dos registros analisados (entendam clientes, comportamento de equipamentos, trajetos realizados por veículos, distribuição de temperaturas em determinado ambiente e afins como registros).

E por qual motivo seria importante aplicar clusterização/agrupamento em um desses casos acima? vamos lá:

1° — Para casos dos clientes, sendo uma empresa prestadora de serviços ela poderia ter em mãos características especificas de cada grupo/agrupamento e entender ações que a mesma pode tomar pra cada grupo visando seu objetivo

2° — Equipamentos que possuam determinadas características como localização, temperatura, numero de operações executadas, n° de falhas e etc podem ser agrupados justamente pra entender se em uma devida localização/unidade em x temperatura com um numero de operações executadas há maiores falhas do que em outras

e assim por diante….

No nosso caso será focado um exemplo com os clientes sobre o tema CHURN (Cancelamento / Evasão do cliente)

Problema:

Definir o problema -> Quebrar em pedaços → Trilhar uma solução

No nosso exemplo atuamos como analista de dados para um banco onde recebemos a tarefa de entender gaps em nosso churn e atuações que o time comercial possa atuar para melhorar o relacionamento com os clientes.

Contexto:

Foi levantado os dados com 10.000 registros (https://www.kaggle.com/datasets/gauravtopre/bank-customer-churn-dataset)

A empresa atua em 3 países (Alemanha / França e Espanha), ela oferece no máximo 4 produtos de sua carteira, clientes do sexo feminino / masculino, com informações gerais sobre o uso dos serviços bancários.

Explicação! (o Codigo a seguir foi executado no google colab mas é possivel executar em qualquer interpretador do python: https://github.com/arexdevson/Analises-Python/blob/main/KPrototype_PowerB_I.ipynb)

Para esse exemplo de clusterização fiz uso da técnica de aprendizado de máquina não-supervisionada K-Prototype (ela mistura os conceitos de K-Means e K-Modes).

(Quando usamos SUPERVISIONADA indica que alimentamos o nosso modelo preditivo com variáveis independentes para prever uma dependente, ou seja, um exemplo seria onde indicamos quanto gastamos em x de Marketing para trazer Y de clientes e queremos que o modelo crie uma lógica para prever de acordo com o gasto em marketing o quanto teriamos de clientes.

Quando usamos o NÃO-SUPERVISIONADA indica que não temos o objetivo final de prever algo baseado nas características, somente queremos que o modelo sem input algum nosso indique padrões / características que ele tenha calculado e jogue como output para nós, sendo mais claro no nosso caso ele terá a capacidade de analisar o conjunto de dados e devolver o agrupamento que ele achou adequado conforme as similaridades entre os registros)

o uso dessa técnica foi devido ao nosso dataset possuir dados categóricos (“Pais” é um exemplo) e também possuir dados numéricos (“Saldo Bancário” é um exemplo).

Exemplo do dataset

Informações dos clientes:

Country = Pais que o cliente vive

Age = Idade do cliente

Annual Salary = Salário estimado que o cliente tenha

Balance = Valor que o cliente possuia antes do churn

Active_Member = Cliente utilizava ou não o app do banco

Credit_Card = Cliente tinha ou não cartão de crédito

Gender = Genero do cliente

Products_Number = Numero de produtos utilizados pelo cliente

Score = Score baseado nas ações dos clientes

Tenure(Year) = Tempo em anos que o cliente permaneceu no banco

Tratamento dos dados

Após o entendimento básico dos dados (há registros faltantes? campos nulos? dados com tipagem correta? e afins) foi realizado o escalonamento dos dados de saldo bancário (Balance) / score (Credit_score) e salário estimado (estimated_salary) para que fosse analisado em mesma escala essas variáveis no momento de execução dos agrupamentos.

Validação

Mais do que inputar o código aqui (https://github.com/arexdevson/Analises-Python/blob/main/KPrototype_PowerB_I.ipynb) uma abordagem interessante para entender os clusters/agrupamentos antes de gerar o agrupamento de fato é criar a chamada curva de cotovelo ou (Elbow Curve) onde de forma sucinta é analisado o quanto a adição de novos cluster adiciona (ou não) ao modelo entender a variância e similaridades dos dados.

Olhando o gráfico acima os clusters começam a ter uma menor “distinção” entre suas características do 5° cluster em diante (novamente, por ser um modelo não supervisionado esse passo é uma avaliação para posterior criação definitiva do agrupamento, nesse caso optei por seguir com 4 clusters).

Outra validação realizada foi utilizar do conceito de PCA (Principal Components) com o intuito de reduzir a dimensionalidade dos dados em 2d

Python começa os clusters com 0 (algo padrão da linguagem) mas fora feito 4 separações.

há uma densidade maior entre o cluster 0 e cluster 3 (reforçando a utilização dos dois como ponto focal), os dados estão bem divididos e lineares e é possivel identificar uma progressão;
Os clusters 1 e 2 possuem uma variância entre os seus dados maior na identificação do cluster onde podemos identificar uma possibilidade de subgrupo em certos registros que estão mais próximos até dos dois clusters principais.

Dessa forma a separação em 4 agrupamentos resultou na seguinte proporção:

Quantidade de clientes por cluster
% de clientes por cluster

EDA (Exploração dos Dados)

Perfeito!

Segregamos o nosso dataset em grupos onde os clusters 0 e 3 possuem uma maior proporção do que os demais, indicando que há maior participação dessas características em questão no dataset e para explorar elas desenvolvi o relatório em Power B.I (https://app.powerbi.com/view?r=eyJrIjoiZjZmMDA0ZTAtNzBhZC00ZDQ2LTlmMzUtOTY2ZjllMmIxZGYzIiwidCI6IjVjYmQwMzc0LTFjZWMtNDVkOS05ZDc4LTIzNTMxMGIzNjY5MCJ9).

Se fizer a mesma análise, compartilhe comigo!
ficarei contente em entender seus pontos de vista e indicadores.

See ya!

--

--