ML Atlas

10 · Praktyka · 5 min czytania · aktualizacja

Jak sprawdzić, czy model jest przeuczony? Lista kontrolna krok po kroku

W skrócie

Lista kontrolna przeuczenia: luka trening–walidacja, przeciek w przetwarzaniu, duplikaty i grupy, zbyt wiele prób na walidacji i test na losowych etykietach.

Co to jest

Model jest przeuczony, gdy wynik na danych treningowych jest wyraźnie lepszy niż na danych, których naprawdę nie widział — a sprawdza się to w dwóch krokach: najpierw porównujesz wynik treningowy z walidacyjnym, potem upewniasz się, że walidacja jest uczciwa, czyli że żadna informacja z danych walidacyjnych nie przeciekła do treningu ani do wyboru modelu. Drugi krok jest ważniejszy, bo przeciek sprawia, że przeuczony model wygląda na zdrowy.

Klasyczne przeuczenie widać gołym okiem: 99% na treningu, 75% na walidacji. Groźniejsze są przypadki ukryte: walidacja daje 90%, a po wdrożeniu model osiąga 70%. Wtedy przeuczony jest nie tyle model, ile cały proces — wybór cech, strojenie i porównywanie wariantów „dopasowały się” do zbioru walidacyjnego.

Ta lista przechodzi po najczęstszych źródłach obu rodzajów przeuczenia, od najprostszych do najbardziej podstępnych.

Mechanizm — dlaczego tak działa

Pojemność kontra dane. Model z wieloma swobodnymi parametrami może dopasować nie tylko sygnał, ale i szum konkretnej próbki. Na treningu to wygląda jak sukces, na nowych danych szum jest inny, więc dopasowanie do niego szkodzi. Luka trening–walidacja rośnie ze złożonością modelu i maleje z liczbą danych.

Przeciek w przetwarzaniu. Każdy krok, który „patrzy” na etykiety lub na rozkład danych — selekcja cech, kodowanie średnią celu, imputacja, skalowanie, SMOTE — jest częścią uczenia. Wykonany na całym zbiorze przed podziałem, przenosi informację z walidacji do treningu. Najostrzejszy przypadek to selekcja cech na wszystkich danych: wśród tysięcy cech losowych zawsze znajdą się takie, które przypadkiem korelują z etykietą (Ambroise i McLachlan, 2002).

Zależne obserwacje. Gdy w danych są duplikaty, wiele zdjęć tego samego obiektu, wiele wizyt tego samego pacjenta albo kolejne punkty szeregu czasowego, losowy podział umieszcza „bliźniaków” po obu stronach. Model może je rozpoznać zamiast uogólniać.

Przeuczenie wyboru modelu. Każda decyzja podjęta na podstawie wyniku walidacji — hiperparametry, cechy, architektura — to dopasowanie do tego konkretnego zbioru. Przy setkach prób maksimum wyników zawiera sporo szczęścia: to klątwa zwycięzcy (Cawley i Talbot, 2010). Wynik najlepszej konfiguracji na walidacji jest obciążony w górę; nieobciążony daje dopiero zbiór, na którym nic nie wybierano.

Na przykładzie

Luka trening–walidacja. Titanic, drzewo decyzyjne, 668 pasażerów treningowych i 223 walidacyjnych (random_state=0). Głębokość 1: 0,792 na treningu, 0,771 na walidacji. Głębokość 4: 0,847 i 0,794. Bez limitu (151 liści): 0,985 i 0,794. Walidacja przestaje rosnąć, a luka rośnie z 2 do 19 punktów.

Przeciek przez selekcję cech. 569 etykiet z Breast Cancer i 5000 kolumn czystego szumu — żadna cecha nie niesie informacji. Wybieram 20 cech najlepiej skorelowanych z etykietą na całym zbiorze, potem 5-krotna walidacja regresji logistycznej. Wyniki tego i dwóch kolejnych testów:

TestWynik nieuczciwyWynik uczciwyCo powinno wyjść
Selekcja 20 z 5000 cech szumu0,757 (selekcja przed walidacją)0,591 (selekcja w potoku)0,627 (zawsze klasa liczniejsza)
Najlepsze z 200 drzew wybrane na 100 przykładach walidacyjnych0,950 (wynik na walidacji)0,906 (ten sam model na teście)średnia wszystkich 200 na teście: 0,884
Digits: 300 cyfr × 3 zaszumione kopie, 1-NN1,000 (losowy KFold)0,979 (GroupKFold po cyfrze)—

