Recursos Machine Learning da Microsoft – ML Studio

Olá pessoal, sejam bem vindos ao blog do talkitbr. Este artigo é o primeiro de uma série onde irei apresentar vários recursos de Machine Learning disponibilizados pela Microsoft. O intuito desta série artigos não é explicar os conceitos teóricos de Machine Learning e suas técnicas e sim dar uma visão prática e direta de como usar recursos disponibilizados pela Microsoft para ai sim aplicar esses conceitos e técnicas.

Conhecendo o Microsoft Azure Machine Learning Studio

A Microsoft possui vários recursos para Machine Learning, que vão desde um portal Web para realização de experimentos de Machine Learning até máquinas virtuais com múltiplas GPUs para desempenhar experimentos mais pesados com grande eficiência.

Para iniciar esta jornada para desvendar esses recursos disponibilizados pela Microsoft, vamos começar com o Microsoft Azure Machine Learning Studio (MLStudio)

  1. Acesse o site https://studio.azureml.net
  2. Clique no botão para fazer login
  3. Será solicitada uma conta Microsoft. Se não tiver, crie uma gratuitamente.
  4. Você será redirecionado para a tela incial do Microsoft Azure Machine Learning Studio.
  5. Esse é o seu Machine Learning Workspace. E mesmo sem ter uma conta no Microsoft Azure, você ganha acesso a um Workspace gratuito.
  6. Segue breve descrição de cada item dentro do seu Workspace:
    • PROJECTS: Criar projetos para organizar seus experimentos, datasets, modelos treinados, notebooks, etc.
    • EXPERIMENTS: Criar experimentos de Machine Learning. Você pode criar a partir de um template ou ainda criar um novo experimento vazio. É possível criar experimentos para Regressão, Classificação, Clustering, Modelo de Recomendação, Detecção de Anomalia, entre outros.
    • WEB SERVICES: Gerenciar os web services criados a partir de modelos treinados no MLStudio. Isso permite disponibilizar rapidamente REST APIs para acessar seus modelos de Machine Learning tanto em desenvolvimento como em produção. Estes web services também podem ser integrados ao Microsoft Excel.
    • NOTEBOOKS: São Jupyter Notebooks para Pyhton e R que podem ser utilizados tanto dentro dos próprios experimentos que você cria no MLStudio ou ainda apenas para análise descritiva dos dados.
    • DATASETS: Conjunto de dados que você possui dentro do seu Workspace. Mesmo no Workspace gratuito você pode subir uma grande quantidade de Datasets (10GB).
    • TRAINED MODELS: Modelos criados a partir dos seus experimentos.
    • SETTINGS: Configurações gerais como, por exemplo, autorizar outros usuários a acessar o seu Workspace e também configuração de Data Gateways para acesso a Banco de Dados OnPremisse.

Criando novo experimento

A melhor forma de entender os recursos do Microsoft Azure Machine Learning Studio é através de um exemplo.

Mas antes de iniciar o experimento em si, é importante definir o que desejamos fazer. Aqui vamos tentar predizer se um voo irá atrasar mais de 15 minutos considerando várias características como horário, dia da semana, aeroporto de origem e destino, etc.

Então vamos começar criando um novo experimento.

  1. Em EXPERIMENTS, clique em New -> Blank Experiment
  2. Será exibido um Toolbox a esquerda e uma área de edição do experimento no centro da tela.
  3. O MLStudio funciona basicamente como uma ferramenta Drag&Drop. Apesar de que é possível disponibilizar código conforme veremos logo adiante.
  4. Esta é a visão de um novo experimento:
  5. Vamos adicionar um nome para o experimento. Para isso, clique no texto “Experiment Created on …”. No meu caso irei especificar “Classification – Flight Delay”.
  6. O próximo passo é incluir o Dataset. Você pode subir seus próprios Datasets e até trazê-los de B
  7. ancos de Dados OnPremisse e também da nuvem.
  8. Mas aqui vamos usar um Dataset já disponível no MLStudio: o “Flight Delays Data”.
  9. Para colocá-lo no experimento, basta realizar o Drag&Drop do Dataset contido em “Saved Datas
    ets -> Samples” para dentro da área de edição do experimento:
  10. Esta caixa adicionada no seu experimento é chamada módulo. Os módulos dentro do MLStudio podem ter entradas e saídas. No caso desse Dataset, temos apenas uma saída (circunferência com número “1”).
    1. As entradas permitem fornecer dados para o módulo (como parâmetros de função)
    2. As saídas disponibilizam resultados gerados pelo módulo (como valores de retorno). Existem módulos que possuem várias saídas.
  11. Já saída dos módulos de Dataset são os próprios dados.
  12. Vamos visualizar essa saída. Abra o menu de contexto da saída “1” de Flight Delays Data (clicar com o botão secundário do mouse) e clique em “Visualize”

  • Note que o MLStudio já disponibiliza várias informações que descrevem os dados do Dataset, como o histogram ou boxplot além de dados estatísticos gerais dos dados
  • Note também que no menu de contexto da saída “1” você também pode baixar o Dataset, obter código para acessá-lo no MLStudio e explorá-lo através de um Jupyter Notebook. Este último caso será tratado em outro momento

