Clustering Analysis

Análise de clusters: features estruturais vs embeddings semânticos

Author

Marlon

Published

May 7, 2026

Configuração

Dataset Status Uso
messages_enriched.parquet ✅ Disponível Clustering Estrutural
message_embeddings_*.npy ✅ 3 modelo(s) Clustering Semântico

⚡ Configurações de Performance:
Parâmetro Valor
Amostra para Elbow/Silhouette 15,000
Batch size (MiniBatchKMeans) 1,024
Chunk size (processamento) 10,000

Introdução

Este notebook explora duas abordagens de clustering para identificar padrões nas conversas:

  1. Clustering Estrutural — Usa features numéricas derivadas (temporais, texto, conversação)
  2. Clustering Semântico — Usa embeddings de modelos de linguagem

A comparação entre as duas abordagens revela insights complementares: - Estrutural captura comportamento (quando, como, quanto) - Semântico captura conteúdo (o que, significado)

NoteOtimização de Memória

Este notebook usa MiniBatchKMeans e amostragem estratificada para processar grandes volumes de dados sem estourar memória.


1. Carregamento dos Dados

Métrica Valor
Mensagens 91,924
Colunas 43
Período 19/10/2024 → 20/10/2025

2. Clustering Estrutural (Features Derivadas)

Agrupa mensagens usando features numéricas criadas no Feature Engineering.

2.1 Seleção de Features

Categoria Feature Status
Temporais hora ✅
Temporais dia_semana_num ✅
Temporais mes ✅
Temporais fim_de_semana ✅
Temporais horario_comercial ✅
Texto tamanho_caracteres ✅
Texto tamanho_palavras ✅
Texto tem_emoji ✅
Texto qtd_emojis ✅
Texto tem_link ✅
Texto tem_interrogacao ✅
Texto tem_exclamacao ✅
Texto eh_caixa_alta ✅
Conversação tempo_desde_ultima_msg ✅
Conversação eh_resposta_rapida ✅
Conversação sequencia_mesmo_remetente ✅
Conversação eh_inicio_conversa ✅

Features disponíveis para clustering: 17

2.2 Determinação do Número de Clusters

📊 Usando amostra de 15,000 mensagens para determinar K ótimo
   (de 91,924 total - 16.3%)

Método Elbow e Silhouette Score para determinar número ótimo de clusters
📊 Melhor K pelo Silhouette Score: 10

2.3 Clustering Final

Métrica Valor
Número de Clusters 10
Silhouette Score (amostra) 0.277
Interpretação Moderado

2.4 Distribuição dos Clusters

Distribuição de mensagens por cluster estrutural

2.5 Perfil dos Clusters

Perfil médio normalizado de cada cluster
📋 **Interpretação dos Clusters:**

**Cluster 0** (15,128 mensagens)
  📈 Características altas: horario_comercial, eh_resposta_rapida, tem_emoji
  📉 Características baixas: mes, fim_de_semana, dia_semana_num

**Cluster 1** (18,312 mensagens)
  📈 Características altas: horario_comercial, mes, eh_resposta_rapida
  📉 Características baixas: hora, fim_de_semana, dia_semana_num

**Cluster 2** (16,595 mensagens)
  📈 Características altas: hora, eh_resposta_rapida, mes
  📉 Características baixas: horario_comercial, fim_de_semana, dia_semana_num

**Cluster 3** (1,142 mensagens)
  📈 Características altas: eh_inicio_conversa, tempo_desde_ultima_msg, tem_exclamacao
  📉 Características baixas: eh_resposta_rapida, hora, sequencia_mesmo_remetente

**Cluster 4** (555 mensagens)
  📈 Características altas: tem_link, tamanho_caracteres, eh_inicio_conversa
  📉 Características baixas: eh_resposta_rapida, tem_interrogacao, eh_caixa_alta

**Cluster 5** (2,054 mensagens)
  📈 Características altas: eh_caixa_alta, horario_comercial, eh_resposta_rapida
  📉 Características baixas: mes, tem_interrogacao, sequencia_mesmo_remetente

**Cluster 6** (8,717 mensagens)
  📈 Características altas: horario_comercial, mes, tamanho_palavras
  📉 Características baixas: eh_resposta_rapida, fim_de_semana, dia_semana_num

**Cluster 7** (4,834 mensagens)
  📈 Características altas: tem_interrogacao, tamanho_palavras, tamanho_caracteres
  📉 Características baixas: tem_emoji, tem_exclamacao, eh_caixa_alta

**Cluster 8** (22,392 mensagens)
  📈 Características altas: dia_semana_num, fim_de_semana, mes
  📉 Características baixas: horario_comercial, tem_interrogacao, tem_exclamacao

**Cluster 9** (2,195 mensagens)
  📈 Características altas: tem_exclamacao, horario_comercial, mes
  📉 Características baixas: hora, tem_interrogacao, tem_emoji

2.6 Clusters por Participante

Distribuição de clusters por participante

2.7 Visualização 2D (PCA)

Projeção PCA dos clusters estruturais


3. Clustering Semântico (Embeddings)

NotePré-requisito

Esta seção requer os arquivos de embeddings (.npy) gerados pelos notebooks 04f/g/h. Usamos MPNet (768d) como padrão por ter melhor qualidade.

✅ Embeddings disponíveis:
   • mpnet: message_embeddings_mpnet.npy (201.2 MB)
   • minilm: message_embeddings_minilm.npy (100.6 MB)
   • distiluse: message_embeddings_distiluse.npy (134.2 MB)

🎯 Usando: MPNET

3.1 Distribuição dos Clusters Semânticos

3.2 Visualização 2D (PCA nos Embeddings)


4. Comparação: Estrutural vs Semântico

Note

Esta seção só é executada se ambos os clusterings estiverem disponíveis.


5. Análise Lexical: N-Grams e TF-IDF

NoteObjetivo

Identificar as palavras-chave e expressões que caracterizam e diferenciam cada cluster semântico. - N-Grams: palavras/frases mais frequentes em cada cluster - TF-IDF: termos que distinguem cada cluster dos demais

5.1 Setup e Preprocessamento

5.2 Análise de N-Grams

5.2.1 Unigrams (Palavras Individuais)

5.2.2 Bigrams (Pares de Palavras)

5.2.3 Trigrams (Expressões de Três Palavras)

5.2.4 Visualização Comparativa

5.3 Análise TF-IDF (Termos Distintivos)

TipInterpretação TF-IDF

Enquanto N-Grams mostram o que é mais falado em cada cluster, TF-IDF mostra o que é característico de cada cluster (frequente nele, raro nos outros).

5.3.1 TF-IDF Unigrams

5.3.2 TF-IDF Bigrams

5.3.3 Heatmap TF-IDF

5.4 Resumo Comparativo


6. Próximos Passos

Com os clusters identificados, as próximas análises podem incluir:

  1. EDA por Cluster — Explorar características de cada grupo
  2. Análise Temporal — Como os clusters evoluem ao longo do tempo
  3. Radar Charts — Perfis visuais de P1 vs P2 por cluster
  4. MCA — Análise de correspondência para variáveis categóricas
✅ **Análise de Clustering Concluída**

📁 Dataset salvo: messages_clustered.parquet
   Clusters estruturais: 10

TipExportar Clusters

O dataset com clusters foi salvo em messages_clustered.parquet. Use-o nos próximos notebooks para análises segmentadas.