Pular para o conteúdo principal

Introdução ao clustering hierárquico em Python

Entenda a fundo o clustering hierárquico e como implementá-lo em Python
Atualizado 17 de set. de 2026  · 13 min lido

Explorar com IA

ChatGPTClaudePerplexity

Hierarchical Clustering Python Tutorial

Motivação

Imagine que você é um cientista de dados em uma empresa de varejo. Sua liderança pediu para segmentar os clientes nos seguintes grupos: clientes de baixo gasto, médios, altos ou platinum, com base no comportamento de consumo, para campanhas de marketing segmentadas e recomendações de produtos.

Sabendo que não existem rótulos históricos associados a esses clientes, como categorizá-los?

É aqui que o clustering ajuda. Trata-se de uma técnica de machine learning não supervisionada usada para agrupar dados sem rótulos em categorias semelhantes.

Este tutorial foca na abordagem de clustering hierárquico, uma entre várias técnicas de aprendizado não supervisionado. Vamos começar com uma visão geral do que é clustering hierárquico e depois compará-lo com outras técnicas conhecidas.

Em seguida, vamos guiar você por uma implementação passo a passo em Python usando a popular biblioteca Scipy.

Definição de clustering hierárquico

O clustering hierárquico é baseado na determinação de agrupamentos sucessivos a partir de clusters previamente formados. É uma técnica voltada para organizar os dados em uma árvore de clusters, chamada de dendrograma, que representa graficamente a relação hierárquica entre os agrupamentos.

Comparação do clustering hierárquico com outras técnicas de clustering

Clustering hierárquico é um algoritmo poderoso, mas não é o único, e cada tipo de clustering tem seus prós e contras.

Vamos entender como ele se compara a outros tipos, como K-means e o clustering baseado em modelos. Existem muitas outras técnicas, mas essas duas, além do clustering hierárquico, são amplamente usadas e ajudam a criar um referencial para entender as demais.

Você pode saber mais sobre clustering em machine learning neste artigo separado, que cobre cinco algoritmos essenciais.

Clustering hierárquico vs. K-means

Diferentemente do clustering hierárquico, o K-means busca particionar os dados originais em “K” grupos ou clusters, em que o usuário define “K” antecipadamente.

A ideia geral é encontrar clusters que minimizem a distância euclidiana quadrática de todos os pontos aos respectivos centros, considerando todos os atributos (variáveis ou features), e mesclar os indivíduos de forma iterativa.

Nosso tutorial K-means clustering em Python com Scikit-learn vai ajudar você a entender o funcionamento interno do K-means com um estudo de caso interessante.

Vantagens

  • É computacionalmente mais eficiente que o clustering hierárquico e pode ser usado para analisar grandes conjuntos de dados.
  • K-means é mais simples de entender e implementar.

Desvantagens

  • É menos flexível que o clustering hierárquico porque exige que o usuário defina o número de clusters antes, o que pode não ser óbvio em alguns cenários.
  • O resultado não é estável e pode mudar de uma iteração para outra com o mesmo conjunto de dados.
  • É mais sensível a outliers, pois a presença de outliers afeta a média do cluster.
  • Tanto k-means quanto o clustering hierárquico não lidam diretamente com dados categóricos e podem não funcionar bem com dados não contínuos ou com variância muito alta.

Apesar das limitações, o K-means continua popular pela facilidade de uso e eficiência computacional. Ele é frequentemente usado como referência para comparar o desempenho de outras técnicas de clustering.

Clustering baseado em modelos

Tanto K-means quanto o clustering hierárquico usam uma matriz de distâncias para representar as distâncias entre todos os pontos do dataset. Já o clustering baseado em modelos aplica técnicas estatísticas para identificar clusters nos dados. O processo geral é:

  • Definir o modelo estatístico a ser usado e escolher o número de clusters.
  • Ajustar o modelo aos dados.
  • Identificar os clusters com base nos parâmetros do modelo.

Vantagens

  • É mais flexível que o clustering hierárquico, pois permite usar diferentes modelos para identificar diferentes tipos de clusters.
  • Funciona melhor com dados que têm formas ou estruturas complexas.

Desvantagens

  • É computacionalmente mais caro que o clustering hierárquico, especialmente em grandes volumes de dados.
  • Exige maior conhecimento de modelagem estatística, já que a escolha do modelo pode afetar o resultado final.
  • Assim como o K-means, requer a especificação prévia do número de clusters.

Aplicações do clustering hierárquico

