Aprendizado de Máquina Não Supervisionado: Clustering com Python
1. O que é Clustering?
Clustering, ou agrupamento, é o processo de dividir um conjunto de dados em grupos de objetos semelhantes entre si e diferentes de objetos de outros grupos. Diferente do aprendizado supervisionado, não existem “respostas corretas” – o objetivo é explorar e entender a estrutura dos dados.
Aplicações comuns de clustering:
Segmentação de clientes em marketing.
Detecção de anomalias em redes financeiras.
Agrupamento de genes ou proteínas em bioinformática.
Análise de comportamento de usuários em sites e apps.
2. Tipos de algoritmos de Clustering
Existem diversos métodos para realizar clustering, cada um com características próprias:
Agrupa os dados em
kclusters com base na distância euclidiana.Simples, rápido e eficiente para grandes volumes de dados.
Hierárquico (Hierarchical Clustering)
Cria uma árvore de clusters (dendrograma), útil para entender relações de subgrupos.
DBSCAN (Density-Based Spatial Clustering of Applications with Noise)
Agrupa pontos densos e detecta ruídos/anomalias.
Não exige definir o número de clusters antecipadamente.
Gaussian Mixture Models (GMM)
Assume que os dados vêm de combinações de distribuições gaussianas.
Permite clusters de formas variadas.
3. Preparando o ambiente em Python
Para começar, instale as bibliotecas necessárias:
pip install pandas numpy matplotlib seaborn scikit-learn
Importando bibliotecas essenciais:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
4. Exemplo prático: Clustering de clientes fictícios
Suponha que temos um dataset de clientes de uma loja com informações de Idade e Renda Anual (em milhares de dólares).
# Criando dataset fictício
data = {'Idade': [25, 34, 22, 45, 33, 36, 52, 23, 40, 30],
'Renda_Anual': [30, 60, 20, 80, 55, 65, 90, 25, 70, 50]}
df = pd.DataFrame(data)
# Visualizando os dados
sns.scatterplot(x='Idade', y='Renda_Anual', data=df)
plt.title('Distribuição de Clientes')
plt.show()
4.1 Pré-processamento
É importante padronizar os dados antes de aplicar K-Means:
scaler = StandardScaler()
scaled_data = scaler.fit_transform(df)
4.2 Aplicando K-Means
# Criando o modelo K-Means
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(scaled_data)
# Adicionando os clusters ao dataframe
df['Cluster'] = kmeans.labels_
print(df)
4.3 Visualizando os clusters
sns.scatterplot(x='Idade', y='Renda_Anual', hue='Cluster', palette='Set1', data=df)
plt.title('Clusters de Clientes')
plt.show()
Com apenas algumas linhas, conseguimos identificar grupos de clientes com características similares, permitindo decisões estratégicas de marketing e segmentação.
5. Escolhendo o número ideal de clusters
O método do cotovelo (Elbow Method) ajuda a determinar o número ótimo de clusters:
inertia = []
for k in range(1, 10):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(scaled_data)
inertia.append(kmeans.inertia_)
plt.plot(range(1, 10), inertia, marker='o')
plt.xlabel('Número de clusters')
plt.ylabel('Inércia')
plt.title('Método do Cotovelo')
plt.show()
O ponto onde a diminuição da inércia começa a ficar menos acentuada é geralmente o número ideal de clusters.
6. Clustering Avançado
Além do K-Means, você pode explorar:
Hierarchical Clustering:
from sklearn.cluster import AgglomerativeClusteringDBSCAN:
from sklearn.cluster import DBSCANGMM:
from sklearn.mixture import GaussianMixture
Cada método possui vantagens dependendo da forma, densidade e quantidade de dados.
7. Boas práticas
Sempre visualize os dados antes e depois do clustering.
Padronize ou normalize os dados para que diferentes escalas não influenciem os clusters.
Experimente diferentes métricas de distância (
euclidean,manhattan) dependendo do problema.Use métodos de validação, como silhouette score, para avaliar a qualidade dos clusters:
from sklearn.metrics import silhouette_score
score = silhouette_score(scaled_data, df['Cluster'])
print(f'Silhouette Score: {score:.2f}')
8. Aplicações reais
E-commerce: Agrupar clientes para campanhas personalizadas.
Financeiro: Identificar perfis de risco de crédito.
Saúde: Agrupamento de pacientes por sintomas ou resultados de exames.
IoT e sensores: Detectar padrões de comportamento em dados de dispositivos.
Conclusão
O clustering em Python é uma ferramenta poderosa para explorar dados de forma não supervisionada, revelando padrões e insights que não seriam percebidos de outra maneira. Com bibliotecas como Scikit-learn e visualizações intuitivas com Matplotlib e Seaborn, é possível implementar desde soluções básicas até pipelines avançados de análise de dados.
O próximo passo é experimentar diferentes algoritmos, aplicar em datasets reais e combinar clustering com outras técnicas de Machine Learning para extrair valor máximo dos dados.

Comentários
Postar um comentário