Validação de Dados

Validação de DadosImportância da Validação de Dados em Redes Neurais e Aprendizado de Máquina1. Por que Validar Dados? O que Acontece se Não Fizermos Isso?Problemas que Podem Ocorrer sem Validação de Dados2. Principais Métodos de Validação de Dados3. Referências BibliográficasResumoScript Exemplo de Validação de DadosTécnicas de Validação Cruzada Adequadas1. Stratified K-Fold2. Stratified Shuffle Split 3. Leave One Out (LOO) Comparações & RecomendaçõesRecomendações adicionaisTratamento de Valores InválidosExemplo de Saída de Relatório


Importância da Validação de Dados em Redes Neurais e Aprendizado de Máquina

A validação de dados é uma etapa crítica no desenvolvimento de modelos de machine learning e redes neurais. Ignorá-la pode levar a resultados enganosos, modelos imprecisos e até mesmo falhas em produção.

 

1. Por que Validar Dados? O que Acontece se Não Fizermos Isso?

Problemas que Podem Ocorrer sem Validação de Dados

  1. Viés no Modelo (Bias)

    • Dados inconsistentes ou incorretos enviesam o modelo, fazendo com que ele aprenda padrões errados.
    • Exemplo: Se uma coluna binária contém valores como 0, 1, 2, "sim", o modelo pode interpretar incorretamente as classes.
  2. Overfitting em Dados Sujos

    • O modelo pode memorizar ruídos ou erros nos dados em vez de aprender generalizações úteis.
  3. Falhas Silenciosas (Silent Failures)

    • O código pode rodar sem erros, mas produzir previsões absurdas devido a entradas malformadas.
  4. Problemas de Escalonamento (Feature Scaling Issues)

    • Colunas numéricas com valores fora da escala esperada (e.g., "1000" vs. 0.001) podem prejudicar a convergência do gradiente descendente.
  5. Vazamento de Dados (Data Leakage)

    • Se dados de treino e teste não forem devidamente separados, o modelo pode ter desempenho artificialmente alto (mas falhar na prática).
  6. Problemas em Produção

    • Se o modelo for implantado sem tratamento de dados inválidos, ele pode quebrar quando receber entradas inesperadas (e.g., strings em campos numéricos).

 

2. Principais Métodos de Validação de Dados

MétodoDescriçãoQuando Usar
Validação ManualInspeção visual dos dados para detectar anomalias.Pequenos datasets.
Validação por Esquema (Schema Validation)Define regras
(e.g., coluna_X deve ser float entre 0 e 1).
Dados tabulares (Excel, CSV).
Validação Cruzada (Cross-Validation)Divide os dados em subconjuntos (folds) para evitar overfitting (e.g., StratifiedKFold).Modelos de classificação.
Detecção de OutliersUsa métodos estatísticos
(Z-Score, IQR) ou ML (Isolation Forest).
Dados numéricos.
Tratamento de Valores FaltantesRemove ou cria (mean, median, KNNImputer) valores ausentes.Quando há "NaNs" (entradas vazias).
One-Hot Encoding / Label EncodingConverte categorias em números (evita strings em redes neurais).Dados categóricos.

 

3. Referências Bibliográficas

Eventualmente você queria se informar sobre "Data Food" e "Data Folding"

Resumo

A validação de dados é essencial para garantir que:

Ignorar essa etapa pode levar a modelos que falham silenciosamente, causando prejuízos em aplicações reais. A combinação de validação estatística + checagem programática (como no script Python exemplificado maix abaixo) é a melhor prática para evitar esses problemas.


Script Exemplo de Validação de Dados

Suponha que se queria validar Dados para Redes Neurais com Tratamento de Erros

A idéia é criar uma solução robusta que:

  1. Verifica tipos de dados em cada coluna
  2. Identifica valores não-binários em colunas que deveriam ser binárias
  3. Localiza exatamente quais células têm problemas
  4. Substitui valores inválidos por nulos ou trata adequadamente
  5. Implementa validação cruzada segura

Segue código exemplo:

Técnicas de Validação Cruzada Adequadas

A validação cruzada é essencial para avaliar modelos de machine learning, especialmente com dados binários onde o desbalanceamento de classes pode ser um problema.

