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 спремни за тренирање модела