Słownik metodologiczny · Modele regresji

Walidacja krzyżowa – jak sprawdzić, czy model przewiduje poza próbą

Walidacja krzyżowa pokazuje, ile model naprawdę przewiduje u osób, na których go nie budowano. Opisujemy k-krotną CV krok po kroku, przykład w R i zdanie do pracy.

Strona główna / Słownik / Walidacja krzyżowa
W skrócie: Walidacja krzyżowa dzieli dane na k części i każdą z nich przewiduje modelem zbudowanym na pozostałych. Daje to uczciwszą ocenę trafności predykcyjnej niż R² z próby uczącej. Wszystkie kroki budowy modelu powtarzaj wewnątrz pętli.

Co to jest walidacja krzyżowa?

Walidacja krzyżowa (ang. cross-validation, CV) to sposób oceny, jak dobrze model przewiduje wyniki osób, na których go nie budowano. Dane dzieli się na części: model uczy się na jednych, a sprawdza na pozostałych. Stone (1974) opisał ją jako ogólne kryterium wyboru i oceny prognoz, m.in. w regresji liniowej i analizie wariancji. W psychologii przydaje się zawsze, gdy celem jest przewidywanie, a nie tylko opis związku.

Jak to zrobić

  1. Losowo podziel próbę na k równych części (zwykle 5 lub 10).
  2. Dopasuj model do k − 1 części i policz przewidywania dla części pominiętej.
  3. Powtórz to k razy, tak by każda osoba raz była w części testowej.
  4. Z wszystkich przewidywań policz miarę błędu, np. RMSE albo R² poza próbą.

Gdy k = n, mówimy o walidacji „leave-one-out”. Wynik zależy od losowego podziału, dlatego warto powtórzyć procedurę wiele razy i podać średnią. Steyerberg i in. (2001) pokazali, że jednorazowy podział na dwie połowy daje zbyt pesymistyczne i bardzo zmienne oceny, a stabilne oszacowania daje bootstrap.

Przykład

Wypalenie 80 osób przewidywano z 3 predyktorów (model A) albo z tych samych 3 i 9 zmiennych bez związku z wynikiem (model B; dane symulowane). W próbie uczącej model B wygrywał: R² = .408 wobec .284. W 10-krotnej walidacji krzyżowej było odwrotnie: .075 wobec .198. Po 50 powtórzeniach średnie wyniosły .129 dla B i .203 dla A. Przewagę modelu B w próbie uczącej dawało więc przeuczenie.

Jak opisać w pracy

Trafność predykcyjną modeli oceniono 10-krotną walidacją krzyżową powtórzoną 50 razy. Model z trzema predyktorami wyjaśniał poza próbą uczącą średnio 20.3% wariancji wypalenia (zakres 15.9–24.8%), a model z dwunastoma predyktorami 12.9% (6.2–21.6%), mimo wyższego R² w próbie uczącej (.408 wobec .284).

Na co uważać

  • Wszystkie decyzje rób wewnątrz pętli. Jeśli wybierasz predyktory, standaryzujesz albo imputujesz braki na całej próbie, część testowa „podgląda” dane i błąd wychodzi zbyt optymistyczny.
  • Nie myl z R² skorygowanym. W przykładzie dla modelu B wyniósł on .302, znacznie więcej niż R² z walidacji krzyżowej.
  • Walidacja wewnętrzna nie zastąpi zewnętrznej. Nowa próba z innego miejsca lub czasu sprawdza też przenośność modelu.

Walidacją krzyżową dobiera się też karę w regresji grzbietowej i LASSO. Yarkoni i Westfall (2017) przekonują, że psychologia powinna częściej oceniać teorie po tym, jak przewidują. Całą procedurę, razem z kalibracją, opisujemy we wpisie modele predykcyjne.

Przykład reprodukowalny

Walidacja krzyżowa w R

Kod liczy R² poza próbą w 10-krotnej walidacji krzyżowej bez dodatkowych pakietów.

10-krotna walidacja krzyżowa regresji liniowej

Dane wejściowe: ramka X z wynikiem y i predyktorami x1–x12 (dane symulowane, pełny skrypt w pliku kodu).