Antes de prosseguirmos para a etapa da preparação dos dados, irei dar uma breve descrição dos dados que dispomos no Dataset de exemplo:

  • Year: O ano quando ocorreu o voo.
  • Month: O mês em que ocorreu o voo.
  • DayofMonth: O dia do mês em que ocorreu o voo.
  • DayOfWeek: O dia da semana em que ocorreu o voo.
  • Carrier: A empresa aérea que operou o voo.
  • OriginAirportID: O ID do aeroporto de origem.
  • DestAirportID: O ID do aeroporto de destino.
  • CRSDepTime: O horário agendado para partida do voo (formato 24h).
  • DepDelay: Quantidade de minutos que o voo partiu atrasado.
  • DepDel15: Uma flag indicando se o voo atrasou mais de 15 minutos (True) ou não (False) para partir.
  • CRSArrTime: O horário agendado para a chegada do voo no destino (formato 24h).
  • ArrDelay: Quantidade de minutos que o voo chegou atrasado no destino.
  • ArrDel15: Uma flag indicando se o voo chegou atrasado mais de 15 minutos (True) ou não (False).
  • Cancelled: Valor indicando se o voo foi cancelado (valor 1) ou não (0).

E apenas relembrando, nesse experimento iremos tentar predizer o valor do campo ArrDel15, isto é, tentar identificar se um determinado voo irá atrasar ou não com base nas demais características.

Preparação dos Dados

Essa é a etapa mais dispendiosa de todo processo de aplicação de Machine Learning, podendo a representar cerca de 90% do esforço do cientista de dados. Isso porque muitas vezes os dados não estão prontos para o algoritmo. Exemplos de preparação de dados envolvem normalização; data prune (remoção de dados); oversampling; remoção de outiliers, etc. E para isso, precisamos analisar detalhadamente os dados tendo como foco o resultado que queremos obter (predizer o valor de ArrDel15).

A seguir irei mostrar algumas atividades simples de preparação de dados apenas com o objetivo de demonstrar alguns recursos do MLStudio. Mas iremos explorar esta etapa mais a fundo em outros artigos.

  1. Agora que já temos os dados, precisamos iniciar etapa de preparação. Aqui podemos ter várias formas de trabalho e que dependem muito do seu objetivo e da sua linha de estudo do Dataset.
  2. A seguir será feita uma proposta visando o melhor entendimento do MLStudio e de suas capacidades.
  3. Vamos iniciar essa excluindo do Dataset as linhas que correspondem a voos cancelados, já que queremos prever quais voos irão atrasar (voo cancelado não atrasou porque não ocorreu).
  4. Existem várias formas de fazer isso no MLStudio. Selecione o módulo Data Transformation -> Manipulation -> Apply SQL Transformation e faça o Drag&Drop para dentro do experimento:
    • Conecte a saída “1” do Flight Delays Data na entrada “1” do Apply SQL Transformation
    • Selecione o módulo Apply SQL Transformation. Em Properties (lado direito do experimento), especifique os seguintes valores:
      • SQL Query Script:
select * from t1 where t1.Cancelled = 0;
  1. Depois disso, vamos agora descartar as colunas de dados que contem informações que não dispomos no momento da predição, como o tempo de atraso de partida e chegada do voo.
  2. Aqui poderíamos usar de novo o módulo Apply SQL Transformation fazendo a seleção apenas das colunas que queremos manter.
  3. Mas vamos usar outro módulo específico para isso: o Data Transformation -> Manipulation -> Select Columns in Dataset
    • Conecte a saída “1” do Apply SQL Transformation na entrada “1” do Select Columns in Dataset
    • Selecione o módulo Select Columns in Dataset. Em Properties (lado direito do experimento), especifique os seguintes valores:
      • Select columns:
        • Começar com “Include ALL”
        • Excluir as seguintes colunas: Year, Month, DayofMonth, DepDelay, DepDel15, ArrDelay, Cancelled, CRSArrTime
      • Excluímos por exemplo as colunas de DepDelay e DepDel15 para tentar predizer voos que irão cancelar sem considerar se eles se atrasaram na partida. Excluímos também o ano, mês e dia do mês por considerar que eles não serão relevantes no resultado.
  4. Execute seu experimento clicando em Run. A execução do experimento poderá demorar alguns minutos.
  5. Depois da execução do experimento, você pode novamente visualizar os dados e continuar com outras rodadas de preparação de dados.
  6. Podemos ainda fazer mais preparações de dados, como ajuste de valor de colunas, remover linhas duplicadas ou com valores faltantes, entre outros. No decorrer dos exemplos que iremos tratar aqui, serão exploradas essas outras opções.

