course
Gdy dane się wyginają, nie ma sensu używać prostej linii do szacowania nowych punktów. W przeciwnym razie otrzymamy model, który nie wychwytuje wzorca, ma wysokie reszty i słabe prognozy. Dane ze świata rzeczywistego rzadko zachowują się liniowo, niezależnie od tego, czy modelujemy wpływ dawki leku na odpowiedź, wpływ temperatury na naprężenia materiału, czy zmiany cen aktywów w czasie.
Regresja wielomianowa rozwiązuje ten problem, rozszerzając regresję liniową tak, aby dopasowywać krzywe zamiast prostych. Wystarczy dodać kilka wyrazów wyższego stopnia — x², x³ — a model będzie w stanie odwzorować rzeczywisty kształt danych.
W tym artykule omówię, czym jest regresja wielomianowa, stojącą za nią matematykę, jak zaimplementować ją w Pythonie oraz jak uniknąć pułapki, w którą najczęściej się wpada: nadmiernego dopasowania.
Jeśli koncept uczenia maszynowego jest dla Pana/Pani nowy, proszę najpierw przeczytać nasz poradnik Podstawy regresji liniowej w Pythonie.
Czym jest regresja wielomianowa?
Regresja wielomianowa to algorytm, po który sięgamy, gdy prosta nie potrafi opisać danych.
Regresja liniowa modeluje zależność między zmiennymi linią prostą. To działa, gdy relacja faktycznie jest liniowa — ale większość danych ze świata rzeczywistego taka nie jest. Proszę pomyśleć o tym, jak zmienia się droga hamowania samochodu wraz z prędkością albo jak tempo wzrostu roślin reaguje na nawóz. Te zależności są krzywoliniowe. Prosta nie dopasuje ich dobrze, niezależnie od tego, co zrobimy.
Regresja wielomianowa rozszerza regresję liniową, dodając do równania wyrazy wyższych rzędów. Zamiast dopasowywać y = b0 + b1x, dopasowujemy coś w rodzaju y = b0 + b1x + b2x² + b3x³. Stopień wielomianu — to n w „n-tego stopnia” — kontroluje, ile załamań może mieć krzywa.
Krótko i po ludzku — oto kluczowa różnica między nimi:
-
Regresja liniowa: Dopasowuje linię prostą. Jeden współczynnik na cechę, jeden stopień swobody krzywej.
-
Regresja wielomianowa: Dopasowuje krzywą. Każdy dodatkowy wyraz (
x²,x³, ...) daje modelowi większą elastyczność w podążaniu za kształtem danych.

