Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
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:
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.
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:
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 Chave | Descrição | Valores | Observações |
algorithm | Precisamente 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. |
metric | Essa 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_size | Tamanho minimo do Cluster | 3 | 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_samples | O 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_method | Este é 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 O valor padrão é eom. |
allow_single_cluster | Por padrão o HDBSCAN não produz cluster único (single cluster). Esse parâmetro ativa essa funcionalidade. | true, false | Valor padrão é false. |
p | O valor p é utilizado caso defina a métrica de distancia minkowski | 2 | Valor padrão é None. |
alpha | O 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, false | Esse 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:
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.
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.
Também é possível filtrar os dados, removendo os outliers e /ou ruídos no gráfico, chegando no seguindo resultado.
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.