ML Atlas

01 · Podstawy · 4 min czytania · Interaktywne · aktualizacja

Na czym polega metoda bootstrap w statystyce i kiedy jej używać?

W skrócie

Bootstrap szacuje niepewność dowolnej statystyki, losując ze zwracaniem wiele nowych prób z danych i patrząc, jak bardzo zmienia się jej wartość.

Co to jest

Bootstrap to metoda szacowania niepewności statystyki — błędu standardowego, przedziału ufności, obciążenia — przez wielokrotne losowanie ze zwracaniem nowych prób z posiadanych danych i obliczanie statystyki na każdej z nich. Rozrzut tych wyników przybliża to, jak statystyka zmieniałaby się, gdyby można było powtórzyć zbieranie danych. Metodę zaproponował Bradley Efron w 1979 roku.

Intuicja: chcielibyśmy wiedzieć, jak bardzo mediana ceny biletu wahałaby się między różnymi grupami pasażerów, ale mamy tylko jedną listę pasażerów. Bootstrap mówi: potraktuj swoją próbę jak miniaturę populacji i losuj z niej. Nazwa pochodzi od idiomu „podciągnąć się za sznurówki butów” — metoda wyciąga informację o niepewności z samych danych, bez dodatkowych założeń.

Mechanizm — dlaczego tak działa

Klasyczna statystyka liczy niepewność z wzorów: dla średniej SE = s / √n. Ale dla mediany, ilorazu dwóch średnich, współczynnika korelacji czy AUC modelu wzory są skomplikowane albo nie istnieją. Prawdziwy rozkład próbkowy statystyki dałoby się poznać, losując wiele prób z populacji — a populacji nie mamy.

Kluczowy krok to zasada podstawienia (plug-in): zastąp nieznany rozkład populacji rozkładem empirycznym, czyli samą próbą, w której każda z n obserwacji ma prawdopodobieństwo 1/n. Losowanie n obserwacji ze zwracaniem z próby to dokładnie losowanie z rozkładu empirycznego. Jeśli próba jest duża i reprezentatywna, rozkład empiryczny jest bliski prawdziwemu, więc zmienność statystyki między próbami bootstrapowymi naśladuje jej zmienność między prawdziwymi próbami.

Przepis: (1) wylosuj ze zwracaniem n wierszy; (2) policz statystykę; (3) powtórz B razy (typowo 1000–10 000); (4) odchylenie standardowe B wyników to bootstrapowy błąd standardowy, a ich 2,5. i 97,5. percentyl — prosty przedział percentylowy 95%. Ponieważ losujemy ze zwracaniem, część wierszy pojawia się kilka razy, a średnio około 63,2% (1 − 1/e) różnych wierszy trafia do danej próby.

Ograniczenia. Bootstrap nie stworzy informacji, której nie ma w danych: przy małej próbie (kilkanaście obserwacji) rozkład empiryczny źle opisuje populację. Zawodzi dla statystyk zależnych od skrajnych wartości, takich jak maksimum. Dla statystyk „schodkowych”, jak mediana z wielu powtarzających się wartości, rozkład bootstrapowy jest ziarnisty. Wymaga też, by losować te same jednostki, które były niezależne: dane z wieloma wierszami na klienta losuje się klientami, a szeregi czasowe blokami. Gdy rozkład jest skośny, lepiej sprawdza się przedział BCa (z korekcją obciążenia i przyspieszeniem) niż prosty percentylowy.

To samo losowanie ze zwracaniem stoi za baggingiem i lasem losowym: tam bootstrap nie mierzy niepewności, tylko tworzy różnorodne zbiory treningowe dla wielu modeli, których średnia ma mniejszą wariancję.

Na przykładzie

