• Dane i AI
  • Regresja liniowa w Pythonie i kontrola jakości prognoz

Regresja liniowa w Pythonie i kontrola jakości prognoz

Tymoteusz Kowalski • 12 listopada 2026
Wykres punktów z zaznaczoną linią regresji liniowej i obszarem ufności. Widać zależność punktów od godzin nauki.

Spis treści

Masz tabelę z czasem nauki i wynikiem testu, ale nie wiesz, czy dodatkowa godzina faktycznie wiąże się z lepszym rezultatem. Regresja liniowa pozwala opisać taką zależność prostą i oszacować wynik dla nowych danych, o ile relacja jest w przybliżeniu liniowa i nie wyciągasz wniosków poza zakres obserwacji.

Wykres punktowy z linią regresji liniowej pokazującą spadek ceny (Cena) w zależności od lat (Lata).

Prosta opisuje trend, ale jej jakość sprawdzają reszty

  • Współczynnik kierunkowy mówi, jak zmienia się prognozowany wynik przy zmianie cechy.
  • W Pythonie model dopasujesz klasą LinearRegression z biblioteki scikit-learn.
  • Testuj na danych odłożonych przed uczeniem, a nie na tych samych obserwacjach, na których model dopasował prostą.
  • Wykres reszt pomaga wykryć krzywiznę, zmienną skalę błędu i obserwacje odstające.
  • Ekstrapolacja, czyli prognoza poza zakresem danych, bywa ryzykowna nawet przy wysokim R².

Współczynnik opisuje zmianę, nie przyczynę

Na wykresie punktowym regresja liniowa szuka prostej, która możliwie dobrze opisuje układ obserwacji. W najprostszym przypadku model ma postać ŷ = b₀ + b₁x: ŷ to przewidywana wartość, b₀ jest wyrazem wolnym, a b₁ określa zmianę prognozy przy wzroście x o jednostkę.

Załóżmy, że x oznacza liczbę godzin nauki, a y wynik testu. Współczynnik 4 oznaczałby, że w dopasowanym modelu każda dodatkowa godzina wiąże się ze wzrostem przewidywanego wyniku o 4 punkty. Nie dowodzi to jednak, że nauka spowodowała wzrost: na wynik mogą wpływać wcześniejsza wiedza, sen czy trudność testu.

Przy wielu cechach model sumuje ich wkłady, na przykład przewiduje wynik z czasu nauki, liczby rozwiązanych zadań i wcześniejszej oceny. Współczynnik jednej cechy interpretuje się wtedy przy założeniu, że pozostałe pozostają bez zmian. Gdy cechy mocno się ze sobą wiążą, same współczynniki mogą być trudne do odczytania, nawet jeśli prognozy są użyteczne.

W Pythonie zacznij od podziału danych, nie od dopasowania

Najłatwiej zaufać modelowi, który zna już odpowiedzi. Dlatego przed uczeniem trzeba odłożyć część obserwacji do testu; wynik na danych treningowych pokazuje dopasowanie, ale nie mówi jeszcze, jak model poradzi sobie z nieznanymi przypadkami.

Przykład poniżej przewiduje wynik na podstawie jednej cechy. Własne dane powinny mieć kolumnę z cechą objaśniającą i kolumnę z celem, bez identyfikatorów, które jedynie oznaczają rekordy.

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error, r2_score

df = pd.read_csv("dane.csv")

X = df[["godziny_nauki"]]
y = df["wynik_testu"]

X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.2, random_state=42
)

model = LinearRegression()
model.fit(X_train, y_train)

predykcje = model.predict(X_test)

print("Wyraz wolny:", model.intercept_)
print("Współczynnik:", model.coef_[0])
print("MAE:", mean_absolute_error(y_test, predykcje))
print("R²:", r2_score(y_test, predykcje))

Klasa LinearRegression w scikit-learn dopasowuje współczynniki metodą najmniejszych kwadratów, minimalizując sumę kwadratów różnic między wynikami rzeczywistymi a przewidywanymi. Dokumentacja scikit-learn opisuje też parametry, takie jak fit_intercept; wyłączenie wyrazu wolnego ma sens, gdy dane są odpowiednio wycentrowane lub uzasadnia to założenie modelu.

