ML Atlas

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.

Ta ilustracja działa w przeglądarce z włączonym JavaScriptem: przeżyło 38% pasażerów Titanica: 74% kobiet i 19% mężczyzn; przyciski dzielą pasażerów według płci, klasy i wieku.

Dane: Titanic

W praktyce

  • W pandas prawdopodobieństwa warunkowe to średnie w grupach: df.groupby('sex').survived.mean(), albo pd.crosstab(df.sex, df.survived, normalize='index') (wiersze sumują się do 1).
  • normalize='columns' w pd.crosstab daje warunkowanie w odwrotną stronę — uważaj, który kierunek czytasz.
  • confusion_matrix(y, y_pred, normalize='true') pokazuje czułości (warunek: prawdziwa klasa), a normalize='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

Zobacz też