Przejdź do głównej treści

Overfitting vs. Underfitting: praktyczny przewodnik po diagnostyce modeli

Szczegółowy przegląd overfittingu i underfittingu w uczeniu maszynowym — jak rozpoznać każdy tryb błędu, dlaczego się pojawia i jak go naprawić poprzez kompromis bias-variance.
Zaktualizowano 12 cze 2026  · 12 min Czytać

Wiesz, dlaczego twój model ma 99% trafności na danych treningowych, ale w produkcji nie potrafi poprawnie przewidzieć niemal nic?

Jest różnica między modelem, który zapamiętał, a modelem, który się nauczył. Uogólnianie to istota uczenia maszynowego — chcesz przewidywań, które trzymają się na danych, których model nigdy nie widział, a nie tylko na tych użytych do treningu. Gdy tak nie jest, niemal zawsze winny jest jeden z dwóch problemów.

Te dwa problemy to overfitting i underfitting. Zanim je naprawisz, musisz wiedzieć, z którym masz do czynienia.

W tym artykule pokażę ci, jak rozpoznać overfitting i underfitting, dlaczego się pojawiają oraz jakie praktyczne kroki pomogą ci znaleźć równowagę.

Czym jest underfitting?

Underfitting występuje, gdy twój model jest zbyt prosty, by oddać to, co faktycznie dzieje się w danych.

Wyobraź sobie przewidywanie cen domów jedną regułą: „każdy dom kosztuje 300 000 $”. Ta reguła będzie błędna prawie wszędzie. Nie widzi okolic, metrażu, liczby sypialni, garażu ani roku budowy. Model ma zdecydowanie za mało elastyczności, by podążać za wzorcem.

Underfitting rozpoznasz zawsze tak samo. Trafność na treningu jest niska i na teście też niska. Obie wartości są słabe — kluczowe jest to, że są słabe jednocześnie.

Klasyczny przypadek to dopasowanie prostej do krzywych danych. Linia tnie przez środek i nie trafia w kształt. Żadna dodatkowa porcja danych treningowych nie pomoże, bo sam model nie potrafi odwzorować relacji.

Przykład underfittingu

Przykład underfittingu

Czym jest overfitting?

Overfitting to odwrotny problem. Model jest zbyt złożony.

Zamiast uczyć się ogólnego wzorca, zapamiętuje zbiór treningowy. Każdy punkt szumu, każdy nietypowy odstający przypadek, każdy pik i dolina, każdy przypadek w danych traktowany jest jak prawidłowość. Model staje się niemal idealny dla danych, na których był trenowany.

Dobra wiadomość o overfittingu jest taka, że łatwo go zauważyć. Trafność na treningu wygląda świetnie, ale na teście jest fatalna.

Pomyśl o uczniu, który uczy się na pamięć odpowiedzi na egzamin, ale nie rozumie materiału. Zalicza próbny test, a na właściwym prawdopodobnie oblewa.

Przykład overfittingu

Przykład overfittingu

Overfitting vs underfitting: kluczowe różnice

Skoro widzisz już oba zjawiska, różnicę łatwiej zauważyć. Modele z underfittingiem nie radzą sobie nawet na danych, które widziały. Modele z overfittingiem nie radzą sobie na danych, których nie widziały.

Te dwa przypadki inaczej wyglądają podczas treningu:

  • Underfitting objawia się płaską, przeciętną wydajnością wszędzie — model nigdy wiele się nie uczy
  • Overfitting objawia się luką: wyniki treningowe rosną, podczas gdy testowe stają w miejscu lub z czasem się pogarszają

Przyczyny też są lustrzane. Underfitting wynika z robienia za mało: prostych modeli i brakujących cech. Overfitting — z robienia za dużo: złożonych modeli i zbyt wielu cech.

Oto podsumowanie obu:

Porównanie underfittingu i overfittingu

Porównanie underfittingu i overfittingu

Jak rozpoznać overfitting i underfitting

Wiedzieć teoretycznie, jak wyglądają underfitting i overfitting, to jedno, a wyłapać je we własnych modelach — to drugie.

Najprościej porównać błąd treningowy z błędem testowym i obejrzeć krzywe uczenia.

Błąd treningowy vs testowy

Najszybsza kontrola to podzielić dane na zbiór treningowy i testowy, wytrenować model i sprawdzić błąd na każdym z nich.

Przy underfittingu oba błędy będą wysokie. Model słabo nauczył się danych treningowych i nie będzie lepszy na danych, których nie widział. Taki sam słaby wynik po obu stronach.

