ML Atlas

01 · Podstawy · 4 min czytania · Interaktywne · aktualizacja

Czym jest prawdopodobieństwo i jakie są jego podstawowe reguły?

W skrócie

Prawdopodobieństwo to liczba od 0 do 1 mierząca, jak bardzo możliwe jest zdarzenie. Trzy proste aksjomaty dają reguły dopełnienia, sumy i niezależności.

Co to jest

Prawdopodobieństwo to liczba z przedziału od 0 do 1 przypisana zdarzeniu, mierząca, jak bardzo jest ono możliwe: 0 oznacza zdarzenie niemożliwe, 1 — pewne. Formalnie jest to funkcja P określona na zdarzeniach (podzbiorach zbioru wszystkich możliwych wyników), spełniająca trzy aksjomaty Kołmogorowa z 1933 roku.

Te aksjomaty są zaskakująco skromne: prawdopodobieństwo żadnego zdarzenia nie jest ujemne; prawdopodobieństwo, że wydarzy się cokolwiek, wynosi 1; a dla zdarzeń wykluczających się prawdopodobieństwa się dodają. Cała reszta — rozkłady, twierdzenie Bayesa, prawa wielkich liczb — wynika z tych trzech zdań.

W uczeniu maszynowym prawdopodobieństwo jest językiem niepewności. Klasyfikator nie mówi „to spam”, tylko „to spam z prawdopodobieństwem 0,93”. Model językowy wybiera kolejne słowo, losując z rozkładu prawdopodobieństwa. Funkcje straty, takie jak entropia krzyżowa, mierzą, jak dobrze przewidywane prawdopodobieństwa pasują do rzeczywistości.

Mechanizm — dlaczego tak działa

Najprostsza interpretacja jest częstościowa: prawdopodobieństwo to odsetek, do którego zbliża się częstość zdarzenia przy wielu powtórzeniach. Rzucając monetą tysiące razy, zobaczymy orła w coraz bliżej 50% rzutów. Druga interpretacja jest bayesowska: prawdopodobieństwo to stopień przekonania, który aktualizujemy w świetle danych. Obie używają tych samych reguł rachunku — różnią się tym, do czego wolno je stosować (np. do jednorazowego zdarzenia, którego nie da się powtórzyć).

Z aksjomatów wynikają trzy reguły, których używa się na co dzień. Dopełnienie: P(nie A) = 1 − P(A). Suma: P(A lub B) = P(A) + P(B) − P(A i B); odejmujemy część wspólną, bo inaczej liczylibyśmy ją dwa razy. Iloczyn: P(A i B) = P(A) · P(B | A), gdzie P(B | A) to prawdopodobieństwo B, jeśli wiemy, że zaszło A.

Zdarzenia są niezależne, gdy wiedza o jednym nie zmienia szans drugiego, czyli P(A i B) = P(A) · P(B). To bardzo silne założenie, często milcząco przyjmowane: naiwny klasyfikator Bayesa zakłada niezależność słów w e-mailu, a wiele testów statystycznych zakłada niezależność obserwacji. Gdy jest fałszywe, wyniki bywają systematycznie przesadzone.

Ważne rozróżnienie: częstość w danych to nie to samo co prawdopodobieństwo. Odsetek z próby jest tylko oszacowaniem, obarczonym błędem losowym, który maleje wraz z liczebnością próby. Dla 10 obserwacji 30% może oznaczać prawdziwe 10% albo 60%; dla 10 000 obserwacji — już raczej nie.

Ostatnie zastrzeżenie dotyczy modeli: liczba wypluwana przez klasyfikator jest „prawdopodobieństwem” tylko z nazwy, dopóki nie sprawdzimy, czy wśród przypadków z wynikiem 0,8 rzeczywiście około 80% należy do klasy pozytywnej. Ta zgodność nazywa się kalibracją i wiele modeli jej nie ma.

Na przykładzie

Zbiór Titanic zawiera 891 pasażerów. Przeżyło 342 osoby, więc częstość przeżycia wynosi 342 / 891 = 0,384, a z reguły dopełnienia częstość śmierci to 0,616. Kobiet było 314 (0,352), a kobiet, które przeżyły — 233 (0,262). Reguła sumy przewiduje, że odsetek osób, które były kobietami lub przeżyły, wynosi 0,384 + 0,352 − 0,262 = 0,475. Bezpośrednie policzenie daje 423 osoby, czyli właśnie 0,475.

Czy płeć i przeżycie są niezależne? Gdyby były, odsetek kobiet, które przeżyły, wynosiłby 0,384 · 0,352 = 0,135. W danych jest prawie dwa razy więcej: 0,262. To liczbowy ślad zasady „najpierw kobiety i dzieci” — wiedza o płci mocno zmienia szanse przeżycia. Dokładnie to, ile zmienia, mierzy prawdopodobieństwo warunkowe.

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 częstość zdarzenia to średnia z kolumny logicznej: (df.sex == 'female').mean(); tabele łączne daje pd.crosstab(a, b, normalize=True).
  • Klasyfikatory scikit-learn zwracają prawdopodobieństwa przez predict_proba; sprawdzaj je krzywą kalibracji sklearn.calibration.calibration_curve.
  • Losowanie w NumPy: rng = np.random.default_rng(seed) i rng.random(), rng.choice; ustalony seed czyni eksperyment powtarzalnym.
  • Mnożąc wiele małych prawdopodobieństw, pracuj na logarytmach (suma log-prawdopodobieństw), inaczej wynik zaokrągli się do zera.
  • Typowy błąd: dodawanie prawdopodobieństw zdarzeń, które się nie wykluczają, bez odjęcia części wspólnej.

Najczęstsze pytania

Czym różni się prawdopodobieństwo od szansy (odds)?
Prawdopodobieństwo to p, szansa to p / (1 − p). Przy p = 0,75 szansa wynosi 3 do 1. Regresja logistyczna modeluje liniowo logarytm szansy, nie samo prawdopodobieństwo.
Czy zdarzenie o prawdopodobieństwie 0 jest niemożliwe?
Dla zdarzeń dyskretnych w praktyce tak. Dla zmiennych ciągłych nie: prawdopodobieństwo, że wzrost wyniesie dokładnie 175,000… cm, jest równe 0, a jednak ktoś ma jakiś konkretny wzrost. Dlatego dla zmiennych ciągłych mówi się o gęstości i przedziałach.
Czy wyniki `predict_proba` to prawdziwe prawdopodobieństwa?
Nie zawsze. Lasy losowe, SVM czy przetrenowane sieci często dają wyniki zbyt skrajne albo zbyt ostrożne. Trzeba je sprawdzić krzywą kalibracji i w razie potrzeby skalibrować (`CalibratedClassifierCV`).

Źródła

  • Kolmogorov, 1933, „Grundbegriffe der Wahrscheinlichkeitsrechnung”, Springer, Berlin.
  • Blitzstein, Hwang „Introduction to Probability”, 2nd ed., CRC Press, 2019, rozdz. 1.
  • Goodfellow, Bengio, Courville „Deep Learning”, MIT Press, 2016, rozdz. 3 (Probability and Information Theory).
  • Murphy „Probabilistic Machine Learning: An Introduction”, MIT Press, 2022, rozdz. 2.
  • Bishop „Pattern Recognition and Machine Learning”, Springer, 2006, rozdz. 1.2 (Probability Theory).

Zobacz też