01 · Podstawy · 4 min czytania · Interaktywne · aktualizacja
Co to jest prawdopodobieństwo warunkowe i dlaczego P(A|B) to nie P(B|A)?
W skrócie
Prawdopodobieństwo warunkowe P(A|B) to szansa zdarzenia A, gdy wiemy, że zaszło B. To zawężenie świata do przypadków B — i nie wolno go odwracać bez Bayesa.
Co to jest
Prawdopodobieństwo warunkowe P(A | B), czytane „prawdopodobieństwo A pod warunkiem B”, to szansa zdarzenia A, jeśli wiemy, że zaszło zdarzenie B. Definiuje się je wzorem P(A | B) = P(A i B) / P(B), o ile P(B) > 0.
Intuicja jest prosta: warunkowanie to zawężenie świata. Wyrzucamy wszystkie przypadki, w których B nie zaszło, i pytamy, jaką część tego, co zostało, stanowi A. Pytanie „ilu pasażerów przeżyło?” dotyczy wszystkich; pytanie „ile kobiet przeżyło?” dotyczy tylko kobiet — i ma zupełnie inną odpowiedź.
Prawie każda predykcja w uczeniu maszynowym jest prawdopodobieństwem warunkowym. Klasyfikator szacuje P(klasa | cechy), czyli szansę klasy dla przypadku o danych cechach. Model językowy szacuje P(następne słowo | poprzednie słowa). Czułość testu to P(wynik dodatni | choroba), a precyzja to P(choroba | wynik dodatni) — i właśnie pomylenie tych dwóch jest jednym z najczęstszych błędów w myśleniu o danych.
Mechanizm — dlaczego tak działa
Wzór P(A | B) = P(A i B) / P(B) to nic innego jak zmiana mianownika. Zwykłe prawdopodobieństwo liczymy względem całego świata; warunkowe — względem jego części B. Dzielenie przez P(B) „rozciąga” tę część tak, żeby znowu sumowała się do 1. Przekształcając wzór, dostajemy regułę iloczynu: P(A i B) = P(B) · P(A | B). Rozpisana dla wielu zdarzeń daje rozkład łańcuchowy P(x₁, x₂, x₃) = P(x₁) · P(x₂ | x₁) · P(x₃ | x₁, x₂) — dokładnie tak modele językowe rozkładają prawdopodobieństwo całego tekstu.
Najważniejsza lekcja: P(A | B) i P(B | A) to różne liczby. Mają ten sam licznik (P(A i B)), ale różne mianowniki. Prawie wszyscy zawodowi koszykarze są wysocy, ale wśród wysokich ludzi zawodowi koszykarze to znikomy odsetek. Odwrócenie warunku bez uwzględnienia częstości bazowych to tzw. błąd prokuratora i pokrewny mu błąd zaniedbania częstości bazowej. Poprawną drogę od jednego do drugiego daje twierdzenie Bayesa.
Druga lekcja: warunkowanie może odwrócić wnioski. Zależność widoczna w całych danych może zniknąć albo zmienić znak, gdy podzielimy dane na podgrupy (paradoks Simpsona). Odwrotnie też: zdarzenia niezależne w całej populacji mogą stać się zależne, gdy warunkujemy na ich wspólnym skutku (paradoks Berksona). Dlatego pytanie „pod jakim warunkiem?” jest jednym z najważniejszych pytań analizy danych.
Trzecia lekcja: warunkowanie na rzadkim zdarzeniu oznacza małą próbę. P(przeżycie | kobieta z pierwszej klasy, która wsiadła w Cherbourgu) liczymy z kilkudziesięciu osób, więc oszacowanie jest niepewne. Modele uczące się P(klasa | cechy) muszą jakoś „pożyczać” informację między podobnymi przypadkami — i na tym polega uogólnianie.
Na przykładzie
W zbiorze Titanic przeżyło 342 z 891 pasażerów, czyli 38,4%. Zawężając świat do 314 kobiet, dostajemy P(przeżycie | kobieta) = 233 / 314 = 0,742. Dla 577 mężczyzn P(przeżycie | mężczyzna) = 109 / 577 = 0,189. Ta sama para zdarzeń w odwrotnym kierunku daje coś innego: P(kobieta | przeżycie) = 233 / 342 = 0,681. Licznik (233) jest wspólny, mianowniki różne — stąd 74% kontra 68%.
Dalsze warunkowanie wyostrza obraz. Kobiety z pierwszej klasy przeżyły w 96,8% (91 z 94), mężczyźni z trzeciej — w 13,5% (47 z 347). Klasa też działa w obie strony niesymetrycznie: P(przeżycie | pierwsza klasa) = 0,630, ale P(pierwsza klasa | przeżycie) = 0,398 — większość ocalałych podróżowała niższymi klasami, bo tych pasażerów było po prostu więcej.
Dane: Titanic
W praktyce
- W pandas prawdopodobieństwa warunkowe to średnie w grupach:
df.groupby('sex').survived.mean(), albopd.crosstab(df.sex, df.survived, normalize='index')(wiersze sumują się do 1). normalize='columns'wpd.crosstabdaje warunkowanie w odwrotną stronę — uważaj, który kierunek czytasz.confusion_matrix(y, y_pred, normalize='true')pokazuje czułości (warunek: prawdziwa klasa), anormalize='pred'— precyzje (warunek: predykcja).- Przy wielu warunkach naraz sprawdzaj liczebności grup (
.agg(['mean', 'size'])), bo odsetek z 6 obserwacji to prawie szum. - Typowy błąd: raportowanie P(cecha | klasa) z danych treningowych tak, jakby to było P(klasa | cecha).
Najczęstsze pytania
- Jak odróżnić P(A|B) od P(B|A) w praktyce?
- Zapytaj, co jest mianownikiem: która grupa została „wycięta” ze świata. P(choroba | test dodatni) liczymy wśród osób z dodatnim testem, a P(test dodatni | choroba) — wśród chorych. Jeśli grupy mają bardzo różną liczebność, wyniki też będą bardzo różne.
- Czy prawdopodobieństwo warunkowe oznacza związek przyczynowy?
- Nie. To, że P(A | B) różni się od P(A), mówi tylko, że A i B są statystycznie powiązane. Przyczyną może być B, A, trzecia zmienna albo sposób zebrania danych.
- Co jeśli P(B) = 0?
- Wtedy zwykła definicja nie działa, bo dzielimy przez zero. Dla zmiennych ciągłych, gdzie każda konkretna wartość ma prawdopodobieństwo 0, używa się gęstości warunkowych, które rozwiązują ten problem przejściem granicznym.
Źródła
- Blitzstein, Hwang „Introduction to Probability”, 2nd ed., CRC Press, 2019, rozdz. 2 (Conditional probability).
- Murphy „Probabilistic Machine Learning: An Introduction”, MIT Press, 2022, rozdz. 2.
- Goodfellow, Bengio, Courville „Deep Learning”, MIT Press, 2016, rozdz. 3.5–3.6.
- Tversky, Kahneman, 1974, „Judgment under Uncertainty: Heuristics and Biases”, Science 185(4157), 1124–1131.
- Dokumentacja pandas: crosstab, https://pandas.pydata.org/docs/reference/api/pandas.crosstab.html