Leonardo Karpinski

Leonardo Karpinski

Mestre do Power BI, criador do Curso Express de Power BI e Curso Completo de Power BI. Formou mais de 16 mil alunos nos últimos anos e participou de projetos em grandes empresas nacionais e multinacionais.

Consumindo Web Service do Azure Machine Learning no Power BI com um Script R

Neste blogpost eu demonstro como realizar análises preditivas, de forma bastante intuitiva e sem a necessidade de grandes conhecimentos estatísticos, com o Azure Machine Learning. Trata-se de uma ferramenta Drag-and-Drop da Microsoft utilizada para construir, testar e publicar modelos preditivos.

Ela é composta por diversos algoritmos prontos, e toda a construção dos modelos é feita de uma foram bastante simples, portanto você não precisa digitar nenhum código para solucionar problemas complexos. Porém, para isso, você precisa ter algum conhecimento da sequência de passos necessários para se construir um modelo preditivo com machine learning.

E é isto que farei neste post com a aplicação de um estudo de caso gravado em vídeo.

Aplicação em um estudo de caso

Como sou um entusiasta do assunto e sempre gostei de utilizar dados para solucionar problemas de negócio, decidi escrever este post e gravar os vídeos abaixo como forma de registro. Escolhi um caso de predição de Churn para o estudo deste artigo. Trata-se de uma empresa de telecomunicações dos EUA, que possui registro de mais de 3300 clientes com informações como:

  • Informação de plano internacional: variável binária
  • Informação de plano com mensagem de voz: variável binária
  • Total de minutos utilizados durante o dia, noite e em ligações internacionais: variável numérica
  • Total gasto com ligações durante o dia, noite e ligações internacionais: variável numérica
  • Quantidade de mensagens de voz utilizadas: variável numérica
  • Estado onde o cliente reside: variável categórica
  • Informação de cancelamento: variável binária de objetivo

Com base no histórico desses clientes, nosso objetivo é o de predizer se novos clientes irão cancelar ou não o serviço. Para isso, apliquei a sequência de passos abaixo, dividida em três vídeos.

Obs: não sei por qual motivo nos vídeos o mouse ficou dividido entre o ponteiro e a bolinha amarela de destaque. Por favor acompanhe a bolinha amarela, e não o ponteiro.

Limpeza e transformação dos dados pelo Power Query:

Aplicação de um modelo preditivo no Azure Machine Learning:

Importação do Script de R no Power BI e classificação de novos dados:

Abaixo está o código de R utilizado para integrar o AML com o Power BI:

library("RCurl")
library("rjson")

# Esta função é adicionada para transformar os dados do Power BI em uma lista
createList <- function(dataset)
{
  temp <- apply(dataset, 1, function(x) as.vector(paste(x, sep = "")))
  colnames(temp) <- NULL
  temp <- apply(temp, 2, function(x) as.list(x))
  return(temp)
}

# Accept SSL certificates issued by public Certificate Authorities
options(RCurlOptions = list(cainfo = system.file("CurlSSL", "cacert.pem", 
package = "RCurl")))

h = basicTextGatherer()
hdr = basicHeaderGatherer()

req = list(
  Inputs = list(
    "input1" = list(
      "ColumnNames" = list("id", "Estado", "LigacoesSuporte", "VoiceMail", "MensagensVoiceMail", "PlanoInternacional", "TotalLigacoesDia", "TotalCustoDia", "TotalLigacoesNoite", "TotalCustoNoite", "TotalLigacoesIntern", "TotalCustoIntern", "Churn"),
      "Values" = createList(dataset)
    )                
  ),
  GlobalParameters = list(
    "Endpoint URL" = "")
)

body = enc2utf8(toJSON(req))
api_key = "SUA API AQUI" # Replace thiswith the API key for the web service
authz_hdr = paste('Bearer', api_key, sep=' ')

# Mudar a url abaixo também, substituindo XXXXX pelos valores fornecidos no web service doAML
h$reset()
curlPerform(url = "https://ussouthcentral.services.azureml.net/workspaces/XXXXX/services/XXXXX/execute?api-version=2.0&details=true",
            httpheader=c('Content-Type' = "application/json", 'Authorization' = authz_hdr),
            postfields=body,
            writefunction = h$update,
            headerfunction = hdr$update,
            verbose = TRUE
)

headers = hdr$value()
httpStatus = headers["status"]
if (httpStatus >= 400)
{
  print(paste("The request failed with status code:", httpStatus, sep=" "))
  
  # Print the headers - they include the requert ID and the timestamp, which are useful for debugging the failure
  print(headers)
}

result = h$value()
finalResult <- fromJSON(result)
inter <- do.call("rbind", finalResult$Results$output1$value$Values)
MyFinalResults <- data.frame(inter)
names(MyFinalResults) <- finalResult$Results$output1$value$ColumnNames
rm(list=setdiff(ls(), "MyFinalResults"))

Conforme dito em vídeo, os campos que você precisa mudar são: api_key e url. Outro detalhe: a lista de colunas no campo “ColumnNames” deve estar na mesma ordem das colunas passadas para o dataset (último passo aplicado antes do Script de R no Power BI).

Confesso que deu um certo trabalho conseguir fazer isso rodar perfeitamente, principalmente pelo fato de eu não ter muita experiência com a linguagem R. Tive que errar bastante para descobrir, mas no final deu certo. Agora é só pegar este código e integrar seus modelos de predição do AML com o Power BI.

No meu curso de Power BI eu mostro em detalhes todos os passos para se obter uma solução completa de BI. Basta clicar aqui para acessar e visualizar algumas aulas grátis.

Espero que gostem e aproveitem este post para integrar suas análises preditivas com o Power BI para a solução de seus problemas de negócio.

Abraços,
Leonardo

COMPARTILHE ESSE POST

Compartilhar no facebook
Compartilhar no linkedin
Compartilhar no twitter
Compartilhar no pinterest