Regresja liniowa a wielomianowa
Pod spodem regresja wielomianowa wciąż jest modelem liniowym. „Liniowy” odnosi się tu do sposobu traktowania współczynników, a nie do kształtu powstającej krzywej. Dodajemy nowe cechy (x², x³) i dopasowujemy do nich liniowe równanie.
Kiedy zatem rzeczywiście warto jej użyć?
Proszę sięgnąć po regresję wielomianową, gdy wykres reszt z modelu liniowego pokazuje wzorzec — to znak, że zależność nie jest liniowa. Świetnie sprawdza się też, gdy wiedza dziedzinowa sugeruje krzywoliniowy związek, np. w fizyce, biologii czy ekonomii.
Komplikacja polega na tym, że wielomiany wyższych stopni mogą być niestabilne. Wielomian stopnia 2 lub 3 poradzi sobie z większością rzeczywistych krzywych, ale wyżej najczęściej dopasowujemy już szum, a nie sygnał.
Dlaczego warto używać regresji wielomianowej?
Większość rzeczywistych zależności między zmiennymi nie jest liniowa.
Prosta może być „blisko”, ale „blisko” nie wystarcza, gdy prognozujemy coś wrażliwego. Gdy w danych pojawia się załamanie, model liniowy będzie je systematycznie pomijał.
Regresja wielomianowa radzi sobie lepiej, pozwalając modelowi się wygiąć. Zamiast wymuszać prostą przez dane, dopasowujemy krzywą, która może podążać za kształtem relacji.
Oto obszary w różnych branżach, gdzie robi to realną różnicę:
- Biologia i medycyna: Zależności dawka–odpowiedź rzadko są liniowe. Niska dawka może nie działać, średnia działa dobrze, a wysoka wywołuje skutki uboczne. Tę krzywą w kształcie litery S należy uchwycić modelem wielomianowym
- Inżynieria: Zależności naprężenie–odkształcenie w materiałach, opór aerodynamiczny i rozszerzalność cieplna mają nieliniowe wzorce, które dobrze modeluje regresja wielomianowa
- Finanse: Stopy zwrotu, wycena opcji i krzywe popytu często wykazują malejące lub rosnące efekty, których prosta nie odda
- Potoki uczenia maszynowego: Cechy wielomianowe to szybki sposób na dodanie nieliniowości do modelu liniowego bez przechodzenia na bardziej złożony algorytm
Wspólny mianownik jest taki sam: zależność między wejściem a wyjściem zmienia się dla różnych wartości x. Regresja liniowa zakłada stałą zmianę. Regresja wielomianowa — nie.
To powiedziawszy, regresja wielomianowa nie jest panaceum.
Najlepiej działa, gdy wiedza dziedzinowa sugeruje krzywoliniową relację lub gdy wykres reszt jednoznacznie pokazuje wzorzec, którego prosta nie naprawi. Warto po nią sięgnąć z konkretnym problemem — nie tylko dlatego, że R² modelu liniowego nie jest wystarczająco wysokie.
Zrozumieć matematykę regresji wielomianowej
Znajomość podstawowej matematyki stojącej za regresją wielomianową pomoże lepiej ją zrozumieć.
Wyrazy wielomianowe
W regresji liniowej model wygląda tak:

Wzór regresji liniowej
Jedna zmienna wejściowa, jeden współczynnik, jedna prosta. Regresja wielomianowa rozszerza to, dodając wyrazy wyższych rzędów:

Wzór regresji wielomianowej
Każdy nowy wyraz — x², x³ i tak dalej — daje modelowi jedno dodatkowe „zgięcie”. Wielomian stopnia 2 potrafi dopasować pojedynczą krzywą. Stopień 3 — krzywą, która raz zmienia kierunek. Stopień n kontroluje elastyczność modelu.
Podstawowy algorytm pozostaje ten sam. Po prostu dodajemy nowe cechy. x² jest traktowane jako osobna zmienna wejściowa, podobnie jak x. Model nadal dopasowuje równanie liniowe — tylko do przekształconych cech.
Estymacja metodą najmniejszych kwadratów
Dopasowanie modelu regresji wielomianowej działa tak samo jak w regresji liniowej — czyli za pomocą metody najmniejszych kwadratów.
Chodzi o znalezienie współczynników minimalizujących sumę kwadratów reszt:

Wzór SSR
Każda różnica podniesiona do kwadratu to reszta — luka między przewidywaniem modelu a obserwacją. Podnoszenie do kwadratu zapobiega znoszeniu się ujemnych i dodatnich błędów oraz mocniej karze duże błędy niż małe.
W praktyce biblioteka robi to za nas. Wiedza, że najmniejsze kwadraty są celem optymalizacji, pomaga jednak zrozumieć, czemu wartości odstające tak szkodzą modelom wielomianowym — pojedyncza duża reszta jest kwadratowana i ściąga współczynniki w swoim kierunku.
Interpretacja współczynników
W regresji liniowej b1 ma prostą interpretację: przy jednostkowym wzroście x, y zmienia się o b1.
W regresji wielomianowej jest nieco trudniej. Gdy model zawiera b_1x + b_2x^2, wpływ x na y zależy od bieżącej wartości x — nie można odczytać b2 w izolacji i wyciągnąć wniosków. Nachylenie krzywej stale się zmienia, co widać, biorąc pochodną względem x:

