Alcançar uma métrica excelente em um modelo de Machine Learning não é uma tarefa fácil, imagina não conseguir reproduzir os resultados por não lembrar quais hiperparâmetros foram utilizados
A ideia é sair do “treinei um modelo e deu certo” e entrar no mundo de MLOps, onde eu consigo rastrear experimentos, comparar execuções, armazenar artefatos e repetir o processo com confiança.
O que é MLOps?
MLOps é a pratica de aplicar princípios de DevOps em machine learning (ML) projects. O que envolve gerenciar o lifecycle de projetos de ML, desde restreabilidade no desenvolvimento de treinamento até o deploy, monitoramento.
No desenvolvimento de software tradicional, o controle de versão de código (como o git) é suficiente. Em ML, o resultado é o conjunto de desenvolvimento entre Código + Dados + Hiperparâmetros.
Uma ferramenta dedicada pode facilitar o processo de auditoria e colaboração dos modelos, antes do processo de experimentação se tornar caótico. A ausência de um histórico estruturado impede a reprodutibilidade e escala de qualquer projeto de IA.
O que é MLflow
O MLflow é uma ferramenta que ajuda a aplicar MLOps para organizar o ciclo de vida de projetos de ML. Mesmo num projeto simples, ele já ajuda muito porque cria um histórico do que foi feito em cada treino.
Na prática, o MLflow me ajuda a responder perguntas como:
- Qual conjunto de parâmetros gerou a melhor métrica?
- Quando eu rodei o treinamento e qual foi o resultado?
- Onde está salvo o modelo treinado daquela execução?
MLflow como sua camada de Tracking
O MLflow surge para padronizar essa gestão. Nesse momento iremos focar nos três tipos de registros fundamentais:
-
Parâmetros: Inputs de configuração (ex:
learning_rate,n_estimators) -
Métricas: Resultados de performance (ex:
accuracy,log_loss) -
Artefatos: O output binário (o modelo treinado em
.pklou.onnx)
O MLflow transforma experimentação ad-hoc em um sistema de registro auditável e padronizado.
Hands On: Setup do projeto
Como de costume, irei demonstrar como implementar uma configuração simples do MLFlow:
-
Backend Store: SQLite (um arquivo
mlflow.db) para guardar metadados (experimentos, runs, params, metrics). -
Artifact Store: File store (pasta
mlruns/) para guardar artefatos (como o modelo salvo).
Setup do Servidor
# Instalação
pip install mlflow
# Inicialização do servidor
mlflow server \
--backend-store-uri sqlite:///mlflow.db \
--default-artifact-root ./mlruns \
--host 0.0.0.0 \
--port 5000
Parâmetros:
-
mlflow server: inicia o serviço do mlflow -
backend-store-uri: escolhi o sqlite por ser leve, ideal para primeira iteração com a ferramenta -
default-artifact-root: path onde serão armazenados os metadados dos experimentos -
hosteport: caminho no qual o server estará disponível para conexão, inclusiva para uso via UI
Propriedades MLflow:
Quando uso SQLite + file store, é comum ver dois componentes principais no diretório do MLflow:
-
mlflow.db: banco SQLite com metadados. Armazena experimentos, runs, parâmetros e métricas. -
mlruns/: pasta com os artefatos e o conteúdo das runs. Armazena modelos, plots, etc.
Integração no Script de Treino
A biblioteca mlflow do python nos permite conectar facilmente com a ferramenta, sem muito impacto no código, a integração é bem minimalista. Basta setar os parametros iniciais e usar mlflow.start_run():
import mlflow
mlflow.set_tracking_uri("http://localhost:5000")
mlflow.set_experiment("Customer_Churn_Experiment")
with mlflow.start_run():
# Treino do modelo...
mlflow.log_param("max_depth", 10)
mlflow.log_metric("accuracy", 0.85)
mlflow.sklearn.log_model(model, "random_forest_model")
Neste cenário, a infraestrutura do MLflow foi desacoplada do código de treinamento, tornando necessária a configuração da URI da instância via set_tracking_uri.
Primeira Interação
Na primeira vez que eu rodo o meu script treinamento:
O experimento Customer_Churn_Experiment é criado automaticamente

Params, metrics e artifacts são enviados para o tracking server

Params e Metrics rastreados
No meu caso, registrei:
-
Params:
n_estimators,max_depth -
Metrics:
accuracy,recall
y_pred = model.predict(X_test)
acc = accuracy_score(y_test, y_pred)
rec = recall_score(y_test, y_pred)
mlflow.log_param("n_estimators", n_estimators)
mlflow.log_param("max_depth", max_depth)
mlflow.log_metric("accuracy", acc)
mlflow.log_metric("recall", rec)
Isso me permite comparar execuções diferentes sem depender de print no terminal.

Segunda Interação
O valor real do MLOps aparece na análise comparativa entre os modelos que o cientista utilizou bem como o processo percorrido.
Nessa etapa, realizei uma segunda interação, alterando os valores dos hiperparâmetros max_depth e n_estimators. Embora esperasse uma melhora, ao inspecionar a UI do MLflow, percebi que a métrica de accuracy caiu.
Aqui pude perceber o poder real da ferramenta:
Rastreabilidade: Você tem a prova empírica de que a mudanca dos hiperparametros gerou overfitting
Comparação Técnica: Através da UI do MLflow, você compara as duas execuções
Pilar de Reprodutibilidade: Se precisar retornar à versão anterior, o artefato está registrado e pronto para deploy (aprofundarei mais sobre isso no futuro)
Se você ainda está surpreso com o que viu, saiba que essa ferramenta é realmente um divisor de águas. Ela transforma a forma como gerenciamos a rastreabilidade no ciclo de vida de modelos e simplifica a comparação entre diferentes versões, sendo essencial desde os primeiros testes até projetos construídos do zero.
Conferindo metadados no SQLite
Uma parte legal desse tipo de setup local é que eu consigo inspecionar o SQLite pela linha de comando.
- Experimentos registrados no SQLite:
- Parâmetros e métricas registrados:
Conclusão e Próximos Passos
Dominar a gestão do estado do modelo é um requisito fundamental na Engenharia de MLOps. Enquanto o MLflow soluciona a camada de tracking, o ciclo de vida se estende ao Model Registry e ao Model Serving. Em breve, exploraremos como essas etapas garantem a maturidade de um modelo em produção.
Dominar o rastreamento de experimentos é o alicerce fundamental para implementar Continuous Training (CT) no futuro.
Gostou dessa abordagem técnica?
Este projeto está disponível no meu GitHub: mlops-telco-churn-predict.
E você: já utiliza o MLflow no seu dia a dia? Na sua visão, qual é o maior desafio para garantir a reprodutibilidade total dos modelos?
Vamos debater nos comentários!



Top comments (0)