Co odczytać: R² w próbie uczącej i w walidacji krzyżowej dla obu modeli.

R
cv_r2 <- function(formula, data, k = 10) {
  fold <- sample(rep(1:k, length.out = nrow(data)))   # losowy przydział do k części
  pred <- numeric(nrow(data))
  for (i in 1:k) {
    fit <- lm(formula, data = data[fold != i, ])
    pred[fold == i] <- predict(fit, data[fold == i, ])
  }
  1 - sum((data$y - pred)^2) / sum((data$y - mean(data$y))^2)
}
fA <- y ~ x1 + x2 + x3; fB <- y ~ .
set.seed(1)
round(c(A_ucz = summary(lm(fA, X))$r.squared, A_cv = cv_r2(fA, X),
        B_ucz = summary(lm(fB, X))$r.squared, B_cv = cv_r2(fB, X)), 3)
Wynik w R
A_ucz  A_cv B_ucz  B_cv
0.284 0.198 0.408 0.075 

Bibliografia oprogramowania

Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (funkcje pakietów base i stats).

  1. R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/

Najczęstsze pytania

Ile części wybrać w k-krotnej walidacji krzyżowej?

Najczęściej 5 lub 10. Przy bardzo małej próbie stosuje się leave-one-out. Niezależnie od k powtórz losowy podział kilkadziesiąt razy i podaj średni wynik.

Czym walidacja krzyżowa różni się od podziału próby na pół?

Przy podziale na pół każdą osobę wykorzystuje się tylko raz, do uczenia albo do testu. W walidacji krzyżowej każda osoba trafia do testu, więc ocena jest stabilniejsza.

Czy walidacja krzyżowa zastępuje nową próbę?

Nie. Ocenia model na danych z tej samej populacji i procedury. Przenośność na inne miejsca lub czas sprawdza dopiero walidacja zewnętrzna.

Powiązane hasła

Poradniki, w których użyjesz tego pojęcia

Potrzebujesz wsparcia w analizie danych?

Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.

Wyceń analizęOferta dla studentów

Bibliografia i dalsza literatura naukowa (APA 7)

  1. Steyerberg, E. W., Harrell, F. E., Borsboom, G. J. J. M., Eijkemans, M. J. C., Vergouwe, Y., & Habbema, J. D. F. (2001). Internal validation of predictive models: Efficiency of some procedures for logistic regression analysis. Journal of Clinical Epidemiology, 54(8), 774–781. https://doi.org/10.1016/s0895-4356(01)00341-9
  2. Stone, M. (1974). Cross-validatory choice and assessment of statistical predictions. Journal of the Royal Statistical Society: Series B (Methodological), 36(2), 111–133. https://doi.org/10.1111/j.2517-6161.1974.tb00994.x
  3. Yarkoni, T., & Westfall, J. (2017). Choosing prediction over explanation in psychology: Lessons from machine learning. Perspectives on Psychological Science, 12(6), 1100–1122. https://doi.org/10.1177/1745691617693393 ● Otwarty dostęp: pełny tekst

Cytowania BibTeX

@article{steyerberg2001internal, author={Steyerberg, Ewout W. and Harrell, Frank E. and Borsboom, Gerard J. J. M. and Eijkemans, Marinus J. C. and Vergouwe, Yvonne and Habbema, J. Dik F.}, title={{Internal validation of predictive models: Efficiency of some procedures for logistic regression analysis}}, journal={Journal of Clinical Epidemiology}, year={2001}, volume={54}, number={8}, pages={774--781}, doi={10.1016/s0895-4356(01)00341-9}}
@article{stone1974cross, author={Stone, M.}, title={{Cross-validatory choice and assessment of statistical predictions}}, journal={Journal of the Royal Statistical Society: Series B (Methodological)}, year={1974}, volume={36}, number={2}, pages={111--133}, doi={10.1111/j.2517-6161.1974.tb00994.x}}
@article{yarkoni2017choosing, author={Yarkoni, Tal and Westfall, Jacob}, title={{Choosing prediction over explanation in psychology: Lessons from machine learning}}, journal={Perspectives on Psychological Science}, year={2017}, volume={12}, number={6}, pages={1100--1122}, doi={10.1177/1745691617693393}}
R