MAE podaje przeciętną bezwzględną pomyłkę w jednostkach celu, więc łatwo ją odnieść do praktyki. R² porównuje model z prostym punktem odniesienia opartym na średniej, ale wysoka wartość sama w sobie nie gwarantuje trafnych prognoz w nowych warunkach.

Wykres reszt może obalić pozornie dobry wynik

Model może mieć wysokie R², a mimo to regularnie mylić się w ten sam sposób. Reszta to różnica między obserwowanym wynikiem a prognozą; wykres reszt względem wartości przewidywanych pokazuje, czy błędy przypominają przypadkowy szum, czy układają się we wzór.

Sytuacja na wykresie lub w danych Możliwa przyczyna Co zrobić
Reszty tworzą łuk Zależność może być krzywoliniowa Sprawdź wykres punktowy i rozważ inną postać modelu, na przykład dodanie składnika kwadratowego.
Rozrzut reszt rośnie wraz z prognozą Błąd ma zmienną wariancję Sprawdź, czy transformacja celu lub inna metoda modelowania lepiej opisuje dane.
Pojedyncza obserwacja leży daleko od pozostałych Możliwy błąd danych albo wpływowy przypadek Zweryfikuj rekord; porównaj model z nim i bez niego, nie usuwając go automatycznie.
Błędy są małe na treningu, duże na teście Model nie uogólnia dobrze lub podział danych nie odzwierciedla zadania Sprawdź proces podziału, cechy i walidację, zanim zmienisz algorytm.

NIST/SEMATECH e-Handbook of Statistical Methods wskazuje, że reszty pomagają ocenić między innymi niezależność i stałość wariancji błędów; ich widoczna struktura może sygnalizować, że model pomija ważny składnik. Uważam, że właśnie ten krok odróżnia sensowną analizę od samego uruchomienia fit().

Przy danych uporządkowanych w czasie losowy podział może dodatkowo przeciekać informację z przyszłości do treningu. Jeśli przewidujesz sprzedaż kolejnego miesiąca, test powinien obejmować późniejszy okres niż trening, a nie losowe rekordy z całej historii.

Dobieraj model do błędu, który widzisz

Klasyczna regresja najmniejszych kwadratów mocno reaguje na duże reszty, bo podnosi je do kwadratu. Jeden błędny rekord albo nietypowy przypadek może więc przesunąć prostą bardziej, niż sugerowałby jego udział w tabeli.

Jeśli pojedyncze skrajne obserwacje są wiarygodne i mają pozostać w danych, można porównać wynik z odporniejszą metodą, na przykład HuberRegressor. Gdy model ma zbyt wiele cech lub współczynniki są niestabilne, Ridge dodaje karę za duże wartości współczynników; Lasso może część z nich sprowadzić do zera. Te metody nie naprawią jednak błędnej definicji celu ani przecieku danych.

  • Prosta zależność i umiarkowana liczba cech: zacznij od LinearRegression.
  • Wiarygodne obserwacje odstające: porównaj klasyczny model z HuberRegressor.
  • Wiele powiązanych cech: sprawdź Ridge i dobierz siłę regularyzacji na walidacji.
  • Potrzeba uproszczenia zestawu cech: przetestuj Lasso, ale oceniaj prognozy poza treningiem.

Reguła praktyczna: gdy reszty układają się w łuk, zmieniaj postać zależności; gdy dominuje kilka skrajnych przypadków, sprawdź odporność na obserwacje odstające; gdy współczynniki skaczą przy zmianie próby, przetestuj regularyzację. Każdą zmianę oceniaj na tym samym, odłożonym zbiorze testowym.

Prognoza poza zakresem danych wymaga dodatkowej ostrożności

Model dopasowany dla 1-5 godzin nauki może zwrócić liczbę także dla 12 godzin. Matematycznie obliczenie jest poprawne, lecz dane nie potwierdziły, że trend utrzymuje się tak daleko; uczenie się może przynosić coraz mniejsze korzyści, a wynik testu ma naturalne ograniczenia.

