Este projeto aplica técnicas de Data Science (DS) e Machine Learning (ML) não supervisionado para realizar a segmentação de clientes, identificando padrões de comportamento de compra a partir de dados transacionais.
O trabalho transforma dados brutos (raw data) em insights acionáveis, apoiando decisões estratégicas de Marketing Analytics, CRM e Customer Intelligence, com foco em retenção e crescimento de receita.
Empresas com grandes bases de clientes frequentemente enfrentam dificuldades para compreender diferenças relevantes de comportamento, valor e engajamento, tratando todos os clientes de forma homogênea.
Essa abordagem pode resultar em:
campanhas genéricas com baixo Return on Investment (ROI)
desperdício de recursos de marketing
dificuldade em identificar clientes de alto Lifetime Value (LTV)
aumento do risco de churn
Diante desse cenário, torna-se essencial segmentar clientes de forma estruturada e data-driven, permitindo estratégias mais eficientes e personalizadas.
Segmentar clientes com base em comportamento de compra
Aplicar técnicas de clustering (Unsupervised Learning)
Avaliar e comparar múltiplos algoritmos de ML
Identificar perfis distintos de clientes
Apoiar decisões estratégicas orientadas por dados (Data-Driven Decision Making).
O conjunto de dados contém informações transacionais de clientes. A partir desses dados, foram construídas métricas RFM (Recency, Frequency, Monetary), amplamente utilizadas em contextos reais de CRM Analytics e Customer Segmentation:
Recency (R): tempo desde a última compra
Frequency (F): número de compras realizadas
Monetary (M): valor total gasto pelo cliente
Essas métricas sintetizam o comportamento de compra de cada cliente de forma objetiva e estratégica.
Fig. 1. Amostra da base de dados transacional original, contendo informações de vendas como InvoiceNo, produto, quantidade, data da transação, preço unitário, identificador do cliente e país, utilizada como ponto de partida para as etapas de ETL, EDA e segmentação de clientes.
Antes da Análise Exploratória dos Dados (EDA) e da modelagem, foi realizada uma etapa de limpeza e tratamento de dados, parte fundamental do processo de ETL (Extract, Transform, Load).
As principais ações realizadas incluem:
seleção das variáveis relevantes para o problema de negócio (Feature Selection)
remoção de registros inconsistentes e dados irrelevantes
agregação dos dados ao nível do cliente (Data Aggregation)
tratamento implícito de valores ausentes (Missing Values Handling) durante a construção das métricas RFM
validação da integridade dos dados após as transformações (Data Quality Check)
Essa etapa garantiu consistência, confiabilidade e qualidade dos dados, reduzindo vieses e melhorando o desempenho dos modelos de ML.
A etapa de EDA (Exploratory Data Analysis) teve como objetivo compreender a estrutura dos dados e identificar padrões iniciais, envolvendo:
análise estatística descritiva
avaliação das distribuições das variáveis
identificação de outliers
visualizações para entendimento do comportamento dos dados
Os insights obtidos nesta fase orientaram decisões importantes nas etapas seguintes.
Fig. 2. Distribuição percentual de clientes por país, evidenciando a forte concentração da base no Reino Unido (91% das transações) em comparação aos demais mercados.
Com base nos dados tratados, foram construídas as métricas RFM, consolidando o histórico de compras de cada cliente em três dimensões estratégicas.
Antes da aplicação dos algoritmos de clustering, os dados foram normalizados (Feature Scaling/Standardization), garantindo contribuição equilibrada das variáveis nos modelos.
Fig. 3. Exemplo de Feature Engineering com criação da variável TotalPrice (Quantidade × Preço Unitário).
Foram avaliados múltiplos algoritmos de clustering, amplamente utilizados em Customer Segmentation:
K-Means
Gaussian Mixture Model (GMM)
DBSCAN
Agglomerative Clustering (Hierarchical Clustering)
Mean Shift
Cada modelo foi testado e avaliado quanto à estabilidade, interpretabilidade e aderência ao problema de negócio.
Fig. 4. Resultado da clusterização com o algoritmo KMeans, exibindo a atribuição de cada observação a um cluster.
DBSCAN: Alta sensibilidade a hiperparâmetros (Hyperparameter Sensitivity) e dificuldade em formar clusters estáveis.
Agglomerative Clustering: Visão hierárquica interessante, porém com menor clareza para aplicação prática.
Mean Shift: Limitações de convergência e definição consistente de clusters.
Gaussian Mixture Model (GMM): Abordagem probabilística utilizada como modelo comparativo.
K-Means: Melhor equilíbrio entre:
estabilidade dos clusters
interpretabilidade
facilidade de tradução dos resultados em ações de negócio
✅ O K-Means foi selecionado como melhor modelo.
Tabela 1. Benchmark dos algoritmos de clusterização aplicados ao dataset, com avaliação quantitativa por métricas de qualidade de agrupamento e indicação do número de clusters identificados e do volume de ruído.
Fig. 5. Comparação dos modelos de clusterização. O gráfico compara os algoritmos usando três métricas padrão: Silhouette Score (maior = melhor separação e coesão dos clusters), Davies–Bouldin Index (menor = clusters mais compactos e bem separados) e Calinski–Harabasz Score (maior = melhor definição estrutural dos grupos). Esses resultados sustentam, de forma objetiva, a escolha do modelo final para segmentação.
Após a aplicação do algoritmo K-Means, foram identificados clusters distintos de clientes, cada um representando um padrão específico de comportamento de compra com base nas métricas RFM.
A análise conjunta dessas métricas permitiu compreender não apenas o volume de clientes em cada grupo, mas principalmente o valor estratégico de cada segmento para o negócio.
De forma geral, os clusters podem ser interpretados da seguinte maneira:
Cluster de Alto Valor (High Value Customers): Clientes com alta frequência de compra, baixo tempo desde a última transação e alto valor monetário acumulado. Representam o núcleo mais estratégico da base, sendo responsáveis por parcela significativa da receita.
Cluster de Clientes Ativos com Potencial de Crescimento: Clientes com boa recência e frequência moderada, porém com valor monetário ainda limitado. Indicam forte potencial para ações de upsell e cross-sell.
Cluster de Clientes Ocasionalmente Ativos: Clientes com frequência reduzida e compras esporádicas, mas que ainda apresentam algum nível de engajamento recente. Demandam estímulos para aumentar recorrência.
Cluster de Clientes Inativos ou em Risco de Churn: Clientes com alta recência, baixa frequência e baixo valor monetário, indicando perda de engajamento ao longo do tempo.
Essa segmentação fornece uma visão clara e acionável da base de clientes, permitindo estratégias diferenciadas para cada perfil identificado.
Fig. 6. Perfil dos clusters com base em RFM (valores padronizados). O gráfico mostra como cada cluster se diferencia em Recência (R), Frequência (F) e Monetário (M). Valores acima de zero indicam clientes acima da média do dataset naquela dimensão, enquanto valores abaixo de zero indicam clientes abaixo da média. Essa leitura permite interpretar rapidamente o comportamento de cada grupo e direcionar estratégias de marketing e retenção.
A partir da interpretação dos clusters, é possível derivar ações estratégicas claras, tais como:
Clientes de Alto Valor: Priorizar programas de fidelização, benefícios exclusivos e ações de retenção, visando maximizar LTV.
Clientes com Potencial de Crescimento: Implementar estratégias de upsell e cross-sell, incentivando aumento do ticket médio e frequência de compra.
Clientes Ocasionalmente Ativos: Utilizar campanhas direcionadas e incentivos promocionais para estimular recorrência.
Clientes em Risco de Churn: Aplicar ações de reativação, como campanhas personalizadas, ofertas específicas ou análise de causas de evasão.
Esses insights permitem uma atuação mais eficiente das áreas de Marketing, CRM e Customer Success, com melhor alocação de recursos e aumento da eficiência operacional.
A segmentação proposta possibilita à empresa:
substituir abordagens genéricas por estratégias personalizadas
aumentar retenção e engajamento dos clientes
melhorar o ROI de campanhas de marketing
apoiar decisões estratégicas com base em dados
Dessa forma, o projeto demonstra como Machine Learning aplicado à segmentação de clientes pode gerar valor real e mensurável para o negócio.
Tabela-Resumo de Pacotes, Subpacotes e suas Funções
Projeto desenvolvido no Visual Studio Code com Python e Jupyter Notebooks.
├── 🔢 Operações Numéricas e Estruturas Matemáticas
│ ├── numpy
│ │ └── Operações numéricas, arrays e
│ │ cálculos matemáticos
│ └── scipy
│ └── scipy.stats.gaussian_kde
│ └── Estimativa de densidade de
│ probabilidade
│
├── 🧹 Manipulação, Limpeza e Transformação de Dados
│ (ETL/Data Wrangling)
│ ├── pandas
│ │ └── Manipulação de dados,
│ │ DataFrames, agregações e
│ │ transformações
│ └── sidetable
│ └── Tabelas resumo e estatísticas
│ frequenciais
│
├── 📊 Análise Exploratória e Visualização de Dados
│ ├── seaborn
│ │ └── seaborn
│ │ └── Visualização estatística
│ │ e EDA
│ ├── matplotlib
│ │ └── matplotlib.pyplot
│ │ └── Gráficos estáticos e
│ │ customização visual
│ └── plotly
│ ├── plotly.express
│ │ └── Visualizações interativas
│ │ exploratórias
│ └── plotly.graph_objects
│ └── Construção avançada de
│ gráficos interativos
│
├── ⚙️ Pré-processamento e Transformação de Features
│ └── scikit-learn
│ └── sklearn.preprocessing
│ ├── StandardScaler
│ │ └── Padronização das
│ │ variáveis
│ ├── scale
│ │ └── Escalonamento rápido
│ └── PowerTransformer
│ └── Normalização e
│ transformação de
│ distribuições
│
├── 🤖 Machine Learning Não Supervisionado – Clusterização
│ └── scikit-learn
│ ├── sklearn.cluster
│ │ ├── KMeans
│ │ │ └── Clusterização baseada
│ │ │ em centróides
│ │ ├── DBSCAN
│ │ │ └── Clusterização por
│ │ │ densidade
│ │ ├── MeanShift
│ │ │ └── Clusterização por
│ │ │ densidade adaptativa
│ │ ├── AgglomerativeClustering
│ │ │ └── Clusterização
│ │ │ hierárquica
│ │ └── estimate_bandwidth
│ │ └── Estimativa de
│ │ parâmetros para
│ │ MeanShift
│ └── sklearn.mixture
│ └── GaussianMixture
│ └── Clusterização
│ probabilística
├── 🔗 Análise de Vizinhança e Suporte à Clusterização
│ └── scikit-learn
│ └── sklearn.neighbors
│ └── NearestNeighbors
│ └── Análise de vizinhança
│ (apoio ao DBSCAN)
│
├── 📐 Avaliação e Validação dos Clusters
│ ├── scikit-learn
│ │ └── sklearn.metrics
│ │ ├── silhouette_score
│ │ │ └── Coesão e separação
│ │ │ dos clusters
│ │ ├── davies_bouldin_score
│ │ │ └── Similaridade entre
│ │ │ clusters
│ │ └── calinski_harabasz_score
│ │ └── Variância intra e
│ │ intercluster
│ └── yellowbrick
│ └── yellowbrick.cluster
│ └── kelbow_visualizer
│ └── Visualização do método
│ do cotovelo
│
├── 🌲 Clusterização Hierárquica e Dendrogramas
│ └── scipy
│ └── scipy.cluster.hierarchy
│ ├── linkage
│ │ └── Construção de
│ │ hierarquia de clusters
│ ├── dendrogram
│ │ └── Visualização de
│ │ dendrogramas
│ └── fcluster
│ └── Extração de clusters
│ hierárquicos
│
└── 🧩 Interatividade e Exploração Dinâmica
└── ipywidgets
└── ipywidgets.interact
└── Interações dinâmicas e exploração visual