Qlik Community

Qlik Brasil

Welcome to the group for Brazil users. .All discussions will be in Portuguese.

Highlighted
Stankevix
New Contributor

Pytools - Algoritmo HDBSCAN

Ola Comunidade Qlik,

O HDBSCAN é um algoritmo de clustering (segmentação) desenvolvido por Campello, Moulavi e Sander. É considerado uma extensão do DBSCAN, transformando-o em um  algoritmo de clustering hierárquico. Mas afinal, o que ser um algoritmo de clustering hierárquico?

Os algoritmos de clustering, analisa os exemplos fornecidos e os agrupa em clusters seguindo algum critério de similaridade. Um desses métodos é chamado de clustering hierárquico. Existem duas abordagens para a construção de agrupamentos hierárquicos:

  1. A abordagem aglomerativa, no qual começa com clusters unitários (compostos de apenas um exemplo) e segue agrupando os clusters iterativamente, sempre considerando o par de cluster mais semelhantes com base na distância entre os mesmos. Esse processo é repetido até que exista somente um único agrupamento contendo todos os exemplos; 
  2.  A abordagem divisiva, que realiza a mesma tarefa, porém, em ordem inversa.

Em seguida, usa uma técnica para extrair o cluster  mais simples com base na estabilidade do cluster. Por exemplo, esta estabilidade por ser definida pela densidade da região em que se encontra os pontos/clusters.

Para calcular a distância entre dois pontos, existem uma serie de métodos que podem ser escolhidos, tais como a distância Euclidiana e a Manhattan. A medida Euclidiana é o comprimento do segmento de reta que une dois pontos. A medida Manhattan representa a distância de dois pontos com base na soma das diferenças absolutas de dois objetos (Google Maps).

Existem diversos métodos de agrupamento de dados hierárquico aglomerativo, como o single linkage, complete linkage, group-average, centroid e ward.

  • Single linkage(nearest neighbor): é um dos métodos mais simples de agrupamento de dados. A principal característica desse método é que a distância entre grupos é definida pelo par de exemplos mais próximos pertencentes a clusters diferentes.
  • Não explicarei os demais para não estender demais o post.

O algoritmo em questão foca mais solução utilizando o método Single Linkage com algumas alterações mais robustas [1].

Usando o HDBSCAN no Qlik Sense

Fiz um post mencionando o uso da  extension SSE Pytools e suas etapas de instalação, agora explorarei o uso do algoritmo como expressão no Qlik.

O algoritmo basicamente classificara em clusters a dimensão que definirmos como entrada. Os rótulos (classificação) são uma saída padrão, sendo que o numero - 1 significa os Outliers e de 0 para cima são os clusters.

A função .Cluster aceita três parâmetros:

  • A dimensão a ser armazenada em cluster;
  • O conjunto de recursos como uma string concatenada;
  • Uma string no qual podemos definir alguns argumentos opcionais.
Pytools.Cluster([Dimensão], [Medida1] & ';' & [Medida2] ..., 'arg1=value1, arg2=value2, ...')

 As metricas precisão ser separadas por ponto e virgula ' ; ' e os argumentos pode sem definidos da seguinte forma:

Pytools.Cluster([Dimensão], [Medida1] & ';' & [Medida2], 'scaler=quantile,min_cluster_size=5,min_samples=5,metric=euclidean')

Também possível explorar a possibilidade de ter 2 dimensões ou aplicar o algoritmo para Geospatial Clustering. Abordarei a minha aplicação neste dois cenários em um post futuro. Caso queiram ter acesso a documentação original basta acessar este link.

Parâmetros HDBSCAN

Palavra ChaveDescriçãoValoresObservações
algorithmPrecisamente qual algoritmo utilizar; HDBSCAN tem algumas opções de acordo com o tipo de dado. O algoritmo padrão é o “best” independente do tipo do grupo de dado. Você pode configurar outros caso deseje.

best, generic

prims_kdtree, 

prims_balltree,

 boruvka_kdtree, 

