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