Pochodna względem x
Samo nachylenie jest funkcją x. To znaczy, że wpływ jednostkowej zmiany x jest inny w każdym punkcie krzywej.
Dlatego nie należy próbować interpretować pojedynczych współczynników w modelu wielomianowym. Zamiast tego warto spojrzeć na krzywą jako całość. Proszę wykreślić prognozy na tle danych.
Zastosowania regresji wielomianowej w data science
Regresja wielomianowa pojawia się w wielu dziedzinach, bo zakrzywione zależności są wszechobecne w prawdziwych danych.
Finanse
Dane finansowe rzadko poruszają się po prostych.
Ceny aktywów, wzrost przychodów i krzywe popytu mają tendencję do przyspieszania, zwalniania lub odwracania kierunku w zależności od warunków rynkowych. Model liniowy zakłada stałe tempo zmian, co prawie nigdy nie jest prawdą. Regresja wielomianowa pozwala modelować te przesunięcia — na przykład to, jak popyt konsumencki najpierw wolno maleje, a potem gwałtownie, gdy ceny przekroczą pewien próg.
Przydaje się też do analizy trendów w czasie. Gdy dopasowujemy krzywą do historycznych danych cenowych lub modelujemy wzrost metryki w różnych fazach cyklu koniunkturalnego, wielomian stopnia 2 lub 3 często lepiej oddaje kształt niż prosta.
Inżynieria
Procesy fizyczne to jedne z najlepszych przykładów nieliniowych zależności.
Naprężenia i odkształcenia w materiałach, dynamika płynów, rozszerzalność cieplna i opór aerodynamiczny podążają za krzywymi, a nie liniami. Wiele równań rządzących w fizyce ma z natury postać wielomianów. Regresja wielomianowa daje dane podejście do dopasowania takich krzywych, gdy mamy pomiary, ale brak czystego równania w postaci zamkniętej.
Dobrym przykładem jest siła oporu, która rośnie z kwadratem prędkości. Model liniowy będzie zaniżał opór przy wysokich prędkościach, a wielomian stopnia 2 poprawnie dopasuje zależność.
Uczenie maszynowe
W uczeniu maszynowym regresja wielomianowa jest często używana jako technika inżynierii cech, a nie samodzielny model.
Dodając wyrazy wielomianowe — x², x³, wyrazy interakcyjne — do zbioru cech, dajemy modelowi liniowemu możliwość dopasowania nieliniowych wzorców bez sięgania po bardziej złożony algorytm. To częsty pierwszy krok, gdy model liniowy jest niedopasowany i chcemy dodać elastyczności, zanim sięgniemy po drzewo decyzyjne czy sieć neuronową.
Przydaje się też jako model bazowy.
Zanim przeszkolimy bardziej złożony model, dopasowanie regresji wielomianowej pokazuje, jak dużą część wariancji potrafi wyjaśnić prosta krzywa. Jeśli wielomian stopnia 3 daje już większość efektu, być może nic bardziej skomplikowanego nie będzie potrzebne.
Jak wybrać właściwy stopień wielomianu
Wybór stopnia wielomianu to jedna z najważniejszych decyzji. Pomyłka w którąkolwiek stronę skończy się mniej trafnym modelem.
Na szczęście wystarczy kilka linijek Pythona, aby to załatwić.
Nadmierne vs. niedostateczne dopasowanie
Niedostateczne dopasowanie występuje, gdy stopień jest zbyt niski. Wielomian stopnia 1 na krzywoliniowych danych pominie wzorzec — wysoki błąd, słabe prognozy i model słabo działający na zbiorze treningowym i nowych danych.
Nadmierne dopasowanie to problem odwrotny i groźniejszy, bo na początku wygląda dobrze. Wielomian wysokiego stopnia może przechodzić niemal przez każdy punkt treningowy z niemal zerowym błędem. Ale model tylko zapamiętuje szum. Na nowych danych się rozsypie.
Widać to, porównując błąd treningowy i testowy w zależności od stopnia:
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
np.random.seed(42)
# Generate sample data
x = np.linspace(-3, 3, 80).reshape(-1, 1)
y = 0.6 * x.ravel()**2 - x.ravel() + np.random.normal(0, 0.6, 80)
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25)
for deg in [1, 2, 12]:
poly = PolynomialFeatures(deg)
model = LinearRegression()
model.fit(poly.fit_transform(x_train), y_train)
train_err = mean_squared_error(y_train, model.predict(poly.transform(x_train)))
test_err = mean_squared_error(y_test, model.predict(poly.transform(x_test)))
print(f"Degree {deg:>2} | Train MSE: {train_err:.4f} | Test MSE: {test_err:.4f}")

