Sobes.tech
Middle+

O que é back leakage?

sobes.tech IA

Resposta da IA

A fuga de dados (back leakage) é uma situação em aprendizagem automática em que a informação do conjunto de dados de teste ou validação inadvertidamente entra no processo de treino. Isto leva a um sobreajuste do modelo a esses dados, fazendo com que as avaliações de desempenho (métricas de qualidade) no conjunto de teste pareçam inflacionadas e não reflitam a verdadeira capacidade do modelo de generalizar para novos dados não vistos.

Causas do back leakage:

  • Realizar pré-processamento de dados (escalonamento, normalização, codificação de características categóricas) em todo o conjunto de dados antes de dividi-lo em treino, teste e validação.
  • Utilizar estatísticas do conjunto de teste ou validação (por exemplo, média, desvio padrão) durante o processamento do conjunto de treino.
  • Seleção de características baseada em todo o conjunto de dados, incluindo o teste.
  • Ajuste manual do modelo ou hiperparâmetros baseado no desempenho observado no conjunto de teste.

Consequências do back leakage:

  • Avaliações de desempenho do modelo pouco confiáveis.
  • O modelo funciona mal em novos dados em produção.
  • Desperdício de recursos em um modelo ineficiente.

Prevenção do back leakage:

  • Sempre dividir os dados em conjuntos de treino, validação e teste antes de qualquer pré-processamento ou análise.
  • Aplicar o pré-processamento de dados (por exemplo, StandardScaler, OneHotEncoder) apenas ao conjunto de treino, e depois usar os transformadores treinados para transformar os conjuntos de validação e teste.
  • Realizar a seleção de características apenas no conjunto de treino.
  • Utilizar validação cruzada no conjunto de treino para ajustar hiperparâmetros e avaliar o modelo antes do teste final no conjunto de teste reservado.

Exemplo de escalonamento incorreto (leva ao back leakage):

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# Supondo que temos um DataFrame df

# Abordagem incorreta: escalar todo o DataFrame
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)

# Depois dividir os dados
X_train, X_test, y_train, y_test = train_test_split(df_scaled, ...)

Exemplo de escalonamento correto (evita back leakage):

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler

# Supondo que temos um DataFrame df

# Abordagem correta: dividir primeiro os dados
X_train, X_test, y_train, y_test = train_test_split(df, ...)

# Depois treinar o escalador apenas nos dados de treino
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)

# E aplicar o escalador treinado aos dados de teste
X_test_scaled = scaler.transform(X_test)

# Agora, X_train_scaled e X_test_scaled estão prontos para treinar o modelo