01 · Podstawy · 4 min czytania · Interaktywne · aktualizacja
Na czym polega twierdzenie Bayesa i jak go używać w praktyce?
W skrócie
Twierdzenie Bayesa odwraca warunek: z P(dowód|hipoteza) liczy P(hipoteza|dowód), łącząc siłę dowodu z tym, jak częsta była hipoteza przed jego poznaniem.
Co to jest
Twierdzenie Bayesa pozwala odwrócić prawdopodobieństwo warunkowe: P(H | D) = P(D | H) · P(H) / P(D). Tutaj H to hipoteza (np. „pacjent jest chory”), a D to dane lub dowód (np. „test wyszedł dodatni”). Wzór pochodzi z pracy Thomasa Bayesa opublikowanej pośmiertnie w 1763 roku; w ogólnej postaci rozwinął go Pierre-Simon Laplace.
Składniki mają swoje nazwy. P(H) to prawdopodobieństwo a priori — jak częsta była hipoteza, zanim zobaczyliśmy dowód. P(D | H) to wiarygodność — jak dobrze hipoteza tłumaczy dowód. P(H | D) to prawdopodobieństwo a posteriori — przekonanie po uwzględnieniu dowodu. P(D) to normalizacja: łączna szansa zobaczenia takiego dowodu przy wszystkich hipotezach.
Twierdzenie jest jednocześnie banalne i głębokie. Banalne, bo to dwie linijki algebry z definicji prawdopodobieństwa warunkowego. Głębokie, bo opisuje, jak racjonalnie uczyć się z danych — i pokazuje, dlaczego intuicja ludzi tak często się myli.
Mechanizm — dlaczego tak działa
Wyprowadzenie zajmuje jedną linijkę. Iloczyn P(H i D) można zapisać na dwa sposoby: P(H) · P(D | H) albo P(D) · P(H | D). Porównując oba zapisy i dzieląc przez P(D), dostajemy twierdzenie Bayesa. Mianownik rozpisuje się z prawa prawdopodobieństwa całkowitego: P(D) = P(D | H) · P(H) + P(D | nie H) · P(nie H).
Najczytelniejsza jest postać ilorazowa: szansa a posteriori = szansa a priori × iloraz wiarygodności, gdzie iloraz wiarygodności to P(D | H) / P(D | nie H). Dowód mnoży szanse przez czynnik mówiący, ile razy bardziej prawdopodobny jest pod jedną hipotezą niż pod drugą. Silny dowód (iloraz 100) przy rzadkiej hipotezie (szansa 1 do 1000) daje wciąż tylko szansę 1 do 10.
Stąd bierze się błąd zaniedbania częstości bazowej. Ludzie oceniają P(H | D) po samej sile dowodu, ignorując P(H). Test wykrywający 90% chorych wydaje się „wiarygodny w 90%”, ale jeśli choroba jest rzadka, większość dodatnich wyników pochodzi od zdrowych, bo zdrowych jest po prostu znacznie więcej. W języku metryk: czułość to P(+ | chory), precyzja to P(chory | +), a twierdzenie Bayesa łączy je przez częstość klasy pozytywnej.
Twierdzenie opisuje też uczenie się krok po kroku: wynik a posteriori po pierwszym dowodzie staje się a priori dla następnego. Dwa niezależne dodatnie testy to dwukrotne pomnożenie szans przez iloraz wiarygodności. Na tej idei opiera się wnioskowanie bayesowskie, filtry Kalmana i aktualizacja przekonań w uczeniu ze wzmocnieniem.
W uczeniu maszynowym wprost używa go naiwny klasyfikator Bayesa: P(klasa | cechy) ∝ P(klasa) · P(cechy | klasa), z założeniem, że cechy są niezależne w obrębie klasy. Zastrzeżenie: wynik a posteriori jest tak dobry jak a priori i wiarygodność. Jeśli częstość klasy w danych treningowych różni się od tej w produkcji (np. po zbalansowaniu klas), przewidywane prawdopodobieństwa będą systematycznie przesunięte.
Na przykładzie
Prosty przykład liczbowy: choroba dotyczy 1% osób, test wykrywa 90% chorych i daje fałszywy alarm u 9% zdrowych. Na 10 000 osób mamy 100 chorych, z których 90 ma wynik dodatni, oraz 9900 zdrowych, z których 891 ma wynik dodatni. P(chory | +) = 90 / (90 + 891) = 0,092. Mimo „dobrego” testu tylko 9,2% dodatnich wyników to rzeczywiście chorzy. Drugi, niezależny dodatni test podnosi tę wartość do około 50%.
Na zbiorze Titanic (891 pasażerów) można sprawdzić twierdzenie na prawdziwych liczbach. Wiemy, że P(przeżycie | kobieta) = 0,742, P(kobieta) = 0,352 i P(przeżycie) = 0,384. Bayes daje P(kobieta | przeżycie) = 0,742 · 0,352 / 0,384 = 0,681, dokładnie tyle, ile wynosi bezpośrednio policzony odsetek kobiet wśród ocalałych (233 z 342). W postaci ilorazowej: szansa przeżycia a priori to 342 : 549 = 0,62, a bycie kobietą jest 4,6 razy częstsze wśród ocalałych niż wśród ofiar. Szansa a posteriori to 0,62 · 4,6 ≈ 2,88, czyli prawdopodobieństwo 0,742.
Dane: Titanic
W praktyce
sklearn.naive_bayeszawieraGaussianNB(cechy ciągłe),MultinomialNB(liczniki słów) iBernoulliNB(cechy binarne); a priori ustawisz parametrempriorslubclass_prior.- Gdy częstość klasy w produkcji jest inna niż w treningu, przelicz wyniki postacią ilorazową: pomnóż szansę przez stosunek nowych i starych szans a priori.
- Mnożąc wiele wiarygodności, sumuj logarytmy (
predict_log_proba) — iloczyn setek małych liczb zaokrągli się do zera. - Precyzję modelu przy innej częstości klasy pozytywnej oszacujesz z czułości i swoistości właśnie twierdzeniem Bayesa.
- Typowy błąd: interpretowanie wartości p albo czułości testu jako prawdopodobieństwa, że hipoteza jest prawdziwa.
Najczęstsze pytania
- Skąd wziąć prawdopodobieństwo a priori?
- Z częstości w populacji (np. rozpowszechnienia choroby), z wcześniejszych badań albo z wiedzy dziedzinowej. Przy braku wiedzy wybiera się rozkłady mało informacyjne; przy dużej ilości danych wybór a priori ma coraz mniejszy wpływ na wynik.
- Czym różni się statystyka bayesowska od częstościowej?
- Obie używają twierdzenia Bayesa, gdy chodzi o zdarzenia. Różnica dotyczy parametrów: podejście bayesowskie traktuje nieznany parametr jako zmienną losową z rozkładem a priori, a częstościowe — jako stałą, o której wnioskuje się z zachowania procedur w powtarzanych próbach.
- Dlaczego „naiwny” Bayes działa, skoro cechy nie są niezależne?
- Bo do klasyfikacji wystarczy, żeby właściwa klasa miała najwyższy wynik, nawet jeśli same prawdopodobieństwa są przesadzone. Ranking klas bywa poprawny, choć kalibracja jest słaba.
Źródła
- Bayes, 1763, „An Essay towards solving a Problem in the Doctrine of Chances”, Philosophical Transactions of the Royal Society of London 53, 370–418.
- Gigerenzer, Hoffrage, 1995, „How to improve Bayesian reasoning without instruction: Frequency formats”, Psychological Review 102(4), 684–704.
- Blitzstein, Hwang „Introduction to Probability”, 2nd ed., CRC Press, 2019, rozdz. 2.
- Bishop „Pattern Recognition and Machine Learning”, Springer, 2006, rozdz. 1.2.
- Dokumentacja scikit-learn: Naive Bayes, https://scikit-learn.org/stable/modules/naive_bayes.html