Descomplicando Machine Learning - Parte V
Published: 2023-12-02 23:06:01

### Motivação

Parabéns por chegares até aqui! Percorremos uma jornada significativa até aqui. No início da nossa jornada, abordamos conceitos fundamentais de machine learning, isto é, no [artigo I](https://dev.to/tandavala/descomplicando-machine-learning-parte-i-2b2f), também discutimos alguns desafios que podem se apresentar ao iniciar uma carreira nesta área empolgante. Caso ainda não tenhas lido, confira neste [link](https://dev.to/tandavala/descomplicando-machine-learning-parte-ii-3d05).

Mais adiante, introduzimos o [CRISP-DM](https://dev.to/tandavala/descomplicando-machine-learning-parte-iii-c80), que serviu como bússola para desenvolver o nosso [projeto de estudo de caso](https://dev.to/tandavala/descomplicando-machine-learning-parte-iv-2p1m). Agora, com um [modelo](https://www.kaggle.com/code/tandavala/modelo-preditivo-de-pre-os-residenciais) de aprendizado de máquina em mãos, é o momento de levá-lo à produção. Tudo pronto para embarcar nesta próxima fase da nossa aventura? Então vamos nessa.

#### Agenda:
1. Explorando **MLOps**: Uma visão abrangente
2. Entendendo **Drift** em Machine Learning: Uma breve introdução
3. Construindo um **Pipeline** de Desenvolvimento para Machine Learning

### 1. Explorando MLOps: Uma visão abrangente


Para profissionais que atuam no desenvolvimento de software, é amplamente reconhecido que ao implantar uma solução em produção, a adoção de práticas de [DevOps](https://pt.wikipedia.org/wiki/DevOps) é fundamental. No contexto de projetos de machine learning, a realidade não é diferente; para colocar uma solução em produção, recorremos a práticas de [MLOps](https://pt.wikipedia.org/wiki/MLOps). Diria que **MLOps** é uma extensão do **DevOps** direcionada ao aprendizado de máquina, acredito que só com este argumento já dá para ter uma visão abrangente dessa abordagem.

Neste artigo veremos, como automatizar o cíclo de vida de desenvolvimento de um projeto ML usando ferramentas e práticas de MLOps. Abaixo, apresentamos uma lista das principais ferramentas que contribuem para a cultura de **MLOps**:

- **Cookiecutter**: ferramenta de linha de comando que facilita a criação de projetos a partir de templates pré-definidos.
- **git/github**: ferramentas de versionamento e hospegagem de código
- **Data version control (DVC)**: ferramenta projetada para gerenciar o versionamento de dados em projetos de ciência de dados e machine learning (**não veremos aqui**).
- **MLFlow**: Registro e organização (```versionamento```) de experimentos de machine learning. Isso inclui a gravação de parâmetros, métricas e artefatos associados a um modelo durante o treinamento. (```usaremos apenas para o veriosnamento e gravação de artifatos```)
- **Docker**: plataforma de código aberto que automatiza o processo de implantação de aplicativos dentro de container

**Outras ferramentas:**
- **Flask**: framework para desenvolvimento de apps web e restfull em Python
- **Pytest**: framework de teste em Python que facilita a escrita de testes unitários, de integração e funcionais
- **ReactJs**: biblioteca JavaScript para a construção de interfaces de usuário

### 2. Entendendo Drift em Machine Learning: Uma breve introdução

Em machine learning, o termo ***drift*** refere-se a um fenômeno em que a distribuição dos dados utilizados para treinar um modelo de machine learning muda ao longo do tempo de maneira não esperada. Esse fenômeno pode ter um impacto significativo no desempenho do modelo, pois o modelo foi treinado com base em uma distribuição específica de dados, e sua eficácia pode diminuir quando confrontado com dados que diferem dessa distribuição original.

Existem dois tipos principais de drift em machine learning:

**1. Drift de Conceito (Concept Drift)**: Isso ocorre quando a relação entre as variáveis de entrada e a variável de saída (rótulo) muda ao longo do tempo

**2. Drift de Dados (Data Drift):** Refere-se a mudanças na distribuição dos dados de entrada ao longo do tempo, ou seja, Se o modelo foi treinado em uma distribuição específica e é exposto a dados que não seguem mais essa distribuição, sua eficácia pode diminuir.

Abaixo, estão algumas práticas para prevenir drift em projetos de Machine Learning:

- Monitoramento Contínuo
- Re-treinamento Incremental (a importância desse tópico será abordada no próximo ponto)
- Desenvolvimento de Modelos Robustos

### 3. Construindo um Pipeline de Desenvolvimento para Machine Learning

Pipeline em machine learning, refere - se a uma sequência de processos automatizados encadeados para realizar tarefas específicas, desde a preparação dos dados até a avaliação do modelo. O ciclo de vida de um modelo de machine learning não se encerra após o treinamento inicial e a implantação, como discutimos anteriormente, o cíclo de vida do projeto é transformado em um processo contínuo para evitar problemas como o Drift. É nesse contexto que os pipelines se destacam, essa abordagem sistemática é projetada para facilitar a reprodutibilidade, modularidade e eficiência no desenvolvimento e implementação de modelos de machine learning.

Os pipelines em machine learning geralmente incluem as seguintes etapas:

- **Coleta de Dados**: Aquisição e importação dos dados necessários para treinar e testar o modelo.
- **Pré-processamento de Dados**: Manipulação e limpeza dos dados brutos para torná-los adequados para treinamento de modelos
- **Engenharia de Recursos (Feature Engineering)**: Criação ou modificação de variáveis para melhorar o desempenho do modelo
- **Treinamento do Modelo**: Utilização de algoritmos de machine learning para treinar o modelo nos dados preparados
- **Validação do Modelo**: Avaliação do desempenho do modelo utilizando dados de validação ou testes
- **Ajuste do Modelo (Fine-Tuning)**: Ajuste dos hiperparâmetros do modelo para melhorar o desempenho.
- **Implantação**: Colocação do modelo em produção para que ele possa ser usado para fazer previsões em dados novos

Já que estamos utilizando o scikit-learn em nosso projeto de caso de uso, então veremos na pratica a construção da pipeline usando esta ferramenta.


### Conclusão

Agora que estabelecemos os fundamentos para a implantação de um projeto de machine learning, é importante recordar que abordamos temas cruciais, tais como MLOps, sua relevância, estratégias para evitar o drift em projetos de machine learning, e concluímos a discussão com o conceito de **pipeline**. 

No próximo artigo, iremos colocar tudo isso em prática. Vamos construir nossa pipeline de machine learning, incorporando práticas de MLOps para automatizar o fluxo de re-treinamento e implantação do nosso modelo em produção. Até lá, cuide-se, e nos encontramos no próximo artigo.