Przy overfittingu błąd treningowy będzie bardzo niski, a testowy pozostanie wysoki. Model zapamiętał dane treningowe, ale ta „wiedza” się nie przenosi.

Wizualizacja błędu treningowego i testowego

Wizualizacja błędu treningowego i testowego

Chcesz przeanalizować lukę między tymi dwiema wartościami. Mała luka przy wysokich błędach wskazuje na underfitting. Duża luka przy niskim błędzie treningowym i wysokim testowym wskazuje na overfitting. Mała luka i niskie błędy po obu stronach to cel — oznacza, że model nauczył się rzeczywistej reprezentacji danych.

Krzywe uczenia

Krzywe uczenia przedstawiają błąd treningowy i walidacyjny w funkcji rozmiaru zbioru treningowego lub liczby iteracji. Pokazują, co się dzieje, gdy model się uczy.

W modelu z underfittingiem obie krzywe szybko się spłaszczają na wysokim błędzie. Dodanie danych nie pomaga, bo model i tak nie potrafi odwzorować wzorca. Obie krzywe pozostają wysoko.

Krzywe modelu z underfittingiem

Krzywe modelu z underfittingiem

W modelu z overfittingiem krzywa treningowa spada niemal do zera, podczas gdy walidacyjna pozostaje wysoko. Luka między nimi rośnie wraz z treningiem. Ta rosnąca luka to obraz overfittingu na wykresie.

Krzywe modelu z overfittingiem

Krzywe modelu z overfittingiem

Zdrowy model pokazuje obie krzywe opadające i spotykające się przy niskim błędzie, z niewielką luką między nimi.

Dlaczego dochodzi do overfittingu i underfittingu

Gdy już wiesz, jak je rozpoznać, kolejne pytanie brzmi: dlaczego się pojawiają. Oba wynikają z niedopasowania modelu do problemu, ale w przeciwnych kierunkach.

Przyczyny underfittingu

Underfitting niemal zawsze da się sprowadzić do jednej z trzech rzeczy.

  • Model jest zbyt prosty: model liniowy nie odda krzywoliniowej relacji. Model nie ma pojemności, której potrzebuje problem.
  • Cechy są niewystarczające: nawet zdolny model będzie underfitował, jeśli podasz mu złe wejścia. Przewidywanie cen domów z kodu pocztowego nie ma sensu — pomija metraż, liczbę sypialni, stan, wiek i wielkość działki. Model nie ma nic użytecznego do wykorzystania.
  • Zbyt krótki trening: model nie miał wystarczającej głębokości, liczby iteracji, epok ani dostosowań współczynnika uczenia, by dojść do dobrego rozwiązania. Trening po prostu przerwano zbyt wcześnie.

Przyczyny overfittingu

Overfitting wynika z dania modelowi większej swobody, niż potrzebują dane.

  • Model jest zbyt złożony: głęboka sieć neuronowa z milionami parametrów uczona na malutkim zbiorze ma mnóstwo miejsca na zapamiętywanie. Pojemność przekracza potrzeby problemu.
  • Zbyt wiele cech: gdy masz więcej cech niż sensownych wzorców w danych, model uczy się korelacji obecnych akurat w twojej próbce treningowej, które się nie uogólniają.
  • Zbiór danych jest zbyt mały: przy ograniczonych danych treningowych nawet umiarkowana złożoność modelu pozwala zapamiętać cały zbiór. Brakuje przykładów, z których model mógłby uogólniać.
  • Zbyt długi trening: model dalej dostosowuje wagi po nauczeniu się faktycznego wzorca i zaczyna dopasowywać szum. Od tego momentu dodatkowy trening pogarsza wyniki.

Kompromis bias-variance

Kompromis między biasem a wariancją wyjaśnia, dlaczego wydajność modelu polega na znalezieniu punktu, w którym dobrze uogólnia na niewidziane dane, nie upraszczając nadmiernie problemu ani nie dopasowując się zbyt mocno do zbioru treningowego.

Wysoki bias

Bias to błąd wynikający z założeń modelu o danych. Model o wysokim biasie ma silne, uproszczone założenia. Nie potrafi oddać faktycznej złożoności zjawisk w danych.

To dokładnie underfitting. Model jest zbyt sztywny, by dopasować wzorce, więc generuje chybione przewidywania, niezależnie od ilości danych.

Jeśli wytrenujesz model o wysokim biasie 100 razy na różnych próbkach, wszystkie 100 wersji popełni podobne błędy. Ich przewidywania skupią się wokół błędnej odpowiedzi.

Wysoka wariancja

