Pular para conteúdo

Capítulo 1.2 — Dados reais, qualidade e modos de falha

🎯 Objetivo

Tratar dados como o principal risco operacional de um sistema de ML.

🧠 Origens de dados

Fonte Característica Risco principal
Logs e eventos Semi-estruturados, alto volume Parsing frágil, schema implícito
Sistemas transacionais Estruturados, históricos Mudança de schema, snapshot vs ponto-no-tempo
Data lake / warehouse Volume, latência Freshness e governança
APIs externas Heterogêneo, dependência Latência, rate limit, contrato instável
Dados manuais Inseridos por usuários Erros, viés, inconsistência
Dados sintéticos Gerados artificialmente Falsa representatividade

🚨 Modos de falha de dados

  • Label leakage - variável próxima do label entra como feature.
  • Target leakage - feature contém informação futura.
  • Distribution shift - produção difere de treino.
  • Class imbalance - classes raras dominam o erro.
  • Selection bias - coleta de dados enviesada.
  • Late labels - rótulos chegam com atraso, criando feedback distorcido.
  • Cross-tenant leakage - dados de um tenant aparecem em modelo de outro.
  • Stale data - dado expirado tratado como atual.
  • Schema drift silencioso - mudança upstream sem aviso.

🛡️ Controles

  • Data contracts (YAML/JSON) versionados, com regras de qualidade.
  • Validação automática em pipeline (Great Expectations, Pandera, dbt tests).
  • Lineage registrada via data orchestrator (Dagster, Airflow).
  • Isolamento por tenant desde a ingestão.
  • Detecção de drift (Evidently, custom KS/PSI).

📝 Exemplo de data contract

name: transacoes_v1
description: Dataset de transações para detecção de fraude.
owner: equipe-fraude
version: 1.2.0
schema:
  - name: transaction_id
    type: string
    required: true
    unique: true
  - name: timestamp
    type: datetime
    required: true
  - name: amount
    type: float
    required: true
  - name: user_id
    type: string
    required: true
  - name: tenant_id
    type: string
    required: true
quality:
  freshness_minutes: 60
  completeness_pct: 99.9
contracts:
  - rule: "timestamp <= now()"
    description: "Eventos futuros são inválidos"
  - rule: "amount >= 0"
    description: "Valores negativos rejeitados"
  - rule: "tenant_id IN allowlist"
    description: "Tenants conhecidos apenas"

🧰 Exemplo prático relacionado (planejado)

  • EX-ML-01 - pipeline scikit-learn + pandera para validar features.

📌 Checklist

  • [ ] Dataset tem data contract versionado?
  • [ ] Validações falham o pipeline (e não passam silenciosamente)?
  • [ ] Lineage está registrada?

📚 Referências