Przed użyciem prognozy sprawdź, czy nowy przypadek mieści się w zakresie obserwowanych wartości i czy jednostki cech są takie same jak podczas treningu. Przy wielu zmiennych skontroluj też, czy ich kombinacja jest wiarygodna: rekord może mieć każdą cechę osobno w znanym zakresie, a mimo to przedstawiać nietypowy zestaw.

Wynik punktowy nie mówi, jak bardzo model może się pomylić. Jeśli decyzja zależy od ryzyka błędu, pokaż także przedział predykcji lub oszacuj niepewność odpowiednią metodą, zamiast prezentować pojedynczą prognozę jako pewnik.

Najlepsza prosta to ta, której błędy rozumiesz

Regresja liniowa jest dobrym punktem startu, gdy zależność ma sensowną interpretację, a diagnostyka nie ujawnia wzorów w resztach. Nie oceniaj jej wyłącznie po R²: zestaw jakość na danych testowych z wykresem błędów i zakresem, w którym model ma działać.

W projekcie Pythonowym taka kolejność oszczędza czas: najpierw wykres i podział danych, potem dopasowanie, a na końcu sprawdzenie pomyłek. Jeśli prosta nie przechodzi tej próby, jej prostota przestaje być zaletą.

FAQ - Najczęstsze pytania

Współczynnik kierunkowy pokazuje, o ile zmienia się prognozowana wartość, gdy cecha wzrasta o jednostkę. Jeśli wynosi 4, każda dodatkowa godzina nauki wiąże się w modelu ze wzrostem przewidywanego wyniku o 4 punkty. Sam współczynnik nie dowodzi związku przyczynowego, ponieważ na wynik mogą wpływać także inne czynniki, na przykład wcześniejsza wiedza lub sen.

Nie używaj losowego podziału, jeśli celem jest prognoza przyszłości, ponieważ do treningu może wtedy trafić informacja z późniejszych okresów. Ucz model na wcześniejszych danych, a test przeprowadź na późniejszym okresie, którego model wcześniej nie widział. W zwykłym przykładzie z danymi niezależnymi można odłożyć 20% obserwacji do testu.

Oceń model na odłożonych danych testowych, używając między innymi MAE, które podaje przeciętny błąd w jednostkach przewidywanego wyniku, oraz R². Sprawdź też wykres reszt względem prognoz: łuk może wskazywać na zależność krzywoliniową, a rosnący rozrzut błędów na zmienną wariancję. Wysokie R² samo nie gwarantuje trafnych prognoz w nowych warunkach.

Jeśli skrajne obserwacje są wiarygodne, porównaj klasyczny model z odporniejszym HuberRegressor, a przed usunięciem przypadku zweryfikuj jego dane. Przy wielu powiązanych cechach lub niestabilnych współczynnikach sprawdź Ridge, który ogranicza ich duże wartości, albo Lasso, które może sprowadzić część współczynników do zera. Porównuj warianty na tym samym zbiorze testowym.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi

python
regresja liniowa
reszty
regularyzacja
ekstrapolacja
Autor Tymoteusz Kowalski
Tymoteusz Kowalski
Nazywam się Tymoteusz Kowalski i od 7 lat zajmuję się programowaniem, ze szczególnym uwzględnieniem Pythona oraz nowoczesnych technologii. Moja przygoda z programowaniem zaczęła się od fascynacji możliwościami, jakie daje kod, a z czasem przerodziła się w pasję do dzielenia się wiedzą i pomagania innym w zrozumieniu złożonych zagadnień. Interesuje mnie, jak można uprościć trudne tematy, aby były bardziej przystępne dla każdego, niezależnie od poziomu zaawansowania. W moich tekstach staram się dostarczać rzetelne, aktualne i zrozumiałe informacje, a także porównywać różne źródła, aby zapewnić czytelnikom szeroki kontekst. Piszę o praktycznych zastosowaniach Pythona, nowinkach technologicznych oraz najlepszych praktykach programistycznych. Moim celem jest nie tylko przedstawienie teorii, ale także pokazanie, jak można ją zastosować w praktyce, co mam nadzieję, uczyni moją twórczość użyteczną dla każdego, kto pragnie rozwijać swoje umiejętności w programowaniu.

Udostępnij artykuł

Napisz komentarz