Wariancja to błąd wynikający z nadmiernej wrażliwości modelu na konkretne dane treningowe. Model o wysokiej wariancji wychwytuje każdy drobny wzór, zwykle szum.

To właśnie overfitting. Model bardzo ściśle dopasowuje się do zbioru treningowego, ale drobne zmiany w danych treningowych prowadzą do zupełnie innych przewidywań.

Jeśli wytrenujesz model o wysokiej wariancji 100 razy na różnych próbkach, otrzymasz 100 bardzo różnych modeli. Ich przewidywania będą rozrzucone, nawet dla tego samego wejścia.

Kompromis

Nie da się całkowicie wyeliminować ani biasu, ani wariancji — można jedynie przesuwać się między nimi.

Zmniejszysz bias, zwiększając złożoność modelu — rośnie wariancja. Zmniejszysz wariancję, upraszczając model — rośnie bias. Celem jest znalezienie środka, gdzie łączny błąd jest najniższy.

Przykład kompromisu bias-wariancja

Przykład kompromisu bias-wariancja

Jak naprawić underfitting

Gdy zdiagnozujesz underfitting, masz kilka sposobów, by go naprawić. Wszystkie zwiększają pojemność modelu do reprezentowania wzorców w twoich danych.

  • Zwiększ złożoność modelu: przejdź do bardziej elastycznego modelu. Od regresji liniowej do wielomianowej albo od płytkiego drzewa do głębszego.
  • Dodaj więcej cech: dodaj nowe wejścia, które faktycznie wnoszą wartość. Twórz interakcje, cechy wielomianowe lub cechy specyficzne dla domeny, do których model wcześniej nie miał dostępu.
  • Trenuj dłużej: model mógł nie mieć dość czasu, by się zbiec. Daj mu więcej epok lub inną strategię współczynnika uczenia.
  • Zmniejsz regularizację: regularizacja upraszcza model, czyli robi odwrotnie, niż wymaga underfitting. Obniż siłę regularizacji lub całkiem ją usuń, by dać modelowi więcej swobody.

Kilka dobrych cech często daje większy efekt niż zmiana architektury. Zacznij od tego, zanim zmienisz sam model.

Jak naprawić overfitting

Naprawianie overfittingu wymaga podejścia odwrotnego. Chcesz ograniczyć model, by przestał zapamiętywać dane treningowe.

  • Zbierz więcej danych: większy zbiór danych znacznie utrudnia modelowi zapamiętywanie. Więcej przykładów zmusza go do znajdowania wzorców obowiązujących w całym zbiorze, nie tylko w garstce wierszy.
  • Zastosuj regularizację: regularizacja L1 i L2 dodaje karę za duże wagi, co powstrzymuje model przed nadmiernym opieraniem się na pojedynczej cesze. To jeden z najbardziej niezawodnych sposobów.
  • Zredukuj złożoność modelu: jeśli model jest za duży względem danych, zmniejsz go. Użyj mniejszej liczby parametrów, płytszych drzew lub mniejszych sieci.
  • Używaj walidacji krzyżowej: walidacja krzyżowa daje uczciwszy obraz tego, jak model poradzi sobie na niewidzianych danych. Pozwala uzyskać więcej podziałów train-test z jednego zbioru.
  • Zastosuj dropout w sieciach neuronowych: dropout losowo wyłącza część neuronów podczas treningu. Zmusza to sieć do uczenia się redundantnych reprezentacji i zmniejsza zależność od pojedynczych neuronów.
  • Zatrzymuj trening wcześniej: obserwuj błąd walidacyjny i zatrzymaj trening, gdy zaczyna rosnąć, nawet jeśli błąd treningowy dalej spada. To tzw. wczesne zatrzymywanie (early stopping) i jeden z najprostszych do wdrożenia kroków.

Regularizacja i wczesne zatrzymywanie to zwykle pierwsze rzeczy do wypróbowania. Nic nie kosztują i prawie zawsze pomagają.

Overfitting i underfitting w różnych modelach

Różne rodziny modeli przejawiają underfitting i overfitting na swoje sposoby. Oto jak trzy popularne potrafią zawodzić w obu kierunkach.

Modele liniowe

  • Underfitting: modele liniowe zakładają relację prostoliniową. Gdy rzeczywisty wzorzec się wygina, model nie podąży za nim, bez względu na ilość danych.
  • Overfitting: przy dodaniu dostatecznie wielu składników wielomianowych czy interakcji, nawet regresja liniowa może zapamiętywać szum. Metody regularizacji, jak Ridge i Lasso, istnieją głównie po to, by to ograniczać.