O clustering hierárquico tem diversas aplicações no dia a dia, incluindo (mas não se limitando a) biologia, processamento de imagens, marketing, economia e análise de redes sociais.

Biologia

O agrupamento de sequências de DNA é um dos maiores desafios em bioinformática.

Biólogos podem usar clustering hierárquico para estudar relações genéticas entre organismos e classificá-los em grupos taxonômicos. Isso facilita a análise rápida e a visualização dos relacionamentos subjacentes.

Processamento de imagens

No processamento de imagens, o clustering hierárquico pode agrupar regiões ou pixels semelhantes em termos de cor, intensidade ou outras características. Isso é útil para tarefas como segmentação de imagens, classificação de imagens e reconhecimento de objetos.

Marketing

Profissionais de marketing podem usar clustering hierárquico para estabelecer uma hierarquia entre diferentes tipos de clientes com base em seus hábitos de compra, permitindo estratégias de marketing mais assertivas e melhores recomendações de produtos. Por exemplo, diferentes produtos no varejo podem ser recomendados conforme clientes gastem pouco, médio ou muito.

Análise de redes sociais

Redes sociais são uma grande fonte de informação valiosa quando bem exploradas. O clustering hierárquico pode ser usado para identificar grupos ou comunidades, entender suas relações e a estrutura da rede como um todo.

O algoritmo de clustering hierárquico

Nesta seção, veremos três conceitos principais: as etapas do algoritmo hierárquico, os dois tipos de clustering hierárquico (aglomerativo e divisivo) e, por fim, algumas técnicas para escolher a melhor medida de distância.

Etapas envolvidas no algoritmo

O algoritmo de clustering hierárquico usa medidas de distância para gerar clusters. Esse processo envolve as etapas principais abaixo:

Creating Hierarchical Clustering Algorithm

Pré-processe os dados removendo valores ausentes e aplicando tarefas adicionais para deixá-los o mais limpos possível. Essa etapa é geral para a maioria das tarefas de machine learning.

1. Calcule a matriz de distâncias contendo a distância entre cada par de pontos, usando uma métrica específica como distância euclidiana, Manhattan ou similaridade do cosseno. A métrica padrão costuma ser a euclidiana.

2. Una os dois clusters mais próximos.

3. Atualize a matriz de distâncias considerando os novos clusters.

4. Repita os passos 1, 2 e 3 até que todos os clusters sejam mesclados em um único cluster.

Exemplos de clustering hierárquico

Podemos considerar os métodos aglomerativo e divisivo como espelhos um do outro. Vamos ver como cada um opera, com exemplo e visualização.

Clustering hierárquico aglomerativo

Este primeiro cenário corresponde à abordagem explicada acima. Começa tratando cada observação como um cluster unitário (apenas um ponto). Em seguida, mescla os clusters iterativamente até restar apenas um. Esse processo também é chamado de abordagem bottom-up.

Como mostrado na ilustração abaixo:

  • Começamos tratando cada animal como seu próprio cluster.
  • Depois geramos três clusters diferentes a partir desses animais, com base em suas semelhanças:
    • Aves: águia e pavão
    • Mamíferos: leão e urso
    • Animais com mais de três pernas: aranha e escorpião.
  • Repetimos o processo de mesclagem para criar o cluster Vertebrados combinando os dois clusters mais semelhantes: Aves e Mamíferos.
  • Depois disso, os dois clusters restantes, Vertebrados e Mais de três pernas, são unidos para formar um único cluster Animais.

Dendrogram of Agglomerative Clustering Approach

Dendrograma da abordagem aglomerativa

Clustering divisivo

Já o clustering divisivo é top-down, pois começa considerando todos os pontos como um único cluster, e então os separa até que todos os pontos fiquem isolados.

Na ilustração do método divisivo:

  • Percebemos que o conjunto de animais é considerado como um único bloco.
  • Depois, dividimos esse bloco em dois clusters: Vertebrados e Mais de 3 pernas.
  • A divisão é aplicada iterativamente aos clusters criados até chegarmos aos animais individuais.

Dendrogram of Divisive Clustering Approach

Dendrograma da abordagem divisiva

Escolhendo a medida de distância certa

A escolha da medida de distância é crítica no clustering e depende do problema que você quer resolver. Considerando o cenário a seguir, poderíamos agrupar alunos com base em qualquer uma das abordagens, como:

  • País de origem
  • Gênero
  • Formação acadêmica anterior

Todas são formas válidas de agrupar, mas com significados diferentes.