Z szumu „wyczarowaliśmy” 75,7% trafności — o 13 punktów więcej niż model trywialny. Selekcja wewnątrz potoku daje uczciwe 59,1% — nie więcej niż zgadywanie. Przy wyborze najlepszego z 200 losowych drzew walidacja obiecywała 95,0%, a test pokazał 90,6%: 4,4 punktu to cena wyboru na małym zbiorze walidacyjnym. Przy duplikatach efekt jest tu mały (2,1 punktu), bo cyfry są łatwe, ale kierunek jest zawsze ten sam — losowy podział zawyża wynik.

Dane: Titanic Breast Cancer Wisconsin (diagnostyka raka piersi) Digits (ręcznie pisane cyfry 8×8)

W praktyce

Lista kontrolna:

  • Porównaj trening i walidację: cross_validate(model, X, y, cv=5, return_train_score=True); duża luka przy płaskiej walidacji to klasyczne przeuczenie — ogranicz złożoność (max_depth, min_samples_leaf, alpha, weight_decay, dropout) lub użyj wczesnego zatrzymania.
  • Całe przetwarzanie w potoku: make_pipeline(SimpleImputer(), StandardScaler(), SelectKBest(k=20), model); SMOTE tylko przez imblearn.pipeline.Pipeline, żeby działał wyłącznie na części treningowej.
  • Grupy i czas: GroupKFold(n_splits=5) z groups=id_pacjenta, TimeSeriesSplit() dla danych czasowych; usuń dokładne duplikaty przed podziałem (df.duplicated()).
  • Strojenie i ocena osobno: zagnieżdżona walidacja (cross_val_score(GridSearchCV(model, grid, cv=5), X, y, cv=5)) albo zbiór testowy otwierany jeden raz na końcu.
  • Test na losowych etykietach: permutation_test_score(model, X, y, cv=5, n_permutations=100); jeśli model na pomieszanych etykietach bije poziom zgadywania, w procesie jest przeciek.
  • Podejrzanie ważna cecha (permutation_importance) to sygnał ostrzegawczy: sprawdź, czy nie jest dostępna dopiero po zdarzeniu, które przewidujesz.

Najczęstsze pytania

Jaka luka między treningiem a walidacją jest za duża?
Nie ma progu uniwersalnego. Las losowy ma prawie 100% na treningu i to jest normalne. Ważniejsze niż sama luka jest to, czy walidacja rośnie, gdy model staje się prostszy lub danych przybywa. Jeśli tak, model jest przeuczony.
Czy wczesne zatrzymanie chroni przed przeuczeniem?
Chroni przed przeuczeniem wag, ale jeśli epokę zatrzymania wybierasz na tym samym zbiorze, na którym raportujesz wynik, ten wynik jest lekko zawyżony. Wynik końcowy podawaj na osobnym zbiorze testowym.
Walidacja jest dobra, a model po wdrożeniu słaby — co sprawdzić najpierw?
Najpierw przeciek: cechy dostępne dopiero po fakcie, przetwarzanie poza potokiem, losowy podział danych zależnych. Potem różnicę rozkładów między danymi treningowymi a produkcyjnymi (dryf). Dopiero na końcu samą złożoność modelu.

Źródła

  • Hastie T., Tibshirani R., Friedman J. „The Elements of Statistical Learning”, 2nd ed., Springer 2009, rozdz. 7.10.2 (The Wrong and Right Way to Do Cross-validation).
  • Ambroise C., McLachlan G. J. „Selection bias in gene extraction on the basis of microarray gene-expression data”, PNAS 99(10), 2002, s. 6562–6566.
  • Cawley G. C., Talbot N. L. C. „On Over-fitting in Model Selection and Subsequent Selection Bias in Performance Evaluation”, Journal of Machine Learning Research 11, 2010, s. 2079–2107.
  • Kaufman S., Rosset S., Perlich C., Stitelman O. „Leakage in data mining: Formulation, detection, and avoidance”, ACM Transactions on Knowledge Discovery from Data 6(4), 2012.
  • Kapoor S., Narayanan A. „Leakage and the reproducibility crisis in machine-learning-based science”, Patterns 4(9), 2023.

Zobacz też