ML Atlas

04 · Ocena · 4 min czytania · Interaktywne · aktualizacja

Czym jest analiza reszt w regresji i co mówi wykres reszt?

W skrócie

Reszty to różnice między wartością prawdziwą a przewidywaną. Ich wykres ujawnia nieliniowość, punkty wpływowe i zmienny rozrzut, których metryki nie pokażą.

Co to jest

Analiza reszt to badanie różnic e = y − ŷ między prawdziwymi wartościami a przewidywaniami modelu regresji, najczęściej na wykresach: reszty względem przewidywań, reszty względem każdej cechy, histogram lub wykres kwantylowy reszt. Celem jest sprawdzenie, czy model uchwycił całą systematyczną część zależności — jeśli tak, w resztach zostaje tylko bezkształtny szum.

Intuicja: metryka taka jak RMSE mówi, ile model się myli. Reszty mówią, jak się myli. Dwa modele o identycznym RMSE mogą mylić się zupełnie inaczej — jeden losowo, drugi systematycznie zaniżając wszystkie duże wartości. Tylko ten drugi da się łatwo poprawić, i tylko reszty to pokażą.

Mechanizm — dlaczego tak działa

Model regresji rozkłada cel na część przewidywaną i resztę. Jeśli model jest poprawnie wyspecyfikowany, reszta nie powinna zawierać żadnej informacji, którą da się przewidzieć z cech lub z samego ŷ. Każda struktura w resztach jest więc sygnałem, że model coś pominął. Wykres reszt jest swoistym testem: patrzymy, czy pozostało coś, czego model nie wyjaśnił.

Typowe wzory i ich znaczenie. Łuk (reszty dodatnie w środku, ujemne na krańcach lub odwrotnie) — zależność jest nieliniowa; pomoże przekształcenie cechy, wielomian albo model nieliniowy. Lejek (rozrzut rośnie z ŷ) — heteroskedastyczność: błąd jest proporcjonalny do wielkości; pomaga logarytm celu lub ważenie, a przedziały ufności z klasycznych wzorów są błędne. Pojedynczy punkt daleko od zera — obserwacja odstająca, która może ciągnąć całą prostą. Fale w czasie — autokorelacja: kolejne błędy są zależne, co narusza założenie niezależności i zawyża pewność oszacowań.

Ważna subtelność: duża reszta to nie to samo co duży wpływ. Punkt o skrajnej wartości cechy ma dużą dźwignię (leverage) — prosta metodą najmniejszych kwadratów przechodzi blisko niego, bo każde odchylenie od niego kosztowałoby dużo. Taki punkt może mieć resztę równą zeru, a jednocześnie w pojedynkę ustalać nachylenie. Dlatego oprócz reszt sprawdza się dźwignię i odległość Cooka, która łączy obie wielkości i mierzy, jak bardzo zmieniłyby się przewidywania po usunięciu punktu.

Reszty licz najlepiej na danych walidacyjnych. Na treningu model elastyczny „wchłania” strukturę i reszty wyglądają lepiej, niż powinny. W klasycznej regresji liniowej używa się reszt standaryzowanych lub studentyzowanych, które uwzględniają, że punkty o dużej dźwigni mają z natury mniejsze reszty.

Na przykładzie

Kwartet Anscombe’a to cztery zbiory po 11 punktów. Dla każdego policzyłem regresję liniową: wszystkie dają prostą ŷ = 3,00 + 0,500·x, R² = 0,67, korelację 0,816 i niemal identyczną sumę kwadratów reszt (13,7–13,8). Według metryk to ten sam problem. Reszty mówią co innego. W zbiorze I rozkładają się bezładnie wokół zera (od −1,92 do 1,84) — tu prosta jest rozsądnym modelem.

W zbiorze II reszty układają się w łuk: +1,27 dla x = 9, −1,90 dla x = 4 i x = 14. Zależność jest kwadratowa — parabola dopasowana do tych punktów ma R² = 1,000. W zbiorze III dziesięć reszt jest małych, a jedna wynosi 3,24 (x = 13); po jej usunięciu pozostałe punkty leżą idealnie na prostej ŷ = 4,01 + 0,345·x (R² = 1,0), więc jedna obserwacja podniosła nachylenie z 0,345 do 0,500. Zbiór IV jest najbardziej podchwytliwy: dziesięć punktów ma x = 8, jeden x = 19. Ten punkt ma dźwignię 1,0 i resztę dokładnie 0 — wykres reszt go nie wyróżnia, a to on w całości wyznacza nachylenie, bo bez niego prosta jest nieokreślona.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: na danych o cukrzycy dopasowujesz prostą suwakami nachylenia i wyrazu wolnego; widać reszty i porównanie Twojego błędu z minimum metody najmniejszych kwadratów.

Dane: Kwartet Anscombe’a

W praktyce

  • Wykres reszt w scikit-learn: PredictionErrorDisplay.from_estimator(model, X_test, y_test, kind='residual_vs_predicted') (wersja 1.2+).
  • Dla regresji liniowej z diagnostyką: statsmodels — OLSInfluence(results) daje reszty studentyzowane, dźwignię (hat_matrix_diag) i odległość Cooka (cooks_distance).
  • Rysuj reszty względem każdej ważnej cechy, także tej, której nie ma w modelu — trend sugeruje, że warto ją dodać.
  • Lejek: spróbuj np.log1p(y) lub TransformedTargetRegressor; łuk: PolynomialFeatures, spline’y (SplineTransformer) lub model drzewiasty.
  • Dla szeregów czasowych sprawdź autokorelację reszt (statsmodels.graphics.tsaplots.plot_acf).
  • Typowy błąd: usuwanie punktów tylko dlatego, że mają dużą resztę. Najpierw sprawdź, czy to błąd danych, czy prawdziwe zjawisko, którego model nie umie opisać.

Najczęstsze pytania

Jak powinien wyglądać dobry wykres reszt?
Jak pozioma, jednolita chmura wokół zera: bez łuku, bez lejka, bez wyraźnie odstających punktów i bez skupisk. Nie musi być idealnie symetryczny, ale nie powinien zawierać żadnego wzoru, który dałoby się opisać słowami.
Czy reszty muszą mieć rozkład normalny?
Dla samych przewidywań — nie. Normalność reszt jest potrzebna do klasycznych testów i przedziałów ufności w regresji liniowej, zwłaszcza przy małych próbach. Ważniejsze są brak struktury i stała wariancja.
Czy analiza reszt ma sens dla modeli takich jak las losowy czy sieć neuronowa?
Tak. Nie ma tam klasycznych testów statystycznych, ale wykres reszt na zbiorze walidacyjnym nadal pokazuje, dla jakich wartości lub grup model systematycznie się myli, co podpowiada brakujące cechy lub potrzebę transformacji celu.

Źródła

  • Anscombe F. J. (1973). Graphs in Statistical Analysis. The American Statistician, 27(1).
  • James G., Witten D., Hastie T., Tibshirani R. „An Introduction to Statistical Learning”, 2nd ed., Springer 2021, rozdz. 3.3.3 (Potential Problems).
  • Cook R. D. (1977). Detection of Influential Observation in Linear Regression. Technometrics, 19(1).
  • Draper N. R., Smith H. „Applied Regression Analysis”, 3rd ed., Wiley 1998.
  • Dokumentacja scikit-learn: Visualizing regression models (PredictionErrorDisplay) — https://scikit-learn.org/stable/modules/generated/sklearn.metrics.PredictionErrorDisplay.html

Zobacz też