Embora a distância euclidiana seja a mais comum na maioria dos softwares de clustering, outras medidas existem, como Manhattan, Canberra, correlação de Pearson ou Spearman e Minkowski.

Como medir os clusters antes de uni-los

As distâncias mencionadas acima se referem a itens. Aqui, cobrimos três formas padrão (não exaustivas) de medir o par de clusters mais próximo antes de mesclá-los: (1) single linkage, (2) complete linkage e (3) average linkage.

Single linkage

Entre todas as distâncias par-a-par entre os itens dos clusters C1 e C2, o single linkage considera como distância entre os clusters a menor distância.

Distância (C1, C2) = Min { d(i, j), em que o item i está em C1 e o item j está em C2}

Entre todos os pares de itens dos dois clusters, os destacados em verde têm a menor distância.

Single linkage illustration

Ilustração de single linkage

Complete linkage

Entre todas as distâncias par-a-par entre os itens dos clusters C1 e C2, o complete linkage considera como distância entre os clusters a maior distância.

Distância (C1, C2) = Max { d(i, j), em que o item i está em C1 e o item j está em C2}

Entre todos os pares de itens dos dois clusters, os destacados em verde têm a maior distância.

Complete linkage illustration

Ilustração de complete linkage

Average linkage

No average linkage, a distância entre dois clusters C1 e C2 corresponde à média das distâncias entre todos os pares de itens dos dois clusters.

Distância (C1, C2) = Soma{ d(i, j) } / número total de distâncias

Average linkage illustration

Ilustração de average linkage

Então, o average linkage é calculado assim

d(a,j) + d(a,h) + d(a,n) + d(d,j) + d(d,h) + d(d,n)

—-----------------------------------------------------------, onde o número total de distâncias = 6

número total de distâncias

Implementando clustering hierárquico em Python

Agora que você entendeu como o clustering hierárquico funciona, nesta seção vamos para a implementação técnica em Python.

Se você prefere implementar em R, nosso tutorial Hierarchical clustering em R é o ponto de partida.

Preparando o ambiente

Para começar, você precisa ter o Python instalado no computador, além das seguintes bibliotecas:

  • Pandas para carregar o data frame.
  • Scikit-learn para normalização dos dados.
  • Seaborn e matplotlib para visualização.
  • Scipy para aplicar o clustering.

Você pode instalar essas bibliotecas com o pip, o gerenciador de pacotes do Python, assim:

pip install scikit-learn
pip install pandas

pip install matplotlib seaborn

pip install scipy

Em seguida, vamos importar os módulos necessários e carregar o conjunto de dados. Usaremos o dataset Iris embutido no scikit-learn, que contém informações sobre diferentes tipos de flores iris.

Para ilustrar melhor o caso, vamos usar o Loan Data disponível no DataLab. Todo o código deste tutorial está nesta workbook do DataLab; você pode criar uma cópia e executar o código no navegador, sem instalar nada no seu computador.

Entendendo os dados

O conjunto possui 9.500 empréstimos com informações sobre a estrutura do empréstimo, o tomador e se o empréstimo foi quitado integralmente. Vamos remover a coluna alvo not.fully.paid para manter o caráter não supervisionado.

import pandas as pd
loan_data = pd.read_csv("loan_data.csv")
loan_data.head()

First five rows of the load dataPrimeiras cinco linhas dos dados

A instrução a seguir mostra que os dados têm 9.578 linhas e 14 colunas de tipos numéricos, exceto purpose, que é um objeto e traz a descrição textual do propósito do empréstimo.

loan_data.info()

Information about the dataInformações sobre os dados

Pré-processamento dos dados

Antes de aplicar o clustering, os dados precisam ser pré-processados para lidar com ausências, normalizar valores de colunas e remover colunas irrelevantes.

Tratando valores ausentes

Pelo resultado abaixo, notamos que não há valores ausentes nos dados.

percent_missing =round(100*(loan_data.isnull().sum())/len(loan_data),2)
percent_missing

Percentage of missing values in the dataPercentual de valores ausentes

Remover colunas indesejadas

Vamos analisar os dados do empréstimo usando todas as colunas, exceto:

  • purpose
  • not.fully.paid, pois é o rótulo que indica se o tomador quitou totalmente ou não.

cleaned_data corresponde aos dados sem as colunas acima.

cleaned_data = loan_data.drop(['purpose', 'not.fully.paid'], axis=1)
cleaned_data.info()

A imagem abaixo mostra as informações do novo conjunto.

New data without the unwanted columns

Novos dados sem as colunas indesejadas

