Skip to main content
27 May 2019
Follow Us

Clustering com o algoritmo K means integrando o R com o Power BI

Nesta série de artigos, vamos aprofundar algumas técnicas de clustering recorrendo à integração do Power BI com o R. O clustering serve um propósito central e muito importante do marketing: o de agrupar clientes de acordo com características comuns, para que seja possível desenvolver estratégias e ações específicas para cada cluster (ou segmento) de mercado. Este conceito é fácil de compreender, mas difícil de implementar na prática, seja porque nem sempre são claras as características que distinguem os clientes ou porque não sabemos à partida em quantos clusters os agrupar.

Apesar de o Power BI dispor de um algoritmo de clustering que funciona com tabelas de uma a quinze variáveis numéricas que podem ser utilizadas como critério de segmentação, é bastante difícil saber o que está por detrás desse algoritmo. Não significa isto que não possa ser colocado em prática, pelo contrário, acho-o até bastante interessante e por ser de uso tão fácil recomendo que faça pelo menos algumas experiências com ele e avalie se faz sentido para o seu caso concreto. Para saber mais sobre este algoritmo, veja por exemplo este artigo.

A integração do R com o Power BI é a meu ver uma daquelas combinações perfeitas. O R é uma linguagem estatística “open source” que é largamente utilizada por cientistas de dados de todo o mundo. Com a R é possível recolher e tratar dados provenientes de diversas fontes para posterior análise (tal como o Power Query do Power BI). E tal como é possível fazer no Power BI, com a linguagem R podemos analisar os dados sob a forma de gráficos.

No entanto, enquanto o Power BI é uma tecnologia concebida de raiz com uma interface gráfica apelativa e intuitiva (daí talvez a sua popularidade crescente), para se analisarem dados com R, é necessário dominar-se uma sintaxe e interface pouco amigáveis que recorrem a linhas de comandos. E lidar com idiossincrasias diversas. A curva de aprendizagem da linguagem R não é acessível a todos. 

Então qual o interesse de usar R com o Power BI? Porque com R podemos aceder a milhares de algoritmos que permitem realizar diversas análises avançadas, como encontrar regras de associação, conceber árvores de decisão e criar modelos de previsão.

Assim, é interessante recorrer ao Power BI para análise descritiva, para contar o que aconteceu e recorrer a R quando nos interessar mais olhar o futuro através de modelos de análise avançada.

Como ativar as funcionalidades do R no Power BI

Para começar a utilizar o R no Power BI, é necessário fazer-se o download do sistema de base e do editor R Studio a partir dos seguintes links:

Após a instalação do R e do R Studio, é necessário ativar as funcionalidades de scripting no Power BI Desktop, a partir das opções:

ClusteringKMeans1

O Power BI Desktop funciona como uma interface adicional do R, e não mais do que isso. Na verdade, todo o trabalho pesado é feito nos bastidores pelo R e pelo R Studio. Isto significa que na maioria dos casos vamos recorrer ao R Studio para testar o código e só após validar o seu funcionamento o utilizaremos no Power BI.

Existem algumas limitações importantes quanto à utilização do R no Power BI que convém conhecer. As mais importantes são a restrição quanto ao tipo de estrutura de dados: no Power BI só se aceitam data frames e o tempo de execução de um script não pode exceder os 30 minutos. Para mais detalhes quanto à interação do R no Power BI, veja a documentação a partir deste link.

Para resolvermos o nosso problema de clustering, será necessário recorrer a alguns pacotes do R. A instalação destes pacotes deverá ser feita diretamente no R Studio a partir dos seguintes comandos:

install.packages("tidyverse")
install.packages("cluster")

A instalação destes pacotes é feita no R Studio mas a sua ativação será feita no Power BI Desktop, como veremos mais à frente. Se a instalação for bem-sucedida, deveremos ver uma mensagem no R Studio parecida com a seguinte:

ClusteringKMeans2

Estes pacotes permitem ampliar as funcionalidades básicas do R e ajudar a resolver uma série de problemas. Há muitos pacotes R que podem ser integrados no Power BI. Para ver uma lista completa dos muitos pacotes R compatíveis com o Power BI aceda ao link com a documentação do Power BI.

Importar dados com o Power Query

O dataset a analisar consiste numa tabela com identificação de cada cliente e as variáveis “monetary”, “frequency” e “recency”, recolhidas a partir do sistema transacional. Como já vimos anteriormente, estas variáveis são respetivamente:

  • O valor gasto por cada cliente durante o período em análise
  • A frequência de compra de cada cliente, medida pelo número de transações durante o período e
  • O número de dias desde a data da última compra. Para este cálculo, recorremos a uma data de referência que corresponde à data da última transação.