Para dados binários, recomenda-se:

1. Stratified K-Fold

Definição: Divide o conjunto de dados em K-folds mantendo a proporção das classes em cada fold (subconjunto) igual à do conjunto original.

Exemplo: extraído do item 3.6.4 Validating your approach using K-fold validation, In: FRANCOIS, Chollet. Deep learning with Python. 2018.

Para avaliar sua rede enquanto você continua ajustando seus parâmetros (como o número de épocas usadas para treinamento), você pode dividir os dados em um conjunto de treinamento e um conjunto de validação, como foi feito em exemplos anteriores. Mas como você tem tão poucos pontos de dados, o conjunto de validação acabaria sendo muito pequeno (por exemplo, cerca de 100 exemplos). Como consequência, as pontuações (scores) de validação podem mudar muito dependendo de quais pontos de dados você escolheu usar para validação e quais você escolheu para treinamento: as pontuações de validação podem ter uma alta variância com relação à divisão de validação. Isso impediria que você avaliasse seu modelo de forma confiável. A melhor prática em tais situações é usar a validação cruzada K-fold (veja a figura 3.11, em seguinda).

Fig_3_11_Chollet.png

Este método consiste em dividir os dados disponíveis em partições (tipicamente ou 5), instanciar modelos idênticos e treinar cada um em partições enquanto avalia a partição restante. A pontuação (score) de validação para o modelo usado é então a média das pontuações de validação obtidas. Em termos de código seria algo como:

A execução deste código com num_epochs=100 levou ao seguinte resultado:

As diferentes execuções realmente alcançar pontuações (scores) de validação bem diferentes, de 2,6 a 3,2. A média (3,0) é uma métrica muito mais confiável do que qualquer pontuação única — esse é o ponto principal da validação cruzada K-Fold. No caso do exemplo mostrado (de Regressão para tentar prever preços de casas), você está errado em USééç 10.000 a US$ 50.000.

Quando usar: Ideal quando você tem dados binários desbalanceados e quer uma avaliação robusta do modelo.

Referência:

Mantém a proporção de classes em cada subconjunto (fold):

Código exemplo mais completo:

2. Stratified Shuffle Split

Definição: Realiza divisões aleatórias mantendo a proporção das classes, mas sem garantia de que todas as amostras serão usadas para validação.

Quando usar: Quando você tem muitos dados e quer avaliações rápidas com diferentes divisões aleatórias.

Referência:

Para quando você quer controle do tamanho do teste

Exemplo de código mais completo:

3. Leave One Out (LOO)

Definição: Cada amostra é usada uma vez como conjunto de teste, enquanto o restante forma o treino.

Quando usar: Com conjuntos de dados muito pequenos onde cada amostra é valiosa.

Referência:

Para conjuntos muito pequenos (cada amostra é um subconjunto (fold)):

Exemplo com código mais completo:

Comparações & Recomendações

MétodoQuando UsarVantagensDesvantagens
Stratified K-FoldDados binários desbalanceadosMantém proporção de classesComputacionalmente intensivo
Stratified ShuffleGrandes conjuntos de dadosDivisões aleatórias independentesPode haver sobreposição de dados
Leave One OutConjuntos muito pequenosMáxima utilização dos dadosExtremamente custoso

Recomendações adicionais

Todos esses métodos são particularmente úteis para dados binários desbalanceados, pois garantem que a distribuição de classes seja preservada em cada divisão.

 

Tratamento de Valores Inválidos

O script exemplo anterior implementou:

  1. Verificação de tipos: Converte colunas numéricas e identifica strings
  2. Validação binária: Checa se colunas marcadas como binárias contêm apenas 0/1
  3. Localização precisa: Mostra exatamente quais linhas e colunas têm problemas
  4. Substituição segura: Troca valores inválidos por "NaN"
  5. Relatório detalhado: Exibe um sumário dos problemas encontrados

Exemplo de Saída de Relatório

Esta abordagem garante que seu modelo só será treinado com dados válidos, enquanto fornece feedback claro sobre quais problemas precisam ser corrigidos na fonte de dados.


Fernando Passold, em 29/03/2025; 30/03/2025