Criando um modelo preditivo no Azure Machine Learning – talkitbr
12 de janeiro de 2016 12 de janeiro de 2016 Thiago Chati
Criando um modelo preditivo no Azure Machine Learning
Já explicamos aqui alguns conceitos, tipos e funcionalidades do aprendizado de máquina na plataforma de nuvem da Microsoft, o Azure Machine Learning.
Através dele conseguimos criar modelos preditivos de forma rápida e intuitiva através do Estúdio de Aprendizado de Máquina, arrastando, soltando e conectando módulos. É muito simples e não são necessários conhecimentos específicos de programação, basta conectar visualmente os conjuntos de dados e módulos.
São cinco etapas básicas para criar, treinar e pontuar um modelo no Estúdio AM:
Pré-processar dados;
Definir recursos;
Escolher e aplicar um algoritmo de aprendizado;
Prever a informação desejada.
O que vamos mostrar aqui é um passo-a-passo dessas cinco etapas, criando, treinando e testando um modelo de predição. Para isso vamos utilizar a Tabela Brasileira de Composição de Alimentos – TACO, uma tabela pública contendo dados nutricionais de alimentos, disponibilizada no site da Unicamp. A ideia de utilizar esta tabela veio de vídeos e apresentações sobre aprendizado de máquina, realizadas pelo MVP Diego Nogare.
Nesse experimento, vamos extrair uma amostra dessa base de dados em Excel contendo uma lista de 180 alimentos, e usar o Azure Machine Learning para treinar esse conjunto de dados, expandindo-o depois para a base de dados completa, com cerca de 600 alimentos, obtendo uma assertividade aproximada de 76%. Vamos lá!
Criando e treinando um modelo
1- Para obter os dados, faça o download em Excel da tabela TACO. Abra o arquivo e substitua campos em branco e asteriscos pelo número zero. Em seguida, salve como arquivo .CSV (Comma-separated values).
2- Selecione uma quantidade menor de dados contidos na tabela (no nosso exemplo foram 180 alimentos) e extraia para um arquivo de amostra, inclua uma coluna chamada "Mistura", especificando manualmente se os alimentos escolhidos são considerados mistura ou não (sim/não), e salve um novo arquivo .CSV (Comma-separated values).
Nota: Repare que a coluna mistura existe apenas na amostra. É essa informação que iremos predizer no resultado final.
3- Entre no Portal do Azure;
4- No menu à esquerda > Aprendizado de Máquina > Novo > Serviço de Dados > Armazenamento (crie uma conta para Blobs, Tabelas e Consultas).
5- No menu à esquerda > Aprendizado de Máquina > Novo > Serviço de Dados > Aprendizado de Máquina (crie um workspace de AM). Selecione a conta de armazenamento.
Nota: Nos passos 4 e 5 será necessário definir a região (local) onde serão alocados os serviços.
6- Após criar o worskpace, selecione-o e entre no Estúdio AM.
7- No menu à esquerda, clique em Datasets > New > Importe os dois arquivos de dados .CSV criados anteriormente. No nosso caso os nomes dos arquivos são tabelatodosalimentostreino_raw.csv e tabelatodosalimentos_raw.csv.
8- Após o importar as bases, clique em Experiment > New > Blank Experiment (dê um nome para o experimento).
9- A primeira coisa a se fazer é treinar a base. No menu à esquerda, clique em Saved Datasets > My Datasets e arraste a base de treino para o experimento (no nosso exemplo, tabelatodosalimentostreino_raw.csv).
10- Faça o Split dos dados. No menu à esquerda, localize o Split através da busca e arraste para o experimento. Para treinamento da base utilize o princípio do 80X20, dessa forma alterar a fração de saída do Split para 0,8 (opção à direita na tela).
Nota: A Lei de Pareto (ou princípio 80X20, como preferir chamar) foi criada pelo economista italiano Vilfredo Pareto. Esta lei determina que 80% de consequências advêm de 20% de causas. Por exemplo, segundo o economista italiano, 80% da riqueza mundial está nas mãos de 20% das pessoas; ou ainda 80% da poluição global é causada por 20% dos países; etc. As percentagens podem variar entre 85X15 ou 75X25, dependo dos problemas analisados, mas dificilmente fogem a esta proporção.
11- Para iniciar o treinamento da base busque a função Train Model dentro do Azure Machine Learning. No menu à esquerda, localize Train Model através da busca e arraste para o experimento. Conecte a primeira saída do Split a segunda entrada do Train Model. À direita na tela, clique em "Launch column selector" e selecione a coluna que será usada para fazer a análise (coluna de predição), que nesse caso é a Mistura.
12- Neste momento defina o algoritmo para predição. No menu à esquerda selecione Machine Learning > Initialize Model > Classification > Two-Class Boosted Decision Tree (algoritmo utilizado para criar um classificador binário) e arraste-o para o experimento. Conecte o algoritmo a primeira entrada do Train Model.
Nota1: Neste experimento estamos fazendo uma classificação binária (sim/não – 1/0). Mas pode-se também fazer uma classificação multiclasses, como por exemplo classificação de elementos (fruta/salgado/vitaminas/etc).
Nota2: Cada modelo de algoritmo apresentado possui características específicas que resolvem problemas semelhantes, mas que sua parametrização individual pode ou não ser a melhor opção para resolver esse problema, podendo ser necessária a escolha de um outro algoritmo.
13- Salve e execute o experimento. Se encontrar algum erro, volte os passos anteriores e verifique se foram seguidos corretamente.
14- Depois de fazer o treino da base é necessário validá-lo. Para isso, selecione no menu Machine Learning > Score > Score Model e arraste-o para o experimento. Dessa forma haverá uma comparação do resultado do treino com o restante de 20% que ainda não foram treinados no Split. Por que isso? A base de treino aplica o algoritmo selecionado e faz uma comparação entre as bases para verificar valores falso-positivo, falso-negativo, verdadeiro-positivo, verdadeiro-negativo.
15- Para avaliar e visualizar o resultado, selecione no menu Machine Learning > Evaluate > Evaluate Model. Conecte a saída do Score Model à primeira entrada do Evaluate Model. Em seguida, salve e execute o experimento. Clique na saída do Evaluate Model e Visualize.
16- Ao gerar o resultado, é exibida a Receiver Operating Characteristic (ROC) Curve, que realiza a comparação entre a sensibilidade e a especificidade do teste quantitativo baseado nos valores que foram treinados pelo algoritmo. Os melhores resultados obtidos são os que enquadram o maior conjunto possível de dados na AUC (Area Under the Curve).
Importante! Abaixo, nessa mesma tela, também é mostrada a acurácia do modelo, que é o total de precisão que ele tem dentro da análise. Aceitando a acurácia, salve o modelo treinado clicando na saída do Train Model > Save as Trained Model.
17- Para visualizar novamente o resultado e saber se esse experimento de treino funcionou ou não, crie um experimento novo, só que consumindo a base completa de alimentos (no nosso exemplo, tabelatodosalimentos_raw.csv). No menu selecione New > Blank Experiment > Saved Datasets e arraste a base para o experimento.
18- No menu à esquerda, clique na opção Trained Models, onde está o modelo de treinamento criado anteriormente, e arraste o modelo treinado para o novo experimento. Adicione um Score Model para ver o resultado.
19- Agora o modelo irá comparar a base de todos os alimentos com a base de treino. Para isso conecte a saída da base de dados com a segunda entrada do Score Model e a saída do Trained Model com a primeira entrada do Score Model. Salve e execute o experimento.
Conforme a imagem acima, houve uma falha no modelo. Através do log do Score Model deve-se verificar o que ocorreu. Nesse caso foi um erro comum de conversão de dados, corrigido através da função Metadata Editor, que edita metadados associados com colunas em um determinado conjunto de dados. Para isso, busque-a no menu à esquerda, conecte sua entrada com a saída da base de dados e sua saída com a segunda entrada do Score Model.
À direita na tela escolha a opção "Launch column selector", que indicará onde colocar as colunas indicadas no log de erros (no nosso exemplo, valor_fibra e valor_vit). É aqui que deve-se fazer a conversão de dados solicitada: "Make categorical".
20- Faça a conversão de dados, salve e execute.
21- Aqui as informações da base completa são cruzadas com as da base treinada. Para exportar o resultado para um arquivo deve-se usar a opção Writer. Para isso, no menu à esquerda, localize-a e arraste-a para o experimento. Conecte sua entrada com a saída do Score Model. Na tela à direita estão disponíveis algumas opções de destino e alguns dados da conta que devem ser confirmados. Neste experimento o export é feito para um arquivo .CSV, no Azure Blob Storage, usando a conta de armazenamento criada no início do experimento. Salve e execute.
22- Voltando na tela do Azure, no menu à esquerda selecione Armazenamento e a conta demoarmazena. No menu acima clique em Contêineres e verifique onde está gravado o resultado (pode-se fazer o download se necessário).
Enfim, o objetivo desse experimento é ensinar para a amostra de dados o que é mistura ou não (manualmente) e depois expandir esse mecanismo para uma base completa. É praticamente dizer "já que você entendeu o que era mistura na amostra, faça isso para a base completa". Isso é apenas um exemplo, usando dados e informações simples, mas que pode dar uma visão do que o aprendizado de máquina é capaz.
Esperamos que vocês possuam tirar proveito deste passo-a-passo e continuar a explorar o Azure Machine Learning.