Middle+
Ce este back leakage?
sobes.tech AI
Răspuns de la AI
Back leakage (scurgerea inversă) este o situație în învățarea automată în care informațiile din setul de date de testare sau validare ajung involuntar în procesul de antrenament. Acest lucru duce la supraajustarea modelului pe aceste date, ceea ce face ca evaluările performanței (metricele de calitate) pe setul de testare să pară supraestimate și să nu reflecte capacitatea reală a modelului de a generaliza pe date noi, unseen.
Cauzele back leakage:
- Realizarea preprocesării datelor (scalare, normalizare, codificare a caracteristicilor categorice) pe întregul set de date înainte de împărțirea în seturi de antrenament, test și validare.
- Utilizarea statisticilor din setul de testare sau validare (de exemplu, media, deviația standard) în timpul procesului de prelucrare a setului de antrenament.
- Selectarea caracteristicilor pe baza întregului set de date, inclusiv testul.
- Ajustarea manuală a modelului sau a hiperparametrilor pe baza performanței observate pe setul de testare.
Consecințele back leakage:
- Evaluări de performanță ale modelului nesigure.
- Modelul funcționează prost pe date noi în producție.
- Risipă de resurse pe un model ineficient.
Prevenirea back leakage:
- Întotdeauna împărțiți datele în seturi de antrenament, validare și test înainte de orice preprocesare sau analiză.
- Aplicați preprocesarea datelor (de exemplu,
StandardScaler,OneHotEncoder) doar pe setul de antrenament, apoi folosiți transformatoarele antrenate pentru a transforma seturile de validare și testare. - Efectuați selectarea caracteristicilor doar pe setul de antrenament.
- Utilizați validarea încrucișată pe setul de antrenament pentru ajustarea hiperparametrilor și evaluarea modelului înainte de testarea finală pe setul de test rezervat.
Exemplu de scalare incorectă (duce la back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Presupunem că avem un DataFrame df
# Abordare greșită: scalarea întregului DataFrame
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
# Apoi împărțim datele
X_train, X_test, y_train, y_test = train_test_split(df_scaled, ...)
Exemplu de scalare corectă (evită back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Presupunem că avem un DataFrame df
# Abordare corectă: împărțirea datelor mai întâi
X_train, X_test, y_train, y_test = train_test_split(df, ...)
# Apoi, antrenează scaler-ul doar pe datele de antrenament
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
# Și aplică scaler-ul antrenat pe datele de test
X_test_scaled = scaler.transform(X_test)
# Acum, X_train_scaled și X_test_scaled sunt gata pentru antrenarea modelului