MSE dla różnych stopni
Albo wizualnie:

Dopasowanie danych różnymi stopniami wielomianu
Stopień 1 ma wysoki błąd na obu zbiorach — to niedostateczne dopasowanie. Stopień 2 jest wyważony. Stopień 12 ma niższy błąd treningowy, ale dużo wyższy testowy — to nadmierne dopasowanie.
Walidacja krzyżowa
Właściwym sposobem znalezienia najlepszego stopnia jest walidacja krzyżowa — konkretnie k-krotna walidacja krzyżowa.
Pomysł jest taki, by podzielić dane na k podzbiorów, trenować na k-1 z nich i testować na pozostawionym, powtarzając aż każdy podzbiór raz będzie zbiorem testowym. Na końcu uśredniamy błąd ze wszystkich fałd, powtarzamy dla każdego kandydującego stopnia i wybieramy ten z najniższym średnim błędem testowym.
Implementacja jest dużo prostsza niż wyjaśnienie:
import numpy as np
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import cross_val_score
from sklearn.pipeline import make_pipeline
import matplotlib.pyplot as plt
np.random.seed(42)
# Generate sample data
x = np.linspace(-3, 3, 80).reshape(-1, 1)
y = 0.6 * x.ravel()**2 - x.ravel() + np.random.normal(0, 0.6, 80)
# Test degrees 1 through 10
degrees = range(1, 11)
mean_errors = []
for deg in degrees:
model = make_pipeline(PolynomialFeatures(deg), LinearRegression())
scores = cross_val_score(model, x, y, cv=5, scoring="neg_mean_squared_error")
mean_errors.append(-scores.mean())
print(f"Degree {deg:>2} | Mean error: {-scores.mean():.4f}")
best_degree = np.argmin(mean_errors) + 1

Porównanie błędu dla stopni
Albo wizualnie:

