Segmentação não supervisionada de uma base com mais de 45 mil registros utilizando K-Means, identificando 3 perfis distintos de clientes e propondo ações estratégicas de marketing, retenção e vendas para cada segmento.
Este projeto foi desenvolvido como avaliação obrigatória da pós-graduação em Data Analytics e Inteligência Artificial Aplicada a Negócios, realizado de forma individual e autônoma, consultando apenas o material estudado durante o curso e um case prático desenvolvido anteriormente.
O cenário aborda uma empresa que precisava entender melhor o comportamento de seus clientes para direcionar ações de retenção, engajamento e vendas de forma personalizada. A base de dados continha 45.815 registros com informações transacionais, comportamentais e de pagamento.
O projeto buscou responder às seguintes perguntas de negócio:
Foram selecionadas 7 variáveis divididas em dois eixos para a clusterização:
| Feature | Eixo | Descrição |
|---|---|---|
| n_acessos | Comportamento | Quantidade de acessos do cliente à plataforma |
| Dias sem Acessar | Comportamento | Dias de inatividade desde o último acesso |
| ativo_tratado | Comportamento | Status de atividade do cliente (binário) |
| TOTAL_PARCELAS | Financeiro | Número total de parcelas contratadas |
| RECORRENTE | Financeiro | Indica se o pagamento é recorrente (assinatura) |
| Tipo Pagamento | Financeiro | Forma de pagamento utilizada (codificado) |
| RENOVACAO | Financeiro | Indica se o cliente renovou a assinatura |
Importação da base com 45.815 registros e 28 colunas, tratamento de variáveis categóricas (ativo → binário) e exploração inicial dos dados.
Seleção de 7 variáveis-chave divididas em dois eixos: comportamental (acessos, inatividade, status ativo) e financeiro (parcelas, recorrência, pagamento, renovação).
Padronização dos dados com StandardScaler para eliminar diferenças de escala e garantir que nenhuma feature domine a clusterização.
Avaliação da inércia (WCSS) para K de 1 a 9, identificando K=3 como o ponto de maior inflexão da curva, indicando o número ideal de clusters.
Treinamento do modelo K-Means com 3 clusters e random_state=42, atribuindo cada cliente a um dos segmentos identificados.
Análise agregada por cluster com estatísticas descritivas (média, mediana) das features e identificação de formas de pagamento predominantes.
Clientes que realizam compras pontuais, geralmente em uma única parcela via cartão de crédito. Apresentam baixo número de acessos e inatividade média considerável, com taxa de recorrência e renovação praticamente nula.
Clientes 100% recorrentes com pagamentos contínuos (frequentemente 12x), mas com acessos moderados e alta inatividade. Taxa de renovação de 0% e apenas 57,64% ativos — alto risco de abandono ao final do ciclo.
O grupo mais valioso. Alto engajamento com a plataforma (média de 36,36 acessos), taxa de renovação quase perfeita (99,85%) e 100% ativos. São clientes extremamente satisfeitos e leais, ideais para programas de indicação.
Para garantir a escalabilidade da solução, foi desenvolvido um pipeline de pré-processamento que permite classificar automaticamente novos clientes nos clusters existentes, utilizando o modelo K-Means e o Scaler exportados via joblib.
import joblib
import pandas as pd
import numpy as np
def novos_clientes(base):
colunas_cluster = ['Tipo Pagamento', 'TOTAL_PARCELAS', 'RECORRENTE',
'n_acessos', 'Dias sem Acessar', 'ativo_tratado',
'RENOVACAO']
modelo_kmeans_treinado = joblib.load('modelo_kmeans_treinado.pkl')
scaler_treinado = joblib.load('scaler_clientes.pkl')
novos_clientes_df = pd.read_excel(base)
novos_clientes_df['ativo_tratado'] = np.where(
novos_clientes_df['ativo'] == 'sim', 1, 0
)
features_novos_clientes = novos_clientes_df[colunas_cluster]
novos_clientes_scaled = scaler_treinado.transform(features_novos_clientes)
novos_clientes_df['Cluster'] = modelo_kmeans_treinado.predict(
novos_clientes_scaled
)
novos_clientes_df.to_excel(base, index=False)
return novos_clientes_df
Com esta função, basta importar novos_clientes(), passar o caminho de um arquivo Excel com a base de novos clientes e o modelo atribui automaticamente cada um ao cluster mais adequado.