Entendendo porque é que a distância certa faz toda a diferença

Aprendendo a escolher a melhor distância para o seu tipo de dados

Ricardo Pinto
Data Hackers
4 min readAug 7, 2020

--

Quantas vezes já nos deparamos com aquele parâmetro distância dentro dos algoritmos de machine learning?

Foto por Anne Nygard no Unsplash

Mas alguma vez já paraste para pensar que ele pode ser decisivo para o teu sucesso?

Spoiler: Este não é um post para te explicar o que é cada uma das distâncias e a matemática por trás delas.

Durante o desenvolvimento do meu último projeto (links no final) acabei por mergulhar mais fundo neste tema, e nada melhor do que partilhar esse aprendizado.

Tudo começou pela necessidade de clusterizar um conjunto de dados. Os clusters se formam de acordo com a proximidade dos pontos entre si, e esta proximidade pode ser tanto uma distância propriamente dita, por exemplo agrupar pessoas pela idade (a distância entre uma pessoa de 20 e outra de 25 anos é de 5), ou uma similaridade, por exemplo uma empresa com x caraterísticas e outra com y características (resumindo procuramos se são do mesmo setor, quantos empregados têm, o seu faturamento, etc.), e é justamente nesta “medição” que entra o fator chave, a distância.

Ok, mas a questão importante é: como escolher essa distância?

O primeiro fator e talvez o mais importante é:

Qual o tipo de dados.

A forma como preparamos os dados vai determinar como será a “cara” deles no final, isto é, se são categóricos, discretos ou contínuos, e esse é o ponto de partida.

Como por exemplo a boa e velha distância euclidiana que mede a distância em linha reta entre dois pontos. Mas a distância em linha reta entre dois pontos não representa a menor distância e consequentemente a melhor?

Pois como tudo o resto em ciência de dados a resposta é: depende!

Se os teus dados são exclusivamente contínuos ou exclusivamente discretos, sim, é um ótimo ponto de partida.

No entanto a distância de Manhattan, mais facilmente explicável pela figura seguinte, pode ser uma alternativa melhor, mas infelizmente a única forma de avaliar a diferença é testando o modelo com ambas.

Tirado da Wikipedia

Assim como rapidamente se entende que dados exclusivamente categóricos, sendo eles ou 0 ou 1, por muito que representem dimensões diferentes, vão sempre apresentar distâncias entre si similares e pouco variadas se tentarmos medi-las com a euclidiana ou a manhattan. E se o objetivo é entender a diferença entre os pontos, valores similares não ajudam, certo?

Aqui entram os chamados coeficientes de similaridade, como por exemplo o coeficiente Sørensen–Dice que resumidamente mede o quanto os pontos se sobrepõem:

Tirado do site StructSeg

Parece familiar?

Pois é, o F1-score lá da matriz confusão aplica o mesmo conceito.

Existem outros coeficientes de similaridade como o Bray-Curtis por exemplo.

Mas o que importa saber é que medir dados binários com outro tipo de distâncias não traz bons resultados, apesar do modelo continuar rodando tranquilo.

Achou interessante? No entanto as bases de dados geralmente contêm dados misturados. Aqui o bicho pega! Comparar uma feature que varia de 0 a infinito com outra que é 0 ou 1 não é fácil.

Obviamente os gênios da estatística não nos iriam desiludir e por isso temos o exemplo da distância gower que combina a distância manhattan com o coeficiente dice para solucionar este problema.

Nota: Para quem quiser saber mais sobre ela pode visitar este link, e com o bônus de já indicar implementação Python! Pois é, aqui o R ainda ganha 😠, a diversidade de bibliotecas estatísticas implementadas e consequentemente as suas ferramentas são melhores.

Quer dizer que ainda temos mais considerações para escolher a distância?

Claro, em particular quando se trata de algoritmos de clusterização, cada um traz uma solução diferente. Por exemplo o famoso K-means tende a gerar grupos mais “redondos” de tamanho e forma similares e o seu objetivo é minimizar a variância interna. Por consequência outras distâncias que não do tipo euclidiana podem não convergir. Podem visualizar o funcionamento deste algoritmo aqui.

Já por sua vez o K-medoids, um algoritmo do tipo PAM (partition around medoids), que parte de um ponto (medoid) para minimizar a soma dos pares de dissimilaridade, consegue bons resultados com ambos os tipos de distância. Embora seja computacionalmente mais “caro” (Se quiserem entender como funciona a matemática vejam este vídeo).

Finalmente e não menos importante, a não ser que estejas fazendo a tua própria implementação, a biblioteca usada suporta a distância escolhida? Ou se comporta bem com uma matriz de distância customizada?

Concluindo, existem muitos tipos de distância e cabe a nós escolher de forma consciente a que achamos mais certa, ou até mudar todo o nosso pipeline de dados para podermos usar uma distância em particular, porque ela traz melhores resultados.

Aplicação Demo.

--

--

Ricardo Pinto
Data Hackers

Data Scientist with a civil engineering background. Water polo player. Loves ML/AI, data, decision science, gaming, manga.