Porównanie błędu walidacji krzyżowej
Błąd CV spada, gdy dodajemy użyteczne wyrazy wielomianowe, a potem rośnie, gdy model zaczyna się przeuczać.
Gdy dwa stopnie dają podobny błąd CV, proszę wybrać niższy. Prostszy model o takiej samej skuteczności jest zawsze lepszy.
Kluczowe kwestie i ograniczenia
Istnieje kilka sposobów, w jakie regresja wielomianowa może prowadzić do błędnych wniosków. Omówmy je.
Wrażliwość na wartości odstające
Wartości odstające wpływają na regresję wielomianową bardziej niż na liniową.
Metoda najmniejszych kwadratów podnosi każdą resztę do kwadratu przed zsumowaniem. Pojedynczy punkt znacznie odbiegający od trendu wnosi nieproporcjonalnie duży błąd, a model wygnie krzywą, by go zmniejszyć — nawet kosztem zniekształcenia dopasowania gdzie indziej.
Efekt nasila się wraz ze wzrostem stopnia. Wielomian wysokiego stopnia ma dość elastyczności, by „gonić” wartość odstającą, przez co krzywa odrywa się od głównej masy danych, by dopasować jeden zły punkt.
Sposobem obejścia jest oczyszczenie danych przed dopasowaniem. Proszę wykreślić dane, zidentyfikować wartości odstające i zdecydować, czy reprezentują sygnał, czy szum. Jeśli to szum — błędy pomiaru, pomyłki przy wprowadzaniu danych, uszkodzone rekordy — proszę je usunąć. Jeśli to sygnał, warto rozważyć metodę bardziej odpornego dopasowania, jak RANSAC lub regresję Hubera.
Nadmierne dopasowanie
Każdy dodany wyraz wielomianowy zwiększa elastyczność modelu. W pewnym momencie elastyczność przestaje pomagać, a model zaczyna dopasowywać losowy szum w danych treningowych zamiast rzeczywistego wzorca. Efektem jest krzywa, która dobrze działa na treningu, ale zawodzi na nowych danych.
Problem w tym, że nadmierne dopasowanie jest niewidoczne, jeśli patrzymy tylko na błąd treningowy. Wielomian stopnia 10 niemal zawsze będzie miał niższy MSE na treningu niż stopnia 2. Nie znaczy to, że jest lepszy.
Oto zalecane podejście:
- Zacząć nisko: Proszę spróbować stopnia 2 lub 3, zanim pójdziemy wyżej. Większość rzeczywistych krzywych nie potrzebuje więcej
- Zawsze oceniać na danych odłożonych: Sam błąd treningowy nic nie mówi o uogólnianiu.
- Walidacja krzyżowa: Proszę użyć jej, by znaleźć stopień, przy którym błąd testowy przestaje się poprawiać.
- Obserwować krzywą: Jeśli poza zakresem danych treningowych krzywa zachowuje się „dziko”, to znak nadmiernego dopasowania.
Regresja wielomianowa działa najlepiej, gdy mamy dobry powód, by oczekiwać krzywoliniowej zależności, i gdy możemy utrzymać niski stopień.
Alternatywy dla regresji wielomianowej
Regresja wielomianowa nie zawsze jest właściwym narzędziem — niektóre z tych alternatyw mogą pasować lepiej, bez zamierzonej gry słów.
Splajny
Splajny rozwiązują problem globalnej niestabilności.
Gdy dopasowujemy wielomian stopnia 10, każdy współczynnik jest pod wpływem każdego punktu. Zmiana w jednym obszarze danych wpływa na krzywą wszędzie. Splajny unikają tego, dzieląc dane na segmenty i dopasowując do każdego z nich osobny wielomian niskiego stopnia. Segmenty łączy się w węzłach, z warunkami zapewniającymi gładkość na łączeniach.
Wynikiem jest krzywa, która jest elastyczna tam, gdzie trzeba, a stabilna gdzie indziej.
W Pythonie zarówno scipy, jak i scikit-learn mają solidne implementacje splajnów:
from scipy.interpolate import UnivariateSpline
spline = UnivariateSpline(x, y, k=3)
y_pred = spline(x_new)

Splajn a wielomian wysokiego stopnia
Podsumowując: proszę wybrać splajny, gdy dane zachowują się różnie w różnych zakresach lub gdy pojedyncza krzywa wielomianowa nie potrafi uchwycić kształtu bez sięgania po wysoki stopień.
Regresja wektorów nośnych
Support Vector Regression (SVR) podchodzi do problemu inaczej.
Nie dopasowuje krzywej minimalizującej sumę kwadratów błędów we wszystkich punktach, lecz szuka funkcji, która pozostaje w określonym marginesie błędu dla jak największej liczby punktów, ignorując te mieszczące się w marginesie. Dzięki temu jest mniej wrażliwy na wartości odstające niż regresja wielomianowa.
Związek z regresją wielomianową pojawia się poprzez sztuczkę z jądrem. SVR z jądrem wielomianowym może dopasowywać nieliniowe zależności podobnie jak regresja wielomianowa — ale oferuje lepszą uogólnialność i większą kontrolę nad dopasowaniem dzięki parametrom regularyzacji.
from sklearn.svm import SVR
model = SVR(kernel="poly", degree=3, C=1.0, epsilon=0.1)
model.fit(x_train, y_train)