Os dados estão guardados num ficheiro csv com a estrutura seguinte e podem ser importados pelo R ou pelo Power Query. Na verdade, é indiferente dado que já se encontram estruturados e limpos:

ClusteringKMeans3

Assim, optámos pelo Power Query dada a sua simplicidade. Numa primeira análise exploratória, verificamos que as três variáveis apresentam uma distribuição alongada à direita, como podemos ver nos seguintes histogramas:

ClusteringKMeans4

Porque cada uma das variáveis está representada numa escala diferente das restantes e porque as distribuições estão bastante enviesadas, vamos aplicar algumas transformações a estes dados.

Primeiro, vamos aplicar uma transformação logarítmica, executando o seguinte script R no Power Query:

ClusteringKMeans5

Por defeito, o Power Query considera a tabela a editar como um data frame cujo nome é “dataset”. É sobre esse data frame que vamos aplicar a transformação dos dados. Assim, na prmeira linha de código library(dplyr) carrega o pacote dplyr anteriormente instalado no R Script para que diversas funções de transformação de dados fiquem ativas.

De seguida, df_normal <- log(dataset+1) %>% cria a variável df_normal aplicando a transformação logarítmica ao data frame original (acrescido de 1 para evitar a geração de erros para os valores nulos).

Esta variável também é um data frame e continuamos a trabalhar sobre ela retirando apenas as colunas 2 a 4 (as que contêm as variáveis “monetary”, “frequency” e “recency” que nos interessa analisar) e aplicando a função scale que normaliza os dados atribuindo-lhes uma escala comum.

Por fim, voltamos ao dataset original para retirar a coluna com o id do cliente (que não queremos transformar) e juntámo-lo aos dados recolhidos. Analisando as mesmas variáveis após a transformação é fácil verificar que todas se encontram em escalas comparáveis e que distribuem um pouco melhor.

ClusteringKMeans6

Chegados a este ponto, parece-nos que os dados estão prontos a ser trabalhados. Recordo que o nosso objetivo é agrupar clientes de acordo com as variáveis r, f e m.

Vamos adaptar o código anterior para aplicar o algoritmo k-means aos dados transformados. Este algoritmo baseia-se em médias para atribuir clientes a clusters. De forma iterativa e definindo-se à partida em quantos clusters se pretende agrupar os clientes, o algoritmo determina que dado cliente pertence a um cluster quanto mais próximos estiverem os seus valores das médias (centroides) do respetivo cluster.

O código é o seguinte:

ClusteringKMeans7

Acrescentámos o pacote cluster e criámos a variável clusters para aplicar o algoritmo ao data frame anteriormente criado, com a instrução: clusters <- kmeans(df_normal, 3). Por fim, convertemos o resultado num data frame e combinamos tudo com o id do cliente. O resultado é o seguinte:

ClusteringKMeans8

Neste momento, dispomos de duas tabelas no Power BI, uma com os dados originais e outra com os dados transformados, que podemos relacionar através da chave “id” de ambas as tabelas. Esta relação irá permitir analisar os clusters em ambas as tabelas.

Assim, através de um simples gráfico de dispersão podemos ver os 3 clusters e como se posicionam nas três variáveis:

ClusteringKMeans9

Repare-se que estamos a usar médias para os eixos “frequency” e “recency” e a soma para “monetary”. Neste gráfico é fácil verificar que os clientes do cluster 1 são os que compram com menos frequência e que em média compraram há mais tempo. O cluster 2 apresenta uma média de frequência de compras maior e em média compram há 65 dias, o que é melhor do que o cluster anterior. Por fim, o cluster 3 é de todos o que apresenta melhores resultados em todas as variáveis:

  • Média de frequência de compra é de 117
  • Média de número de dias desde a última compra é de apenas 12 dias
  • E o valor monetário é o maior com 25 milhões de euros

O R pode ser integrado no Power BI também para a produção de visualizações que não fazem parte do sistema por defeito. Há muitas visualizações em R com características muito específicas para a análise avançada de dados e esse poderá ser o tema de futuros artigos, pelo que não detalharei mais neste artigo sobre esse assunto.

No entanto, em conclusão poderíamos acrescentar duas páginas ao relatório com alguns boxplots que nos ajudam a ver melhor a composição e distribuição dos 3 clusters.

No dataset original teríamos:

ClusteringKMeans10

E no dataset transformado, que foi normalizado, a dispersão é menor. Como tal, será mais fácil perceber as diferenças entre os clusters:

ClusteringKMeans11


Assine a nossa newsletter e receba o nosso conteúdo diretamente no seu email