Treinando e implantando um modelo de Machine Learning com a Tail Refinaria

Treinando e implantando um modelo de Machine Learning com a Tail Refinaria
23

No artigo anterior, nós mostramos como adicionar estágios de feature engineering a uma célula de Machine Learning de um pipeline para transformar os dados que serão usados pelo algoritmo de machine learning. Nós usamos como ponto de partida os dados e exemplos que estão no artigo “Creating a k-means clustering model”, do Google. Este exemplo irá inferir a que cluster pertence uma estação de bicicletas de Londres usando o algoritmo k-means.

Quando os dados são limpos e transformados, eles estão prontos para serem usados no treino de um novo modelo. Depois que um modelo for treinado, avaliado e aprovado, nós ainda precisamos implantá-lo em produção na empresa.

A dificuldade de implantar um modelo em produção é um problema comum para muitas equipes de Ciência de Dados. Versionar o modelo, ter um catálogo de modelos para que um modelo possa ser encontrado, e ainda executar o código do modelo eficientemente em produção não são tarefas fáceis. Geralmente é responsabilidade das equipes de Ciência de Dados e Devops criar uma estratégia para executar eficientemente estas tarefas.

Com a Tail Refinaria, nós decidimos prover métodos para tornar todas estas tarefas fáceis e intuitivas.

 

Veja como é feito o treino de um modelo de Machine Learning na Tail Refinaria:

 

1- Depois de adicionar os estágios de feature engineering à célula de Machine Learning (veja o artigo anterior), nós precisamos selecionar um algoritmo de machine learning para ser executado. Neste exemplo, nós escolhemos o k-means. Note que a célula de machine learning está em modo treino:

 

Neste exemplo, nós escolhemos a coluna “feature” como entrada e a coluna “prediction” como a coluna que terá os valores inferidos pelo algoritmo k-means. Note que “feature” é o nome da coluna que criamos no estágio de feature engineering descrito no artigo anterior.

2- Quando adicionamos um estágio de machine learning, nós podemos configurar os parâmetros do algoritmo. Aqui estamos adicionando o valor de 4 ao parâmetro “k” (que representa o número de clusters que queremos obter):

3- Nós podemos então executar a célula e inspecionar as métricas do modelo. Note que quando nós executamos a célula, todos os estágios são executados. Isso significa que o estágio de feature engineering é executado antes do treino do modelo:

 

4- Se o modelo é satisfatório, nós podemos marcar a opção de gravar o modelo e dar um nome a ele. Desta forma, quando executarmos esse pipeline, um novo modelo será treinado e persistido para ser usado em produção mais tarde:

 

5- Se quisermos testar o modelo, nós podemos adicionar uma nova célula de machine learning ao pipeline, mas usando o modo predição dessa vez. Depois, selecionamos um conjunto de dados para testar o modelo e executar:

 

6- Se estivermos satisfeitos com o resultado da nossa experimentação, podemos gravar este pipeline e agendarmos para que o modelo seja treinado de verdade em um conjunto de dados maior. Note que o treino irá acontecer em um cluster Apache Spark, e por isso você pode usar um conjunto grande de dados, tirando proveito do poder de processamento distribuído do Apache Spark.

Nós podemos, obviamente, adicionar outras células ao pipeline de treino. Nós poderíamos, por exemplo, adicionar uma célula de escrita para gravar os resultados do teste em outro datastore para que possamos inspecionar depois, ou adicionar uma célula de visualização para gerar gráficos com os resultados.

Quando nós gravamos e executamos o pipeline, a Tail Refinaria irá adicionar o novo modelo ao catálogo de modelos. Assim, a equipe de Ciência de Dados pode acessar os modelos disponíveis e entender como eles foram criados.

 

Veja como o usar o Catálogo de Modelos da Tail Refinaria:

1- No catálogo de modelos, nós podemos ver todos os modelos criados pela empresa em um único lugar:

 

2- Inspecionando um modelo, podemos ver suas métricas, parâmetros e quando ele foi treinado:

 

As métricas apresentadas dependem do algoritmo que foi usado. Para uma Regressão Logística, por exemplo, seria apresentada uma matriz de confusão e outras métricas.