SVR a wielomian wysokiego stopnia
SVR to dobry wybór, gdy w danych są nieusuwalne wartości odstające, gdy potrzebna jest większa kontrola nad kompromisem bias–wariancja lub gdy regresja wielomianowa przeucza się mimo walidacji krzyżowej.
Wnioski
W tym artykule pokazałem, jak rozszerza ona regresję liniową, by dopasowywać krzywe, jak estymacja najmniejszych kwadratów znajduje najlepsze współczynniki oraz dlaczego interpretacja pojedynczych współczynników niewiele mówi.
Wybór stopnia ma największe znaczenie. Zbyt niski prowadzi do niedostatecznego dopasowania, a zbyt wysoki — do nadmiernego. Walidacja krzyżowa daje obiektywny sposób znalezienia „złotego środka”. A jeśli regresja wielomianowa nie jest właściwa, warto znać splajny i SVR jako solidne alternatywy.
Najlepszym sposobem na zbudowanie intuicji jest użycie tej metody na własnych danych. Proszę wybrać zbiór, w którym podejrzewa Pan/Pani nieliniową zależność, najpierw dopasować model liniowy, wykreślić reszty i zobaczyć, co inaczej robi regresja wielomianowa. Proszę przeczytać nasz przewodnik Modele nieliniowe i wnioski w R, aby zobaczyć ten pipeline w praktyce.
Najczęstsze pytania o regresję wielomianową
Czym jest regresja wielomianowa i kiedy powinienem/ powinnam jej użyć?
Regresja wielomianowa to rozszerzenie regresji liniowej, które dopasowuje do danych krzywą zamiast prostej. Stosuje się ją, gdy zależność między zmiennymi wejściową i wyjściową nie jest liniowa — na przykład, gdy wykres reszt z modelu liniowego pokazuje wzorzec. To dobry pierwszy krok, zanim sięgniemy po bardziej złożone modele, takie jak drzewa decyzyjne czy sieci neuronowe.
Czym różni się regresja wielomianowa od liniowej?
Regresja liniowa dopasowuje prostą, modelując zależność jako y = b0 + b1x. Regresja wielomianowa dodaje wyrazy wyższych stopni, takie jak x² i x³, dając modelowi dość elastyczności, by podążać za krzywymi w danych. Obie używają tej samej metody najmniejszych kwadratów — regresja wielomianowa traktuje po prostu te dodatkowe wyrazy jako kolejne cechy wejściowe.
Jakie są największe ryzyka stosowania regresji wielomianowej?
Dwa główne ryzyka to nadmierne dopasowanie i wrażliwość na wartości odstające. Wielomian wysokiego stopnia może „zapamiętać” szum w danych treningowych i słabo działać na nowych danych. Wartości odstające są groźne, bo metoda najmniejszych kwadratów podnosi każdą resztę do kwadratu — pojedynczy zły punkt może odciągnąć krzywą od reszty danych.
Jak wybrać odpowiedni stopień modelu regresji wielomianowej?
Proszę zacząć od stopnia 2 lub 3 — większość krzywoliniowych zależności ze świata rzeczywistego nie wymaga więcej. Następnie proszę użyć k-krotnej walidacji krzyżowej, aby porównać średni błąd testowy dla rozważanych stopni i wybrać ten, przy którym błąd przestaje się poprawiać. Gdy dwa stopnie dają podobne wyniki, zawsze proszę wybrać niższy.
Kiedy użyć splajnów lub SVR zamiast regresji wielomianowej?
Proszę sięgnąć po splajny, gdy dane zachowują się inaczej w różnych zakresach lub gdy pojedynczy wielomian generuje niestabilne krzywe na krańcach zakresu danych. A po SVR z jądrem wielomianowym warto sięgnąć, gdy wartości odstające są nieuniknione i potrzebny jest model, który nie „wygnie się”, by je uwzględnić. Obie alternatywy dają większą kontrolę nad dopasowaniem kosztem częściowej utraty interpretowalności.