Skip to main content

Biblioteca MLOps para avaliação de suficiência de treinamento de modelos de detecção de objetos

Project description

mlops_sufficiency

Biblioteca Python para avaliação de suficiência de treinamento de modelos de IA
Desenvolvida para o projeto de mestrado em MLOps aplicado à detecção de resíduos urbanos.
Autor: Yago de Jesus Martins


Visão Geral

mlops_sufficiency responde à pergunta central do projeto de mestrado:

"O modelo de detecção de objetos já está treinado o suficiente?"

A biblioteca avalia continuamente as métricas de inferência do modelo e decide, com base em critérios configuráveis, se o modelo está pronto para produção, se precisa de mais treinamento ou se está degradando em ambiente real.


Módulos

Módulo Responsabilidade
InferenceMetricsCollector Coleta e agrega métricas de cada frame inferido
DataDriftDetector Detecta deriva de dados comparando janelas temporais com o baseline
TrainingSufficiencyEvaluator Decide o status de suficiência com score e critérios detalhados
SufficiencyReport Gera relatórios em texto e JSON para logs, CI/CD e orientadores
VideoAPIClient Integração com a API de vídeos do sistema (/movies/import)

Instalação

# Clonando o repositório
git clone <repo>
cd mlops_sufficiency
pip install -e .

# Sem dependências externas — funciona com Python 3.9+ puro

Uso Básico

from mlops_sufficiency import (
    TrainingSufficiencyEvaluator,
    InferenceMetricsCollector,
    SufficiencyReport,
)
from mlops_sufficiency.metrics import DetectionResult

# 1. Colete métricas de inferência
collector = InferenceMetricsCollector(window_size=100)

# Para cada frame processado pelo modelo YOLO:
collector.add(DetectionResult(
    frame_id="frame_000001",
    video_id="550e8400-e29b-41d4-a716-446655440000",  # UUID da API
    confidence_scores=[0.91, 0.78, 0.85],
    true_positives=3,
    false_positives=0,
    false_negatives=1,
    inference_time_ms=145.2,
))

# 2. Avalie suficiência
evaluator = TrainingSufficiencyEvaluator()
result = evaluator.evaluate(collector)

# 3. Gere o relatório
report = SufficiencyReport(result, model_name="yolov8-residuos-v1.2")
report.print()

print(result.is_sufficient())      # True / False
print(result.needs_retraining())   # True / False
print(result.score)                # 0.0 – 1.0

Detecção de Deriva (Data Drift)

from mlops_sufficiency import DataDriftDetector

detector = DataDriftDetector(
    confidence_drop_threshold=0.05,   # queda de 5% na confiança
    f1_drop_threshold=0.05,
    fp_rate_increase_threshold=0.05,
)

# Define o baseline após o treinamento inicial
detector.set_baseline_from_collector(collector_inicial)

# Em produção, avalia periodicamente
drift_report = detector.evaluate(collector_producao)

print(drift_report.severity)                # none / low / medium / high
print(drift_report.is_retraining_needed())  # True / False
print(drift_report.recommendation)

Integração com a API de Vídeos

from mlops_sufficiency import VideoAPIClient

client = VideoAPIClient(
    base_url="http://localhost:3000",
    token="SEU_JWT_TOKEN",
)

# Lista vídeos processados
videos = client.list_processed_videos()

# Estatísticas do pipeline
stats = client.pipeline_stats()
print(stats)  # {"Enviado": 10, "Processado": 47, "Erro ao processar": 2, "total": 59}

Critérios de Suficiência (configuráveis)

from mlops_sufficiency.evaluator import SufficiencyThresholds

thresholds = SufficiencyThresholds(
    min_mean_confidence=0.70,        # confiança mínima média
    min_mean_precision=0.75,         # precisão mínima
    min_mean_recall=0.70,            # recall mínimo
    min_mean_f1=0.72,                # F1 mínimo
    max_false_positive_rate=0.15,    # máximo de FP
    max_false_negative_rate=0.20,    # máximo de FN
    max_inference_time_ms=500.0,     # latência máxima (ms)
    max_confidence_std=0.12,         # volatilidade máxima
    min_samples=200,                 # amostras mínimas para avaliar
)

Executar Testes

python -m pytest tests/ -v

Status de Saída

Status Significado
sufficient Modelo pronto. Pode ir para produção.
needs_more_data Menos de min_samples amostras coletadas.
needs_retraining Métricas abaixo dos limiares. Re-treinar.
degraded Em produção, mas com deriva severa. Re-treinar urgente.

Integração com o Pipeline MLOps

Vídeo ──► /movies/import ──► YOLO inference ──► InferenceMetricsCollector
                                                          │
                                          TrainingSufficiencyEvaluator
                                                          │
                                    ┌─────────────────────┴──────────────────┐
                                    │                                        │
                              sufficient                             needs_retraining
                                    │                                        │
                             Deploy produção                     Trigger re-train pipeline

Estrutura do Projeto

mlops_sufficiency/
├── mlops_sufficiency/
│   ├── __init__.py
│   ├── metrics.py          # InferenceMetricsCollector, DetectionResult
│   ├── drift.py            # DataDriftDetector, DriftReport
│   ├── evaluator.py        # TrainingSufficiencyEvaluator, SufficiencyResult
│   ├── report.py           # SufficiencyReport
│   └── api_client.py       # VideoAPIClient
├── tests/
│   └── test_mlops_sufficiency.py
├── example_uso_completo.py
├── setup.py
└── README.md

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mlops_sufficiency-0.1.1.tar.gz (4.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mlops_sufficiency-0.1.1-py3-none-any.whl (3.5 kB view details)

Uploaded Python 3

File details

Details for the file mlops_sufficiency-0.1.1.tar.gz.

File metadata

  • Download URL: mlops_sufficiency-0.1.1.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.9

File hashes

Hashes for mlops_sufficiency-0.1.1.tar.gz
Algorithm Hash digest
SHA256 089e51f91b47ac969b64264b39d9a4a1d112df63efeadb1a923fdbd9dc94ccbc
MD5 f11f9c872f7b6419dca8f1405a3bdf5c
BLAKE2b-256 cf46d883b36f2135e9e6fb91e01179b74e611dbc50569a945e06eddaf3a969d1

See more details on using hashes here.

File details

Details for the file mlops_sufficiency-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for mlops_sufficiency-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 178bf8eb8bbd3934763f0ad59cfbe52f52335f047f5b73abcede6f720d31a568
MD5 2122c4290557078a6720fc2e4aa34e48
BLAKE2b-256 ce7dcffdf09dad5c483412616a747e8b94b87787b2d6209fb01416d7094ea02e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page