A Tail Refinaria possui mais informações no Catálogo de Modelos, mas vamos discutir isso em um dos próximos artigos, quando falarmos sobre Model Lineage.

Quando nós selecionamos um modelo para ser usado, é hora que colocarmos o modelo em ação. O modelo que acabamos de treinar é usado para inferir o cluster de uma estação de bicicletas. Então, vamos criar um novo pipeline, ler alguns dados, e aplicar o modelo que treinamos a eles:

 

1- O primeiro passo é adicionar uma célula de leitura para selecionar um datastore do nosso Data Lake. O modelo será aplicado aos dados deste datastore. Note que como este pipeline é interativo (também chamado de notebook), nós podemos simular os resultados conforme vamos adicionando as células:


2- A seguir, nós adicionamos uma célula de Machine Learning no modo predição e selecionamos um modelo externo, ou seja, um modelo que foi treinado e persistido por outro pipeline:

3- Neste exemplo, nós selecionamos o modelo London Bike – kmeans e a célula nos mostra as entradas que deveríamos prover e as saídas que o modelo nos dará. Nós podemos agora executar a célula para testar se o resultado é o que queremos:

 

4- Agora podemos decidir o que fazer com a saída gerada. Nós poderíamos, por exemplo, adicionar uma célula de escrita e gravar a saída em outro datastore, ou adicionar uma célula de exportação e exportar o resultado para um sistema externo, ou mesmo usar a saída como entrada de uma célula Spark SQL para consultá-la e encontrar novos insights. Vamos criar uma célula de escrita e gravar o resultado em outro datastore:

Esta célula de escrita irá gravar as predições em um novo datastore chamado London Stations Predicted. Este novo datastore será adicionado ao Data Lake e mais tarde, quando inspecionarmos o seu Data Lineage, nós veremos que o modelo London Bike – kmeans foi usado para gerar os seus dados.

Nós podemos agora gravar este pipeline e agendá-lo para execução. Como você pode ver, executar um modelo em produção é tão simples quanto adicioná-lo ao pipeline. Como sempre, o pipeline irá ser executado em um cluster Apache Spark, de forma que grandes conjuntos de dados possam ser utilizados. Como os modelos são versionados, se você treinar uma nova versão do mesmo modelo, você pode executar novamente este pipeline para produzir dados atualizados. Melhor ainda, com a Tail Refinaria você pode usar o módulo de agendamento para agendar que o pipeline de predição seja executado sempre depois que um pipeline de treino for executado.

 

Até agora nós usamos os pipelines interativos para treinar e executar os nossos modelos e mostramos um pouco como executar experimentos da Tail Refinaria.

No próximo artigo vamos discutir porque uma integração completa com notebooks de Ciência de Dados é importante para aumentar a produtividade das equipes de Ciência de Dados.

 

Esse post faz parte de uma série de conteúdos sobre Refinaria de Dados.

Confira todos os conteúdos:

Post 1: Tail Refinaria – Resolvendo os problemas da Engenharia de Dados

Post 2: Machine Learning com a Tail Refinaria

Post 3: Acesso fácil a dados de treino para construção de modelos de Machine Learning com a Tail Refinaria

Post 4: Simplificando a utilização de algoritmos de Feature Engineering com a Tail Refinaria

Post 5: Treinando e implantando um modelo de Machine Learning com a Tail Refinaria

Post 6: Usando Notebooks de Ciência de Dados para Treino e Implantação de Modelos de Machine Learning

Post 7: Precisamos falar sobre Model Lineage

 

Post escrito por Fabiane Bizinella Nardon (@fabianenardon), Cientista Chefe da Tail. Com mestrado em Ciência da Computação e Doutorado em Engenharia Elétrica, é especialista em Engenharia de Dados e Engenharia de Machine Learning. É também responsável pelo conteúdo editorial da trilha de Engenharia de Machine Learning do QCon São Paulo, palestrante frequente sobre o tema e autora de diversos artigos. Fabiane também foi escolhida Java Champion pela Sun Microsystems, como reconhecimento de sua contribuição para o ecossistema Java.