Drzewa decyzyjne

  • Underfitting: płytkie drzewo może wykonać tylko kilka podziałów. Przy dwóch lub trzech decyzjach nie odda wzorców wymagających większej finezji.
  • Overfitting: głębokie drzewa mają tendencję do overfittingu. Drzewo, które dzieli aż do liścia z jednym przykładem treningowym, osiągnie perfekcyjną trafność na treningu i słabą na teście. Dlatego istnieją parametry takie jak max_depth, min_samples_split oraz przycinanie.

Sieci neuronowe

  • Underfitting: sieci zbyt małe względem problemu będą underfitować. Podobnie, gdy trening kończy się zbyt wcześnie albo optymalizator utknie w podoptymalnym rozwiązaniu.
  • Overfitting: częstszy w deep learningu. Sieć z milionami parametrów może zapamiętać nawet duże zbiory danych przy wystarczającej liczbie epok. Dropout, weight decay, augmentacja danych i early stopping istnieją, by temu zapobiegać.

Dodatkowe przykłady overfittingu vs underfittingu

Pokażę teraz dwa klasyczne przykłady z kodem, które ułatwią dostrzeżenie tych wzorców.

Regresja wielomianowa

Szumiąca fala sinusoidalna to dobry przypadek testowy. Dopasowując wielomiany o różnych stopniach, widać, jak zmienia się zachowanie modelu.

import numpy as np

# Data
np.random.seed(7)
X = np.linspace(0, 1, 30)
y_true = np.sin(2 * np.pi * X)
y = y_true + np.random.normal(0, 0.2, X.shape)

# Fit polynomials of three degrees
X_smooth = np.linspace(0, 1, 300)
degrees = [1, 3, 15]

for degree in degrees:
    coefs = np.polyfit(X, y, deg=degree)
    y_pred = np.polyval(coefs, X_smooth)

Przykład regresji wielomianowej

Przykład regresji wielomianowej

Stopień 1 to prosta linia, która underfituje. W ogóle nie podąża za krzywą. Stopień 3 oddaje rzeczywisty kształt. Wchłania część szumu, ale pozostaje blisko prawdy. Stopień 15 overfituje, wijąc się przez każdy punkt treningowy i generując duże oscylacje między nimi.

Drzewa decyzyjne o różnej głębokości

Ta sama historia pojawia się przy drzewach decyzyjnych. Możesz trenować drzewa o rosnącej głębokości na tych samych danych i mierzyć błąd na zbiorach treningowym i testowym.

import numpy as np
from sklearn.tree import DecisionTreeRegressor
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error

# Data
np.random.seed(11)
X = np.linspace(0, 10, 250).reshape(-1, 1)
y = np.sin(X).ravel() + np.random.normal(0, 0.3, 250)

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=0
)

depths = range(1, 21)
train_errors = []
test_errors = []

for depth in depths:
    tree = DecisionTreeRegressor(max_depth=depth, random_state=0)
    tree.fit(X_train, y_train)
    train_errors.append(mean_squared_error(y_train, tree.predict(X_train)))
    test_errors.append(mean_squared_error(y_test, tree.predict(X_test)))

Przykład drzewa decyzyjnego

Przykład drzewa decyzyjnego

Błąd treningowy maleje wraz ze wzrostem głębokości drzewa, ostatecznie zbliżając się do zera, gdy każdy liść zawiera pojedynczy punkt treningowy. Błąd testowy początkowo spada, gdy drzewo uchwyca rzeczywiste relacje w danych, a potem rośnie, gdy głębsze podziały zaczynają dopasowywać szum. Minimum wypada przy głębokości, która równoważy oba efekty.

Częste błędy przy diagnozowaniu wydajności modelu

Nawet jeśli wybierzesz właściwą metrykę, łatwo wyciągnąć złe wnioski. Oto czego nie robić przy ocenie wydajności modelu:

  • Ocenianie wyłącznie trafności treningowej: trafność na treningu mówi, jak dobrze model dopasował dane, które już widział. Nie mówi nic o tym, jak poradzi sobie na nowych wejściach. Zawsze mierz na osobnym zbiorze, zanim wyciągniesz wnioski.
  • Ignorowanie danych walidacyjnych: dane walidacyjne służą do dostrajania wyborów modelu, takich jak architektura, hiperparametry czy moment zatrzymania. Model przeuczy zarówno zbiór treningowy, jak i testowy, którego używano zbyt wiele razy.
  • Zakładanie, że większa złożoność zawsze jest lepsza: większy model nie znaczy automatycznie bardziej zdolny. Jeśli masz mało danych albo relacje w danych są proste, złożoność tylko pogorszy wyniki. Zacznij prosto i zwiększaj pojemność dopiero, gdy diagnostyka tego wymaga.
  • Mylenie szumu z sygnałem: nie każdy wzorzec w danych treningowych jest wart nauki. Losowe fluktuacje, błędy doboru próby, wartości odstające i artefakty zbierania danych mogą wyglądać sensownie dla elastycznego modelu. Jeśli nie potrafisz wyjaśnić, dlaczego dana zależność miałaby istnieć, podchodź do niej ostrożnie.

