Sobes.tech
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