Análise de outliers

Uma das fraquezas do clustering hierárquico é a sensibilidade a outliers. A distribuição de cada variável pode ser vista no boxplot.

def show_boxplot(df):
plt.rcParams['figure.figsize'] = [14,6]
sns.boxplot(data = df, orient="v")
plt.title("Outliers Distribution", fontsize = 16)
plt.ylabel("Range", fontweight = 'bold')
plt.xlabel("Attributes", fontweight = 'bold')
   
show_boxplot(cleaned_data)


Boxplot of all the variables in the data

Boxplot de todas as variáveis

O saldo rotativo do tomador (revol_bal) é o único atributo com pontos bem afastados do restante.

Usando a abordagem do intervalo interquartílico (IQR), podemos remover os pontos fora do intervalo definido por quartis +/- 1,5 * IQR, em que IQR é o intervalo interquartílico.

Isso é feito com a função auxiliar abaixo.

def remove_outliers(data):
   
df = data.copy()
   
for col in list(df.columns):
 
      Q1 = df[str(col)].quantile(0.05)
      Q3 = df[str(col)].quantile(0.95)
      IQR = Q3 - Q1
      lower_bound = Q1 - 1.5*IQR
      upper_bound = Q3 + 1.5*IQR
 
      df = df[(df[str(col)] >= lower_bound) & 

        (df[str(col)] <= upper_bound)]
   
return df

Depois, aplicamos a função ao conjunto de dados.

without_outliers = remove_outliers(cleaned_data)

Agora podemos verificar o novo boxplot e comparar com o anterior à remoção dos outliers.

show_boxplot(without_outliers)

Outliers Distribution

Não há mais pontos fora do intervalo interquartílico.

without_outliers.shape

O shape agora é 9.319 linhas e 12 colunas. Isso significa que 259 observações eram outliers e foram removidas.

Reescalar os dados

Como o clustering hierárquico usa distância euclidiana, que é muito sensível a variáveis em escalas diferentes, é recomendável reescalar todas as variáveis antes de calcular distâncias.

Usaremos a classe StandardScaler do sklearn.

from sklearn.preprocessing import StandardScaler

data_scaler = StandardScaler()

scaled_data = data_scaler.fit_transform(without_outliers)
scaled_data.shape

O shape permanece o mesmo (9.319 linhas, 12 colunas) porque a normalização não altera as dimensões.

Aplicando o algoritmo de clustering hierárquico

Com os pré-requisitos atendidos, vamos à implementação do algoritmo.

Neste ponto, podemos escolher qual método de linkage adotar no atributo method da função linkage(). Aqui vamos cobrir as três técnicas usando distância euclidiana.

Isso é feito com o código abaixo, após importar as bibliotecas relevantes.

from scipy.cluster.hierarchy import linkage, dendrogram

complete_clustering = linkage(scaled_data, method="complete", metric="euclidean")
average_clustering = linkage(scaled_data, method="average", metric="euclidean")
single_clustering = linkage(scaled_data, method="single", metric="euclidean")

Depois de calcular os três agrupamentos, os dendrogramas correspondentes são mostrados a seguir, começando pelo complete linkage

dendrogram(complete_clustering)
plt.show()

Dendrogram of the complete clustering approach

Dendrograma do método complete linkage

dendrogram(average_clustering)
plt.show()

Dendrogram of the average clustering approach

Dendrograma do método average linkage

dendrogram(single_clustering)
plt.show()

Dendrogram of the single clustering approach

Dendrograma do método single linkage

Interpretando os resultados (visualizando o dendrograma, determinando o número de clusters)

Para cada método de linkage, o dendrograma mostra como é construída a hierarquia até que todos os pontos pertençam a um único cluster.

  • O eixo x do dendrograma representa as amostras.
  • O eixo y representa a distância entre essas amostras. Quanto mais alta a linha, maior a dissimilaridade entre amostras/clusters.
  • Obtemos o número adequado de clusters traçando uma linha horizontal ao longo da maior linha vertical; o número de interseções corresponde ao número de clusters.

O número ideal de clusters é obtido identificando a maior linha vertical que não cruza nenhuma outra (linha horizontal). Essa linha está destacada abaixo com um círculo vermelho e um check verde.

  • Para complete linkage, é a linha azul à direita, gerando três clusters.

Optimal number of cluster from the highest distance without intersection (complete linkage)

Número ideal de clusters pela maior distância sem interseção (complete linkage)

  • Para average linkage, é a primeira linha vertical azul, gerando dois clusters.

