Métricas de Distância
O que é uma métrica de distância?
Uma métrica de distância (distance metric) (ou simplesmente uma métrica) é uma função que quantifica o quão distantes dois objetos estão. Em aprendizado de máquina (machine learning), “objetos” geralmente são vetores de características (e.g., pontos em (\mathbb{R}^d)), mas também podem ser strings, conjuntos, grafos, distribuições de probabilidade ou incorporações (embeddings).
Formalmente, uma métrica é uma função:
[ d: \mathcal{X}\times \mathcal{X} \to \mathbb{R} ]
onde (\mathcal{X}) é o espaço de objetos, e (d(x,y)) retorna a distância entre (x) e (y).
Distâncias são fundamentais em IA/AM porque muitos algoritmos e medidas de avaliação dependem da geometria induzida pela distância escolhida — o que “perto” e “longe” significam no seu espaço de representação.
Métrica vs. dissimilaridade vs. similaridade
Na prática, você verá três noções relacionadas:
- Distância métrica: satisfaz todos os axiomas de métrica (abaixo).
- Medida de dissimilaridade: “maior significa mais diferente”, mas pode violar axiomas de métrica (comum em sistemas reais).
- Medida de similaridade: “maior significa mais similar” (e.g., similaridade do cosseno (cosine similarity)). Muitas vezes é convertida em uma dissimilaridade.
Um ponto-chave: nem todas as “distâncias” comumente usadas são métricas verdadeiras, e isso pode importar tanto para correção quanto para desempenho (e.g., estruturas de indexação de vizinhos mais próximos frequentemente dependem da desigualdade triangular).
Propriedades centrais (axiomas de métrica)
Uma função (d(x,y)) é uma métrica se, para todo (x,y,z \in \mathcal{X}):
- Não negatividade:
[ d(x,y) \ge 0 ] - Identidade dos indiscerníveis:
[ d(x,y)=0 \iff x=y ] - Simetria:
[ d(x,y)=d(y,x) ] - Desigualdade triangular:
[ d(x,z) \le d(x,y) + d(y,z) ]
Essas propriedades implicam uma geometria consistente (um espaço métrico (metric space)) e permitem otimizações algorítmicas.
Relaxamentos comuns
- Pseudométrica (pseudometric): permite que pontos distintos tenham distância 0 (viola identidade).
- Semimétrica / dissimilaridade não métrica (semimetric / non-metric dissimilarity): pode violar a desigualdade triangular.
- Divergência (divergence): frequentemente assimétrica (e.g., divergência KL (KL divergence)), então não é uma métrica.
Por exemplo, a divergência KL é amplamente usada em modelagem probabilística, mas não é uma métrica (é assimétrica e viola a desigualdade triangular). Veja Probabilidade e Estatística e Teoria da Informação para conceitos relacionados.
Distâncias para vetores de valores reais
Muitos pipelines de AM representam dados como vetores. As distâncias mais comuns vêm de normas em Álgebra Linear.
Distância Euclidiana (\(L_2\))
Para (x,y \in \mathbb{R}^d):
[ d_2(x,y) = \sqrt{\sum_{i=1}^d (x_i - y_i)^2} ]
Intuição: distância em linha reta na geometria comum.
Onde é usada:
- k-means (especificamente a versão padrão do “algoritmo de Lloyd” (Lloyd’s algorithm))
- k-NN em características contínuas
- muitos índices de validade de clusterização (quando “distância” assume Euclidiana por padrão)
Nota prática: k-means tipicamente minimiza distâncias Euclidianas ao quadrado: [ \sum |x - \mu_{c(x)}|_2^2 ] Por isso os centros dos clusters são médias aritméticas.
Distância Manhattan (\(L_1\))
[ d_1(x,y) = \sum_{i=1}^d |x_i - y_i| ]
Intuição: distância “em quarteirões”; movimento ao longo dos eixos.
Onde é usada:
- Cenários robustos (menos sensível a outliers grandes em uma única coordenada do que (L_2))
- Clusterização k-medianas (k-medians clustering) (centro é a mediana por coordenada)
Distância de Minkowski (\(L_p\))
Uma família de distâncias:
[ d_p(x,y) = \left(\sum_{i=1}^d |x_i - y_i|^p\right)^{1/p} ]
- (p=1): Manhattan
- (p=2): Euclidiana
- (p\to\infty): distância de Chebyshev (abaixo)
Para (p \ge 1), distâncias de Minkowski são métricas válidas.
Distância de Chebyshev (\(L_\infty\))
[ d_\infty(x,y) = \max_i |x_i - y_i| ]
Intuição: apenas a maior diferença de coordenada importa.
Onde é usada:
- Controle de qualidade / restrições de tolerância (“deve estar dentro da tolerância em todas as dimensões”)
- Certas análises adversariais ou de pior caso
Similaridade do cosseno e “distância” do cosseno
A similaridade do cosseno mede o ângulo entre vetores:
[ \text{cos_sim}(x,y)=\frac{x\cdot y}{|x|_2|y|_2} ]
Uma dissimilaridade comum é:
[ d_{\text{cos}}(x,y)=1-\text{cos_sim}(x,y) ]
Importante: (1-) similaridade do cosseno é amplamente usada, mas não é garantido que satisfaça a desigualdade triangular, então pode não ser uma métrica verdadeira.
Se você quiser uma métrica apropriada em vetores não nulos (na esfera unitária), use a distância angular (angular distance):
[ d_{\text{ang}}(x,y)=\arccos(\text{cos_sim}(x,y)) ]
Onde medidas no estilo do cosseno são usadas:
- Incorporações de texto e busca semântica
- Características esparsas de alta dimensão (e.g., TF-IDF)
- Problemas em que “a direção importa mais do que a magnitude”
Distância de Mahalanobis
A distância de Mahalanobis considera escala e correlação entre características:
[ d_M(x,y) = \sqrt{(x-y)^\top \Sigma^{-1} (x-y)} ]
onde (\Sigma) é uma matriz de covariância (ou outra matriz definida positiva).
Interpretação: distância Euclidiana após “branquear” (whitening) o espaço por (\Sigma). Isso conecta geometria à estrutura estatística (veja Probabilidade e Estatística).
Onde é usada:
- Detecção de outliers e pontuação de anomalias
- Distância condicionada à classe quando características são correlacionadas
- Aprendizado de métricas (metric learning) e modelos Gaussianos
Distâncias para dados não vetoriais (e características estruturadas)
Muitas tarefas de AM envolvem tipos de dados não Euclidianos.
Distância de Hamming (vetores binários/categóricos)
Para strings de mesmo comprimento ou vetores binários, a distância de Hamming conta incompatibilidades:
[ d_H(x,y)=#{i : x_i \ne y_i} ]
Usada para:
- Impressões digitais binárias (binary fingerprints)
- Códigos corretores de erro
- Vetores categóricos one-hot (com ressalvas)
Distância de Jaccard (conjuntos / dados binários esparsos)
Para conjuntos (A,B):
[ \text{Jaccard}(A,B)=\frac{|A\cap B|}{|A\cup B|} \quad,\quad d_J(A,B)=1-\text{Jaccard}(A,B) ]
Usada para:
- Bag-of-words como conjuntos
- Sinais de recomendação (“sobreposição”)
- Características binárias esparsas
Distância de edição (strings)
A distância de Levenshtein (Levenshtein distance) conta inserções, deleções e substituições para transformar uma string em outra.
Usada para:
- Correção ortográfica
- Vinculação de registros / deduplicação
- Sequências em bioinformática
Distâncias em grafos (brevemente)
Distâncias em grafos podem significar comprimento do caminho mais curto, distâncias de difusão, ou distâncias aprendidas. Isso se conecta a Teoria dos Grafos e AM em grafos.
Exemplo prático: computando distâncias comuns
import numpy as np
def euclidean(x, y):
x = np.asarray(x); y = np.asarray(y)
return np.linalg.norm(x - y)
def manhattan(x, y):
x = np.asarray(x); y = np.asarray(y)
return np.abs(x - y).sum()
def minkowski(x, y, p=3):
x = np.asarray(x); y = np.asarray(y)
return (np.abs(x - y) ** p).sum() ** (1 / p)
def cosine_distance(x, y, eps=1e-12):
x = np.asarray(x); y = np.asarray(y)
nx = np.linalg.norm(x); ny = np.linalg.norm(y)
cos_sim = (x @ y) / (max(nx, eps) * max(ny, eps))
return 1 - cos_sim
x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 0.0, 4.0])
print("L2:", euclidean(x, y))
print("L1:", manhattan(x, y))
print("L3:", minkowski(x, y, p=3))
print("cos:", cosine_distance(x, y))
Pré-processamento: a “métrica” inclui sua escala de características
A distância é computada no espaço de representação que você fornece. Decisões de pré-processamento aparentemente pequenas podem alterar drasticamente vizinhanças.
Escalonamento de características
Se uma característica tem um intervalo numérico muito maior, ela pode dominar distâncias (L_2) e (L_1).
Exemplo: suponha que as características sejam ((\text{idade}, \text{renda})). A renda pode estar na casa das dezenas de milhares enquanto a idade fica abaixo de 100. A distância Euclidiana refletirá em grande parte a renda a menos que você reescale.
Práticas comuns:
- Padronização (standardization) (z-score): subtrair a média, dividir pelo desvio padrão
- Escalonamento min-max (min-max scaling)
- Normalização (normalization) para norma unitária (especialmente com comparações baseadas em cosseno/ângulo)
Isso se relaciona à geometria e a transformações de Álgebra Linear.
Correlação e whitening
Se características são correlacionadas, a distância Euclidiana “conta duas vezes” direções com informação redundante. A distância de Mahalanobis (ou transformações de whitening) corrige isso usando (\Sigma^{-1}).
Valores ausentes
Distâncias tipicamente assumem vetores completos. Opções incluem:
- Imputação (média/mediana/baseada em modelo)
- Distâncias que ignoram coordenadas ausentes com reponderação apropriada (cuidado com viés)
- Modelos que lidam explicitamente com ausência
Como a escolha da métrica afeta algoritmos de AM
k-Vizinhos Mais Próximos (k-NN)
k-NN depende diretamente de uma função de distância para definir vizinhanças. Mudar a distância muda:
- Quais pontos são “vizinhos”
- Fronteiras de decisão
- Sensibilidade a ruído e escalonamento de características
Exemplos de impacto:
- Com (L_2), outliers em uma única coordenada podem afetar fortemente os vizinhos mais próximos.
- Com (L_1), vizinhanças podem ser mais robustas a picos em uma única coordenada.
- Com distância do cosseno em incorporações, a “direção do tópico” importa mais do que a magnitude total.
Considerações computacionais:
Métricas verdadeiras com desigualdade triangular permitem busca de vizinhos mais próximos mais rápida via estruturas de dados (e.g., ball trees) e poda. Distâncias não métricas podem forçar mais comparações por força bruta.
k-means e clusterização baseada em centróides
O k-means padrão é fortemente acoplado à distância Euclidiana ao quadrado:
- A atualização do centro do cluster (média) é ótima para (L_2^2).
- Se você mudar a distância, a “média como centróide” pode deixar de minimizar o objetivo.
Alternativas comuns:
- k-medoids: usa pontos reais dos dados como centros; funciona com dissimilaridades arbitrárias.
- k-medians: usa (L_1); centro é a mediana por coordenada.
- k-means esférico (spherical k-means): normaliza vetores e agrupa usando similaridade do cosseno/distância angular.
Isso é tanto um problema de geometria quanto de otimização (veja Otimização).
Clusterização baseada em densidade (intuição de DBSCAN/HDBSCAN)
Algoritmos como DBSCAN definem vizinhanças via uma bola-(\varepsilon) sob uma distância. A distância escolhida muda:
- Quais pontos são “densos”
- Se clusters se fundem ou se separam
Propriedades métricas podem importar para eficiência e pressupostos de correção.
Redução de dimensionalidade e aprendizado de variedades
Muitas técnicas de incorporação/visualização dependem de distâncias par a par ou grafos de vizinhança:
- t-SNE/UMAP constroem vizinhanças com base em distâncias/similaridades.
- PCA usa geometria Euclidiana no espaço de características (após centragem), conectando-se a Álgebra Linear.
Se sua distância não reflete similaridade semântica, esses métodos podem produzir estrutura enganosa.
A “maldição da dimensionalidade” e concentração de distâncias
Em alta dimensionalidade, muitas distâncias se tornam menos informativas: pontos tendem a parecer igualmente distantes entre si (concentração de distâncias). Implicações práticas:
- k-NN pode degradar a menos que as características sejam significativas e escalonadas.
- Similaridade do cosseno pode ser mais estável em certos cenários esparsos de alta dimensionalidade.
- Redução de dimensionalidade, seleção de características ou incorporações aprendidas podem ajudar.
A distância afeta a avaliação: silhouette score (e relacionados)
A avaliação de clusterização frequentemente depende de distâncias entre pontos.
Silhouette score
Para cada ponto (i):
- (a(i)): distância média até pontos do seu próprio cluster
- (b(i)): menor distância média até pontos de outros clusters (cluster vizinho mais próximo)
Silhouette para o ponto (i):
[ s(i) = \frac{b(i)-a(i)}{\max(a(i), b(i))} ]
O silhouette score geral é a média de (s(i)) sobre os pontos.
Por que a escolha da distância importa:
Trocar de Euclidiana para cosseno pode mudar tanto a compacidade intra-cluster ((a)) quanto a separação entre clusters ((b)), às vezes invertendo qual clusterização parece “melhor”.
Outros índices de clusterização
Muitos outros índices assumem implicitamente uma distância:
- Índice Davies–Bouldin
- Índice Dunn
- Soma de quadrados intra-cluster (WCSS) para k-means
Ao reportar resultados, é uma boa prática declarar explicitamente a distância e o pré-processamento.
Exemplo prático: silhouette com métricas diferentes
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
from sklearn.preprocessing import StandardScaler, normalize
import numpy as np
X, _ = make_blobs(n_samples=800, centers=4, random_state=0, cluster_std=2.2)
# Euclidean silhouette (after standardization)
Xe = StandardScaler().fit_transform(X)
labels = KMeans(n_clusters=4, n_init="auto", random_state=0).fit_predict(Xe)
print("Silhouette (euclidean):", silhouette_score(Xe, labels, metric="euclidean"))
# Cosine silhouette (after L2-normalization)
Xc = normalize(Xe) # unit norm, cosine becomes angle-based
labels2 = KMeans(n_clusters=4, n_init="auto", random_state=0).fit_predict(Xc)
print("Silhouette (cosine):", silhouette_score(Xc, labels2, metric="cosine"))
Nota: o silhouette_score do scikit-learn suporta várias métricas, mas a interpretação só é tão significativa quanto a distância for para seus dados.
Escolhendo uma métrica de distância: diretrizes práticas
1) Faça a métrica combinar com o tipo de dado e as invariâncias
- Características contínuas: Euclidiana/Manhattan/Mahalanobis
- Contagens/incorporações esparsas de alta dimensão: cosseno ou distância angular
- Presença/ausência binária: Jaccard ou Hamming (dependendo do significado)
- Strings: distância de edição
- Características correlacionadas: Mahalanobis ou whitening
Pergunte: Quais transformações não deveriam mudar a similaridade?
- Se a magnitude não deveria importar (apenas a direção), normalize e use distância baseada em cosseno/ângulo.
- Se cada coordenada é um “orçamento” separado com o qual você se importa, (L_\infty) pode ser apropriada.
2) Escalone características antes de usar distâncias \(L_p\)
A maioria das falhas com distância Euclidiana em AM na verdade são falhas de escalonamento de características e de representação.
3) Considere robustez
- (L_2) penaliza desvios grandes com força.
- (L_1) frequentemente é mais robusta a outliers.
4) Considere computação e indexação
Se você precisa de busca rápida de vizinhos mais próximos em escala:
- Métricas verdadeiras permitem poda via desigualdade triangular (embora alta dimensionalidade ainda prejudique).
- Não métricas (algumas variantes de cosseno, dissimilaridades customizadas) podem exigir métodos aproximados ou por força bruta.
5) Valide com desempenho a jusante e estabilidade
Raramente existe uma métrica universalmente “melhor”. Valide por:
- Desempenho em validação cruzada (para classificadores/regressores k-NN)
- Estabilidade de clusterização sob reamostragem
- Métricas de recuperação específicas do domínio (precision@k, recall@k)
- Índices de clusterização (silhouette, etc.) com métrica/pré-processamento claramente declarados
Resumo
Métricas de distância definem a geometria do seu espaço de dados. Uma métrica deve satisfazer não negatividade, identidade, simetria e desigualdade triangular; muitas “distâncias” úteis em AM são, na verdade, dissimilaridades que relaxam uma ou mais dessas propriedades. Escolhas comuns incluem Euclidiana ((L_2)), Manhattan ((L_1)), Minkowski ((L_p)), distâncias baseadas em cosseno/ângulo e distância de Mahalanobis.
A escolha da métrica — e o pré-processamento que efetivamente a define — pode mudar substancialmente o comportamento e os resultados de algoritmos como k-NN, k-means e suas variantes, clusterização baseada em densidade e medidas de avaliação como silhouette score. A melhor métrica é aquela cuja noção de “proximidade” corresponde à semântica da sua tarefa, ao tipo de dado e às restrições computacionais.