boruvka_balltree

Valor padrão é best.
metricEssa métrica é definida quando calculamos a distancia entre as instancias (pontos) no vetor de features (métricas)

euclidean, 

manhattan, 

canberra, 

precomputed

etc

Uma serie de metricas de distancia estão disponiveis.

A metrica padrão é a euclidean. Para a função de  Cluster_Geo function o padrão é haversine.

min_cluster_sizeTamanho minimo do Cluster3

Este é um parâmetro primário que causa efeito direto no resultado de segmentação. Defina o valor minimo que você considera para um cluster/agrupamento de dados.

O valor padrão é 5.

min_samplesO numero de amostras em uma vizinhança a partir de um determinado ponto a ser considerado como um ponto principal (core point)5

Quanto maior o valor definido para min_samples, mais conservador será o clustering – mais pontos serão definidos como noise (ruido), e os clusters estarão restritos progressivamente para areas mais densas.

Se esse parâmetro não for especificado, automaticamente o valor padrão será atribuido para min_cluster_size.

cluster_selection_methodEste é o método usado para selecionar os clusters em uma Condensed Tree.eom, leaf

Se você esta interessado em ter um cluster mais pequeno e homogêneo que nas definições padrão, Excess of Mass, tem a tendencia de selecionar
um ou dois dos maiores cluster e particionar em um numero menor de clusters. É possivel utilizar a opção Leaf (nó folha), seleciona os leaf nodes de uma arvore, produzindo varios clusters pequenos e homogeneos. Note que é possível utilizar a variável de distancia junto com a variável de densidade, é possível produzir clusters grandes mas a tendencia é deixar a segmentação mais granular quando utilizado o Leaf.

O valor padrão é eom.

allow_single_clusterPor padrão o HDBSCAN não produz cluster único (single cluster). Esse parâmetro ativa essa funcionalidade.true, false

Valor padrão é false.

pO valor p é utilizado caso defina a métrica de distancia minkowski2Valor padrão é None.
alphaO parâmetro de distancia escalar é utilizado no modo robust single linkage.1.0

Na pratica, não é muito aconselhável alterar os valores deste parâmetro.

O valor padrão é 1.0.

match_

reference_

implementation

Essa flag muda da implementação padrão do HDBSCAN para a original do autor implementada em Java.true, falseEsse parâmetro pouco afeta na segmentação. Definir a flag como true, talvez afete a performance.

 

Também é possível configurar parâmetros básicos como:

  • return: Obter o retorno da probabilidade daquele ponto estar naquele cluster (0.0  ate 1.0)
  • scaler: Standardizing  é muito comum em algoritmos de aprendizado de maquina pode ser configurado para uma serie de opções como robust, quantile, none, standard 
  • Outros parâmetros podem ser encontrados no link.

 

Dashboards no Qlik Sense 

Os parâmetros podem ser definidos como filtros facilitando na definição de estrategia de segmentação. Isso facilita na visualização dos resultados conforme ajustamos os parâmetros. Existe a possibilidade de configurar no Load porem achei mais conveniente fazer como filter pane.

filtros.png

 

Uma dica interessante, é criar um botão para executar e parar a função de clustering, será bem conveniente caso esteja processando um grande volume de dados. Abaixo, vemos um exemplo da aplicação de segmentação usando a função Cluster seguindo alguns parâmetros. 

com ruido.png

Também é possível filtrar os dados, removendo os outliers e /ou ruídos no gráfico, chegando no seguindo resultado.


retirando outlier.png

Como é possível notar, existe uma infinidade de possibilidades de ajustar os parâmetros conforme a nossa necessidade. Importante é estudar como cada métrica e parâmetro funciona e estabelecer a melhor estrategia de acordo com as suas regras de negocio e escopo de trabalho

Compartilho essa experiencia em português para que a comunidade Qlik BR possa explorar um pouco mais deste SSE e Algoritmo.

Link para a documentação padrão do HDBSCAN.

Abraços e Qlik for the win.