Predicting agricultural yield is essential for effective resource planning and maximizing production. This project demonstrates a complete MLOps solution using Python, MLflow, FastAPI, and Docker to simulate and predict crop yields based on factors like temperature, rainfall, soil pH, and fertilizer usage.
Prever o rendimento agrícola é essencial para o planejamento de recursos e maximização da produção. Este projeto demonstra uma solução completa de MLOps utilizando Python, MLflow, FastAPI e Docker para simular e prever a produtividade com base em fatores como temperatura, precipitação, pH do solo e uso de fertilizantes.
Farmers and agronomists need intelligent tools to forecast yields. However, many do not have access to systems that can leverage data and machine learning.
This project includes:
- Mock dataset with agricultural features
- Python training pipeline (Random Forest)
- Model deployment with FastAPI
- MLflow tracking
- Docker Compose orchestration
- Automated testing with pytest
With only 100 mock samples, the trained model reached a Mean Squared Error (MSE) of ~16.8. The FastAPI server returns instant predictions. All experiments are tracked in MLflow.
In this project, the model's performance is evaluated using MSE (Mean Squared Error). MSE is a common metric used in regression tasks to measure the average of the squares of the errors between predicted and actual values.
- ( y_i ): actual value
- ( \hat{y}_i ): predicted value
- ( n ): number of observations
- MSE close to 0 means high accuracy
- Higher MSE indicates the model is making large errors
- In our training run, MSE ≈ 28.88
Neste projeto, a performance do modelo é avaliada utilizando o MSE (Erro Quadrático Médio). O MSE é uma métrica comum em tarefas de regressão que mede a média dos quadrados dos erros entre os valores previstos e os reais.
- ( y_i ): valor real
- ( \hat{y}_i ): valor previsto
- ( n ): número de observações
- MSE próximo de 0 indica alta precisão
- MSE alto indica que o modelo está cometendo grandes erros
- No nosso treinamento, MSE ≈ 28.88
Produtores rurais e agrônomos precisam de ferramentas inteligentes para prever o rendimento, mas muitos não têm acesso a sistemas baseados em dados e machine learning.
Este projeto inclui:
- Base de dados simulada com variáveis agrícolas
- Pipeline de treinamento com Python (Random Forest)
- Deploy do modelo via FastAPI
- Rastreamento com MLflow
- Orquestração com Docker Compose
- Testes automatizados com pytest
Com apenas 100 amostras simuladas, o modelo treinado obteve um Erro Quadrático Médio (MSE) de ~16.8. A API FastAPI responde com previsões em tempo real. Todos os experimentos são rastreados no MLflow.
Este projeto demonstra um pipeline completo de MLOps com Python, incluindo:
- Treinamento de modelo com
scikit-learn - Deploy com
FastAPI - Monitoramento com
MLflow - Testes com
pytest - Containerização com
Docker - Orquestração com
docker-compose - CI/CD com GitHub Actions
data/→ Base de dados simulada (mock)models/→ Modelos treinados salvos em.pklapi/→ API FastAPI para servir prediçõestest_api.py→ Testes com pytestDockerfile→ Container do serviçodocker-compose.yml→ Orquestração da API e do MLflowMakefile→ Comandos para automação de tarefastrain.py→ Script de treino com MLflow
O projeto conta com integração contínua via GitHub Actions. O workflow:
- Executa
pytestpara validar a API - Garante que o modelo esteja treinável
- Pode ser estendido para deploy automático
# 1. Build do ambiente
make build
# 2. Treinar o modelo
make train
# 3. Executar a API
make run
# 4. Rodar MLflow separadamente (http://localhost:5000)
make mlflow
# 5. Testar com pytest
make testProjeto criado por Marco Maddo como exemplo educacional de MLOps com Python.
- Build dos serviços
make build- Treinamento do modelo
make train- Executar a API
make run- Iniciar o servidor MLflow
make mlflow- Rodar testes
make testEste projeto pode ser testado automaticamente com o seguinte workflow:
name: CI - Test API
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
services:
docker:
image: docker:19.03.12
options: --privileged
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build container
run: docker-compose build
- name: Run tests
run: docker-compose run --rm api pytest test_api.pyPara usar:
- Salve este conteúdo como
.github/workflows/test.ymlno seu repositório. - Push para o GitHub e os testes rodarão automaticamente!