Zawsze sprawdzaj wszystkie cztery punkty, zanim zaakceptujesz model. Większość awarii produkcyjnych wiąże się z jednym (lub kilkoma) z nich.

Wnioski

Underfitting i overfitting to dwa sposoby, w jakie model nie potrafi uogólniać. Jeden pozostaje zbyt prosty, by nauczyć się wzorca. Drugi próbuje nauczyć się każdego punktu w twoim zbiorze.

Rzeczywistym celem treningu jest znalezienie się między nimi, gdzie bias i wariancja są zrównoważone, a łączny błąd jest najniższy.

Wydajność walidacyjna to metryka, która mówi ci, gdzie jesteś. Śledź ją podczas treningu i pozwól, by różnica między błędem treningowym a walidacyjnym kierowała twoimi decyzjami. Jeśli błąd walidacyjny przestaje się poprawiać, a błąd treningowy nadal spada, minąłeś słodki punkt. Jeśli oba pozostają wysokie, jeszcze do niego nie dotarłeś.

Chcesz poznać bardziej zaawansowane koncepcje data science i być gotowy do pracy w 2026 roku? Zapisz się na nasz Machine Learning Engineer track, aby przejść od podstaw do MLOps.

FAQs

Jaka jest różnica między overfittingiem a underfittingiem?

Underfitting występuje, gdy model jest zbyt prosty, by oddać wzorce w twoich danych, więc słabo wypada zarówno na zbiorze treningowym, jak i testowym. Overfitting to odwrotność: model uczy się danych treningowych zbyt dobrze, łącznie z szumem, przez co świetnie działa na treningu, ale zawodzi na nowych danych. Oba prowadzą do słabych przewidywań, ale z różnych powodów.

Skąd wiem, czy mój model ma overfitting czy underfitting?

Porównaj błąd treningowy z testowym. Jeśli oba są wysokie, masz underfitting. Jeśli błąd treningowy jest bardzo niski, a testowy wysoki, masz overfitting. Pomagają też krzywe uczenia — w modelu z overfittingiem błędy treningu i walidacji się rozjeżdżają, a w underfittującym pozostają płaskie na wysokim poziomie.

Czym jest kompromis bias-variance?

Bias to błąd wynikający z nadmiernej prostoty modelu, a wariancja to błąd wynikający z nadmiernej wrażliwości modelu na dane treningowe. Zmniejszenie jednego zwykle zwiększa drugie, więc celem jest znalezienie równowagi, przy której łączny błąd jest najniższy. Modele z najlepszą równowagą najlepiej uogólniają na nowe dane.

Czy zebranie większej ilości danych rozwiązuje overfitting?

Zwykle pomaga, ale nie jest gwarantowanym rozwiązaniem. Więcej danych utrudnia modelowi zapamiętywanie, więc musi znaleźć wzorce obowiązujące w całym zbiorze. Jeśli jednak twój model jest zdecydowanie zbyt złożony względem problemu lub twoje cechy niosą głównie szum, więcej danych nie rozwiąże sprawy w pełni. W takich przypadkach często lepiej działają regularizacja i prostsze modele.

Czy mogę użyć wczesnego zatrzymywania, by zapobiec overfittingowi w sieciach neuronowych?

Tak, i to jedno z najłatwiejszych do wdrożenia rozwiązań. Obserwuj błąd walidacyjny podczas treningu i zatrzymaj, gdy się wypłaszcza lub zaczyna rosnąć, nawet jeśli błąd treningowy nadal maleje. To punkt, w którym model nauczył się faktycznego wzorca i zaczyna dopasowywać szum. Większość frameworków deep learning ma wbudowane callbacki do early stoppingu.

Tematy

Ucz się z DataCamp

course

Inżynieria cech w uczeniu maszynowym w Pythonie

4 godz.
38.8K
Twórz nowe funkcje, by poprawić wydajność swoich modeli Machine Learning.
Zobacz szczegółyRight Arrow
Rozpocznij kurs
Zobacz więcejRight Arrow