Titanic, 891 pasażerów: średnia cena biletu to 32,20, a mediana 14,45 (rozkład jest silnie prawoskośny — kilka bardzo drogich biletów ciągnie średnią w górę). Dla średniej istnieje wzór: SE = 1,665. Bootstrap z 10 000 prób daje 1,665 — zgodność do trzeciej cyfry. Przedział percentylowy dla średniej to [29,14; 35,57]; zwróć uwagę, że nie jest symetryczny wokół 32,20, bo drogie bilety bardziej „podbijają” średnią niż tanie ją obniżają.

Dla mediany wzoru nie ma, a bootstrap działa tak samo: SE = 0,73, przedział 95% [13,00; 15,55]. Widać też ziarnistość: wśród 10 000 median bootstrapowych było tylko 31 różnych wartości, bo ceny biletów często się powtarzają. Drugi przykład: kobiety przeżywały w 74,2% przypadków (314 osób), mężczyźni w 18,9% (577 osób). Losując osobno w każdej grupie, dostajemy przedział dla różnicy 55,3 punktu procentowego: od 49,4 do 61,1 punktu. W pojedynczej próbie bootstrapowej znalazło się 63,6% różnych pasażerów — blisko teoretycznych 63,2%.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: przedział ufności dla średniej masy pingwinów z prób bootstrapowych porównany ze wzorem średnia ± 1,96·s/√n.

Dane: Titanic

W praktyce

  • scipy.stats.bootstrap((x,), np.median, n_resamples=10000, method='BCa') — gotowy przedział; domyślna metoda BCa radzi sobie ze skośnością.
  • Ręcznie: rng = np.random.default_rng(0); idx = rng.integers(0, n, n) i statystyka na x[idx]; ustaw ziarno, żeby wynik był powtarzalny.
  • Ocena modelu: bootstrapuj wiersze zbioru testowego i licz metrykę na gotowych predykcjach — model trenujesz raz, a dostajesz przedział dla trafności czy AUC.
  • sklearn.utils.resample losuje ze zwracaniem; BaggingClassifier i RandomForestClassifier(bootstrap=True) używają tego samego mechanizmu do budowy zespołów.
  • B = 1000 wystarcza na błąd standardowy, do percentyli przedziału lepiej 5000–10 000.
  • Typowy błąd: bootstrap na danych zależnych bez grupowania albo na zbiorze, na którym model był strojony — przedział wychodzi za wąski i za optymistyczny.

Najczęstsze pytania

Dlaczego losuje się ze zwracaniem?
Bo losowanie n obserwacji bez zwracania z n obserwacji dałoby za każdym razem tę samą próbę. Losowanie ze zwracaniem odpowiada niezależnemu losowaniu z rozkładu empirycznego, tak jak prawdziwe próby są losowane niezależnie z populacji.
Ile prób bootstrapowych trzeba?
Do błędu standardowego zwykle wystarcza kilkaset do tysiąca. Do przedziału 95% potrzeba więcej, bo percentyle 2,5 i 97,5 opierają się na ogonach — przyjmuje się 5000–10 000. Więcej prób nie zwęża przedziału, tylko zmniejsza szum symulacji.
Czy bootstrap działa na małych próbach?
Słabo. Przy kilkunastu obserwacjach rozkład empiryczny jest kiepskim przybliżeniem populacji i przedziały bywają za wąskie. Bootstrap zastępuje wzory, ale nie zastępuje danych.

Źródła

  • Efron, B. (1979). "Bootstrap methods: another look at the jackknife". The Annals of Statistics, 7(1), 1–26.
  • Efron, B., Tibshirani, R. J. (1993). An Introduction to the Bootstrap. Chapman & Hall.
  • James, G., Witten, D., Hastie, T., Tibshirani, R. (2021). An Introduction to Statistical Learning, 2nd ed., rozdz. 5.2 (The Bootstrap).
  • Hastie, T., Tibshirani, R., Friedman, J. (2009). The Elements of Statistical Learning, 2nd ed., rozdz. 8.2 i 8.7 (bootstrap i bagging).
  • SciPy: scipy.stats.bootstrap, https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.bootstrap.html

Zobacz też