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.

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ą
LinearRegressionz 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ź
Ridgei 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ą.
