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.4.tar.gz (16.3 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.4-py3-none-any.whl (17.0 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for mlops_sufficiency-0.1.4.tar.gz
Algorithm Hash digest
SHA256 75e3c951c8003702059f4fdf09a9da5e04f535aeb4c510a1b4d28765a4696129
MD5 08e494824cacbbe60641b9f31801cec4
BLAKE2b-256 4ff9595057d46359a3eb50c5bd98c2eb86f4822ac33b65997628b1e48ab3e072

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mlops_sufficiency-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 97ac946a329ae1632702bce6f006521019c412715d7993eb810f128c79e467a4
MD5 6352885f59fd18908b6a8b1b84c177c0
BLAKE2b-256 1b88cad6d43992723019b6bda51500d7a0c0e84e718466ce9eaf8216f7e5be1e

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