Pular para conteúdo

🚀 Machine Learning Engineer Challenge

🎯 Visão Geral

Este repositório contém a solução completa para o Case Técnico de Machine Learning Engineer, implementando uma arquitetura profissional para predição de atrasos de voos usando FastAPI, Machine Learning e Docker.

🌟 Destaques do Projeto

graph TB
    A[📊 Análise de Dados] --> B[🤖 Machine Learning]
    B --> C[⚡ API FastAPI]
    C --> D[🐳 Docker/Docker Compose]
    D --> E[🧪 Testes Automatizados]
    E --> F[📖 Documentação MkDocs]

    style A fill:#e1f5fe
    style B fill:#f3e5f5
    style C fill:#e8f5e8
    style D fill:#fff3e0
    style E fill:#fce4ec
    style F fill:#f1f8e9

🎯 Componentes do Sistema

Componente Descrição Tecnologias
📊EDA Análise exploratória Pandas, Jupyter Notebooks
🤖ML Pipeline Pipeline de ML Scikit-learn, Feature Eng.
API REST Serviço de predição FastAPI, Pydantic
🐳Containerização Deploy com containers Docker, Docker Compose
🧪Testes Testes unitários Pytest, Coverage
📖Documentação Docs técnicas MkDocs, Material Theme

🚀 Começando Rapidamente

📋 Pré-requisitos

  • 🐍 Python 3.12.7
  • 📦 Poetry (gerenciador de dependências)
  • 🐳 Docker e Docker Compose (opcional)
  • 💻 Git para versionamento

⚡ Instalação Rápida

# 1. Clone o repositório
git clone https://github.com/ulissesbomjardim/machine_learning_engineer.git
cd machine_learning_engineer

# 2. Configure Python e Poetry
poetry env use 3.12.7
poetry install

# 3. Ative o ambiente virtual
poetry shell

# 4. Execute os testes
task test

# 5. Inicie a API
uvicorn src.routers.main:app --reload

API Rodando

🌐 API: http://localhost:8000 📚Swagger: http://localhost:8000/docs 📖Documentação: mkdocs serve

📁 Estrutura do Projeto

machine-learning-engineer/
├── 💻 src/
│   ├── routers/          # 🔗 Endpoints da API
│   │   ├── main.py       # 🚀 App principal
│   │   └── model/        # 🤖 Rotas ML
│   └── services/         # ⚙️ Serviços
├── 🧪 tests/            # Testes unitários
├── 📊 data/             # Datasets
├── 🗄️ model/           # Modelos treinados
├── 📓 notebook/         # Jupyter Notebooks
├── 📖 docs/             # Documentação MkDocs
├── 🐳 docker/           # Configurações Docker
└── ⚙️ pyproject.toml    # Dependências Poetry

🤖 Sobre o Challenge

🎯 Objetivo Principal

Desenvolver um sistema completo de predição de atrasos de voos que inclui:

  • 📊 Análise exploratória dos dados históricos
  • 🤖 Modelo de Machine Learning para classificação
  • API REST para predições em tempo real
  • 🐳 Deploy containerizado para produção
  • 🧪 Testes automatizados para garantir qualidade

📋 Funcionalidades Implementadas

Endpoint Método Descrição
/ GET Informações da API
/health GET Status do sistema
/docs GET Documentação Swagger
/model/predict POST Predição de atraso
/model/load GET/POST Carregamento de modelos
/model/history GET Histórico de predições

🧠 Pipeline de Machine Learning

graph LR
    A[📊 Dados Brutos] --> B[🔧 Preprocessing]
    B --> C[⚙️ Feature Engineering]
    C --> D[🤖 Treinamento]
    D --> E[📈 Avaliação]
    E --> F[💾 Persistência]
    F --> G[⚡ API Deployment]

    style A fill:#e3f2fd
    style B fill:#f3e5f5
    style C fill:#e8f5e8
    style D fill:#fff3e0
    style E fill:#fce4ec
    style F fill:#f1f8e9
    style G fill:#e1f5fe

🚀 Quick Start

🏗️ Arquitetura

🤖 Machine Learning

API Reference

🐳 Docker

🧪 Testes

📓 Notebooks

🛠️ Comandos Úteis

📦 Poetry

poetry install          # Instalar dependências
poetry shell           # Ativar ambiente virtual
poetry add <package>   # Adicionar pacote

🧪 Testes

task test              # Executar todos os testes
task test-cov         # Testes com coverage
pytest -v             # Testes verbose

API

uvicorn src.routers.main:app --reload  # Desenvolvimento
uvicorn src.routers.main:app --host 0.0.0.0 --port 8000  # Produção

🐳 Docker

docker-compose up --build    # Build e executar
docker-compose up           # Executar containers
docker-compose down         # Parar containers

📖 Documentação

mkdocs serve           # Servidor local
mkdocs build          # Build estático
mkdocs gh-deploy      # Deploy GitHub Pages

🤝 Contribuindo

Este projeto segue as melhores práticas de desenvolvimento:

  • 🎨 Formatação: black e isort
  • 🧪 Testes: pytest com cobertura
  • 📋 Linting: ruff para qualidade do código
  • 📖 Docs: mkdocs para documentação

Para contribuir:

  1. Fork o repositório
  2. Crie uma branch para sua feature
  3. Execute os testes: task test
  4. Faça commit das mudanças
  5. Abra um Pull Request

📞 Suporte


**🎉 Explore a documentação para descobrir todos os recursos! 🎉** *📅 Última atualização: 2024-12-21*