Sobes.tech
Middle+

Šta je back leakage?

sobes.tech АИ

Одговор од АИ

Обратна утечка (back leakage) је ситуација у машинском учењу када информације из тестног или валидаторског скупа података ненамерно улазе у процес обуке. Ово доводи до пренаглашавања модела на тим подацима, што резултује прецењеним проценама перформанси (метрике квалитета) на тестном скупу и не одражава стварну способност модела да обухвати нове, unseen податке.

Разлози за back leakage:

  • Извођење претходне обраде података (маскирање, нормализација, кодирање категоријалних карактеристика) на целокупном скупу података пре његовог раздвајања на тренирајући, тестни и валидаторски.
  • Коришћење статистика из тестног или валидаторског скупа (нпр. просек, стандардна девијација) приликом обраде тренирајућег скупа.
  • Избор карактеристика (feature selection) на основу целокупног скупа података, укључујући тестни.
  • "Ручно" подешавање модела или хиперпараметара на основу посматране перформансе на тестном скупу података.

Последице back leakage:

  • Ненадежне процене перформанси модела.
  • Модел лоше ради на новим подацима у продукцији.
  • Трошак ресурса на неефикасан модел.

Превенција back leakage:

  • Увек делите податке на тренирајући, валидаторски и тестни скуп пре било какве претходне обраде или анализа.
  • Примењујте претходну обраду података (нпр. StandardScaler, OneHotEncoder) само на тренирајућем скупу, а затим користите обучене трансформаторе за трансформацију валидаторског и тестног скупа.
  • Извршавајте избор карактеристика само на тренирајућем скупу података.
  • Користите крос-валидацију на тренирајућем скупу за подешавање хиперпараметара и процену модела пре финалног тестирања на одложеном тестном скупу.

Пример некоректног скалирања (води до back leakage):

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

# Предпостављамо да имамо dataframe df

# Неправилан приступ: скалирамо цео dataframe
scaler = StandardScaler()
df_scaled = scaler.fit_transform(df)

# Затим делимо податке
X_train, X_test, y_train, y_test = train_test_split(df_scaled, ...)

Пример исправног скалирања (избегава back leakage):

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

# Предпостављамо да имамо dataframe df

# Правилан приступ: прво делимо податке
X_train, X_test, y_train, y_test = train_test_split(df, ...)

# Затим тренирамо скалер само на тренирајућим подацима
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)

# И примењујемо обучени скалер на тест податке
X_test_scaled = scaler.transform(X_test)

# Сада су X_train_scaled и X_test_scaled спремни за тренирање модела