Treinando o Modelo de Machine Learning

  1. Após a preparação dos dados, vamos para a fase de treinamento do modelo de Machine Learning.
  2. Por ser uma classificação (queremos descobrir se o voo irá atrasar ou não mais de 15 minutos), vamos usar um algoritmo de Two-Classification
  3. Mas este algoritmo, como outros de classificação e regressão, é supervisionado. Por conta disso, temos que ter um Dataset de treino e outro de teste.
    • Dataset de treino: usado em um algoritmo para gerar um modelo de Machine Learning. Por conta disso, nesse treino, o modelo é criado tentando-se obter o resultado definido no valor que ser quer predizer (no caso o valor de ArrDel15)
    • Dataset de teste: usado para pontuar o resultado do modelo treinado. Aqui, aplica-se o modelo sobre o teste para obter o valor a ser predito e depois compara esse valor com aquele de fato que já temos.
  4. Para o nosso experimento, vamos dividir o Dataset atual (saída do módulo Select Columns in Dataset) e e dividí-lo em duas partes.
  5. Adicione então o módulo Data Transformation -> Sample and Split -> Split Data para dentro do experimento.
    • Conecte a saída “1” do Select Columns in Dataset na entrada “1” do Split Data
    • Selecione o módulo Split Data. Em Properties (lado direito do experimento), especifique os seguintes valores:
      • Spliting Mode: Split Rows
      • Fraction of rows in the first output dataset: 7
      • Randomize split: checked
      • Ramdom seed: 123
      • Stratified Split: False
  6. Depois disso, execute o experimento para obter o resultado:
  7. Note que o módulo Split Data possui duas saídas. No nosso caso, a primeira terá 70% das linhas selecionadas randomicamente; e a segunda terá 30% das linhas restantes.
  8. Agora vamos incluir o algoritmo. Existem vários algoritmos disponíveis no MLStudio. Vamos usar aqui o Two-Class Logistic Regression.
  9. Adicione o módulo Machine Learning -> Intialize Model -> Classification -> Two-Class Logistic Regression no seu experimento.
  10. Esse modulo possui várias propriedades que nos permitem configurar como o algoritmo irá se comportar. Mas aqui vamos manter os valores padrão.
  11. Agora precisamos incluir o módulo que irá realizar o treino de fato. Adicione o módulo Machine Learning -> Train -> Train Model:
    • Conecte a saída “1” do Two-Class Logistic Regression na entrada “1” do Train Model
    • Conecte a saída “1” do Split Data na entrada “2” do Train Model
    • Selecione o módulo Train Model. Em Properties (lado direito do experimento), especifique os seguintes valores:
      • Label Column: ArrDel15 (esse é o valor que iremos predizer através do modelo a ser treinado).
  12. Como resultado, o modelo irá gerar um valor de bias e pesos para cada coluna contida no Dataset. No caso deste algoritmo, estamos usando como função de perda (Loss Function), a regressão logística. Outros algoritmos, como Decision Tree, utilizam outras funções de perda para definir os peses de cada coluna do Dataset.

Avaliando o modelo de Machine Learning

  1. Depois de gerado o modelo de Machine Learning, precisamos avalia-lo para ver o quão eficiente ele é.
  2. Como é um algoritmo supervisionado, usamos a outra parcela de dados (dados de teste), para fazer esse cálculo.
  3. Adicione no seu experimento o módulo Machine Learning -> Score -> Score Model
    • Conecte a saída “1” do Train Model na entrada “1” do Score Model
    • Conecte a saída “2” do Split Data na entrada “2” do Score Model
  4. Adicione também outro módulo para avaliar o score, o Machine Learning -> Evaluate -> Evaluate Model
    • Conecte a saída “1” do Score Model na entrada “1” do Evaluate Model
  5. Como resultado, teremos o seguinte experimento.
  6. Execute o experimento.
  7. Após o término, selecione o módulo Evaluate Model e clique na saída “1” para visualizar os dados.
  8. Ele irá mostrar a curva ROC que define quantos acertos o modelo treinado obteve considerando os dados de teste.
  9. Além disso, ele exibe a matriz de confusão que mostra a quantidade de:
    • True Positives: quantidade de casos em que o valor predito foi True (atrasou o voo) quando realmente o voo atrasou.
    • False Positives: quantidade de casos em que o valor predito foi False (não atrasou o voo) quando realmente o voo não atrasou.
    • True Negative: quantidade de casos em que o valor predito foi True (atrasou o voo) mas que na verdade o voo não atrasou.
    • False Negative: quantidade de casos em que o valor predito foi False (não atrasou o voo) mas que na verdade o voo atrasou.
  10. Esse resultado não está bom e pode ser melhorado de várias maneiras como, por exemplo:
    • Preparando melhor os dados com técnicas como over sampling, normalização, definição de valores categóricos, etc.
    • Alterando o algoritmo de classificação ou parâmetros do algoritmo utilizado
    • Obtenção de novos dados que podem colaborar com a predição, como dados do clima, informações sobre feriados, entre outros.