Optimal number of clusters from the highest distance without intersection (average linkage)

Número ideal de clusters pela maior distância sem interseção (average linkage)

  • Para single linkage, é a primeira linha vertical, gerando apenas um cluster.

Optimal number of clusters from the highest distance without intersection

Número ideal de clusters pela maior distância sem interseção (single linkage)

Pelas observações acima, o average linkage parece oferecer o melhor agrupamento, ao contrário do single e do complete linkage, que sugerem, respectivamente, um e três clusters. Além disso, o número ideal de dois clusters corresponde ao nosso conhecimento prévio do dataset, ou seja, dois tipos de tomadores.

Agora que encontramos o número ideal de clusters, vamos ver o que eles significam com base no score de crédito (fico) dos tomadores.

cluster_labels = cut_tree(average_clustering, n_clusters=2).reshape(-1, )
without_outliers["Cluster"] = cluster_labels

sns.boxplot(x='Cluster', y='fico', data=without_outliers)

Boxplot

No boxplot acima, observamos que:

  • Tomadores do cluster 0 têm scores de crédito mais altos.
  • Já os do cluster 1 têm scores mais baixos.

Cluster Analysis in Python pode ser um ótimo próximo passo para se aprofundar em K-means e clustering hierárquico com a biblioteca Scipy.

Conclusão

Este artigo abordou o que é clustering hierárquico, seus pontos fortes e fracos, e como ele se compara ao K-means e ao clustering baseado em modelos.

Esperamos que o conteúdo ajude você a desenvolver as competências necessárias para agrupar seus dados sem rótulos de forma eficiente e tomar decisões acionáveis.

Perguntas frequentes sobre clustering hierárquico

Como escolher o número certo de clusters?

No clustering hierárquico, o número adequado de clusters pode ser determinado a partir do dendrograma, identificando a maior linha vertical de distância que não tenha interseção com outros clusters.

Como lidar com dados categóricos no clustering hierárquico?

Por padrão, o clustering hierárquico não funciona com dados categóricos. Uma forma de lidar com isso é convertê-los para um formato numérico adequado, como one-hot encoding ou ordinal encoding, antes de aplicar o algoritmo.

Como lidar com conjuntos de dados grandes?

Quanto maior o volume de dados, maior o tempo de processamento do clustering. Usar a abordagem aglomerativa pode ser mais rápido que a divisiva.

O que é agglomerative information bottleneck (AIB)?

É um algoritmo de clustering que maximiza a informação mútua por cluster entre os dados e um conjunto de categorias predefinidas.

O que é weighted hierarchical clustering?

É uma variação do clustering hierárquico que atribui um peso a cada ponto de dados para refletir sua importância ou relevância no processo de agrupamento.

Tópicos
Python
Aprendizado de máquina

Cursos de clustering

Curso

Análise de cluster em Python

4 h
65.8K
Conheça o aprendizado não supervisionado por meio de técnicas como agrupamento hierárquico e k-means usando a biblioteca SciPy.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

blog

Clusterização em machine learning: 5 algoritmos essenciais de clusterização

Explore cinco algoritmos-chave de clusterização não supervisionada — K-Means, DBSCAN, MeanShift, hierárquico e BIRCH — além de aplicações de negócio e um gu
Moez Ali's photo

Moez Ali

15 min

Clustering k-means

Tutorial

Introdução ao k-Means Clustering com o scikit-learn em Python

Neste tutorial, saiba como aplicar o k-Means Clustering com o scikit-learn em Python

Kevin Babitz

8 min

Tutorial

Tutorial de mineração de regras de associação em Python

Descobrindo padrões ocultos em Python com mineração de regras de associação
Moez Ali's photo

Moez Ali

14 min

Tutorial

Tutorial de manipulação de dados categóricos de aprendizado de máquina com Python

Aprenda os truques comuns para lidar com dados categóricos e pré-processá-los para criar modelos de aprendizado de máquina!
Moez Ali's photo

Moez Ali

14 min

Tutorial

Introdução ao Q-learning: um tutorial para iniciantes

Aprenda o algoritmo de aprendizado por reforço sem modelo mais popular com um tutorial em Python.
Abid Ali Awan's photo

Abid Ali Awan

11 min

Tutorial

Histogramas no Matplotlib

Aprenda sobre histogramas e como você pode usá-los para obter insights dos dados com a ajuda do matplotlib.
Aditya Sharma's photo

Aditya Sharma

8 min

Ver MaisVer Mais