Middle+
Čo je back leakage?
sobes.tech AI
Odpoveď od AI
Obraten únik (back leakage) je situácia v strojovom učení, keď sa informácie z testovacieho alebo validačného súboru údajov neúmyselne dostanú do procesu učenia. To vedie k pretrénovaniu modelu na týchto údajoch, čo spôsobí, že odhady výkonnosti (metriky kvality) na testovom súbore vyzerajú nadhodnotené a neodrážajú skutočnú schopnosť modelu generalizovať na nové, unseen údaje.
Príčiny back leakage:
- Vykonávanie predspracovania údajov (škálovanie, normalizácia, kódovanie kategórií) na celom súbore údajov pred jeho rozdelením na trénovací, testovací a validačný.
- Použitie štatistík z testovacieho alebo validačného súboru (napríklad priemer, štandardná odchýlka) pri spracovaní trénovacieho súboru.
- Výber znakov (feature selection) na základe celého súboru údajov, vrátane testovacieho.
- "Ručné" doladenie modelu alebo hyperparametrov na základe pozorovanej výkonnosti na testovacom súbore údajov.
Dôsledky back leakage:
- Nespolehlivé odhady výkonnosti modelu.
- Model zle funguje na nových údajoch v produkcii.
- Plytvanie zdrojmi na neefektívny model.
Prevencia back leakage:
- Vždy rozdeľte údaje na trénovací, validačný a testovací súbor pred akýmkoľvek spracovaním alebo analýzou.
- Používajte predspracovanie údajov (napríklad
StandardScaler,OneHotEncoder) iba na trénovacom súbore a potom používajte naučené transformátory na transformáciu validačného a testovacieho súboru. - Vykonávajte výber znakov iba na trénovacom súbore údajov.
- Používajte krížovú validáciu na trénovacom súbore na ladenie hyperparametrov a hodnotenie modelu pred finálnym testovaním na odloženom testovacom súbore.
Príklad nesprávneho škálovania (vedie k back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Predpokladáme, že máme dataframe df
# Nesprávny prístup: škálovanie celého dataframe
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)
# Potom rozdeľujeme údaje
X_train, X_test, y_train, y_test = train_test_split(df_scaled, ...)
Príklad správneho škálovania (vyhýba sa back leakage):
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
# Predpokladáme, že máme dataframe df
# Správny prístup: najskôr rozdelíme údaje
X_train, X_test, y_train, y_test = train_test_split(df, ...)
# Potom trénujeme škálovač iba na trénovacích údajoch
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
# A použijeme naučený škálovač na testové údaje
X_test_scaled = scaler.transform(X_test)
# Teraz sú X_train_scaled a X_test_scaled pripravené na trénovanie modelu