Disponibilizando Web Service

  1. Agora que já temos um modelo treinado, vamos criar um Web Service para pode utilizá-lo nas nossas aplicações móveis e Web.
  2. Clique no botão SET UP WEB SERVICE na parte inferior do MLStudio e selecione a opção Predictive Web Service (pode ser necessário clicar duas vezes)
  3. O próprio MLStudio fará uma transformação no seu experimento incluindo novos módulos para Entrada e Saída de dados do Web Service.
  4. Além disso, ele irá criar o modelo (que será adicionado no item “TRAINED MODELS” do seu Workspace).
  5. Mas note que a Entrada do Web Service foi colocada junto o o próprio Dataset.
  6. Vamos modificar pois não queremos ter que incluir dados que já excluímos na própria preparação dos dados.
  7. Delete a conexão entre os módulos Web service input e Apply SQL Transformation
  8. Depois disso, conecte a saída “1” do Web service input com a entrada “2” de Score Model.
  9. Agora execute o novo experimento.
  10. Depois disso, clique no botão DEPLOY WEB SERVICE na parte inferior do MLStudio.
  11. Será criado um Web Service (que será adicionado no item “WEB SERVICES” do seu Workspace) e será exibida a página desse Web Service.
  12. Nesta tela, clique em “New Web Services Experience” de General
  13. Ele irá abrir outra tela para gerenciar o Web Service. Lá você pode testar a API como incluir o Web Service no Excel. Aqui também temos acesso a tutoriais que ajudam a incluir este web service no nosso projeto.
  14. Agora clique em “Test endpoint” e adicione alguns valores de teste compatíveis com valores contidos no modelo. Exemplo:
    • DayOfWeek: 5
    • Carrier: DL
    • OriginAirportID: 11433
    • DestAirportID: 13303
    • CRSDepTime: 837
    • ArrDel15: Qualquer valor (será predito)
  15. Ao selecionar a opção Swagger API na parte de superior, você terá acesso a detalhes da API:
  16. Note que o resultado da API tem todos os valores de input mais o “Scored Label” que é o valor que queremos predizer.

Acessando o Web Service do Excel

Ainda podemos acessar esse Web Service diretamente do Excel. Mas para isso, é recomendável editar o experimento do Web Service conforme segue:

  1. Vamos voltar para o MLStudio para excluir do Output as colunas de input.
  2. Abra seu experimento de predição e inclua o módulo Select Columns in Dataset
    • Exclua a conexão entre os módulos Score Label e Web service output
    • Conecte a saída “1” do Score Model na entrada “1” do Select Columns in Dataset
    • Selecione o módulo Select Columns in Dataset. Em Properties (lado direito do experimento), especifique os seguintes valores:
    • Select columns: Scored Labels, Scored Probabilities
  3. Execute novamente o experimento.
  4. Agora, clique novamente na opção “DEPLOY WEB SERVICE”
  5. O MLStudio irá perguntar se você deseja sobrescrever seu Web Service atual. Confirme a operação.
  6. Voltando agora para o Quickstart do nosso Web Service Dashboard, vamos escolher a opção Launch in Excel.
  7. Será exibida uma tela com informações para invocar a API através de uma planilha Excel. Ou ainda você pode baixar uma planilha já configurada. Clique em “Excel 2013 or Later” para baixar a planilha pronta.
  8. Depois de baixada a planilha, abra-a no Excel.
  9. Será exibido no lado direito do Excel o Web Service que criamos a pouco. Clique nele e então clique em “Use sample data” para obter alguns dados de exemplo.
  10. Depois especifique as células no Input
  11. Para o Output, selecione a célula G2
  12. Clique em “Predict”:
  13. Ele mostrará o resultado nas colunas conforme especificado.

Considerações Finais

Este artigo teve como propósito apresentar brevemente o recurso Microsoft Azure Machine Learning Studio.

Nos próximos artigos irei descrever outros exemplos de experimentos utilizando mais recursos do MLStudio. Além disso, iremos explorar outros recursos como Máquina Virtual da DataScience, Microsoft Azure Workbench, HDInsight e Microsoft Azure Databricks.

Até o próximo artigo!

Anúncios

Um comentário

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s