События, независимость и условная вероятность
Условная вероятность отвечает на вопрос «как меняется шанс события A, если мы узнали, что произошло B».
Условная вероятность P(A|B) — вероятность события A при условии, что событие B уже произошло:
P(A|B) = P(A и B) / P(B).
Комбинации событий: И, ИЛИ
События можно комбинировать. A и B — произошли оба. A или B — произошло хотя бы одно. Для «или» работает формула включения-исключения: P(A или B) = P(A) + P(B) − P(A и B) (вычитаем пересечение, чтобы не считать его дважды).
# Колода 52 карты. A = "карта червы", B = "карта-картинка (J,Q,K)"
cards = 52
hearts = 13 # P(черва) = 13/52
faces = 12 # J,Q,K в 4 мастях = 12
hearts_and_faces = 3 # J,Q,K червей = 3
P_A = hearts / cards
P_B = faces / cards
P_A_and_B = hearts_and_faces / cards
P_A_or_B = P_A + P_B - P_A_and_B
print("P(черва) =", round(P_A, 4))
print("P(картинка) =", round(P_B, 4))
print("P(черва И картинка) =", round(P_A_and_B, 4))
print("P(черва ИЛИ картинка) =", round(P_A_or_B, 4))
Вывод:
P(черва) = 0.25 P(картинка) = 0.2308 P(черва И картинка) = 0.0577 P(черва ИЛИ картинка) = 0.4231
Независимые события
Два события независимы, если наступление одного не меняет вероятность другого. Тогда вероятность их совместного наступления — просто произведение: P(A и B) = P(A)·P(B). Классика — броски монеты: результат второго не зависит от первого.
# Два независимых броска монеты
P_heads = 0.5
print("P(орёл и орёл) =", P_heads * P_heads) # 0.25
print("P(орёл, потом решка) =", P_heads * P_heads) # 0.25
# Три орла подряд
print("P(три орла подряд) =", P_heads ** 3) # 0.125
Вывод:
P(орёл и орёл) = 0.25 P(орёл, потом решка) = 0.25 P(три орла подряд) = 0.125
Условная вероятность меняет картину
Когда события зависимы, знание об одном меняет шансы другого. Бросаем кость; P(выпало 6) = 1/6. Но если нам сказали «выпало чётное» (это B), то осталось три варианта {2, 4, 6}, и P(6 | чётное) = 1/3 — шанс вырос! Формула: делим вероятность пересечения на вероятность условия. Проверим симуляцией.
import random
random.seed(7)
N = 600000
count_even = 0 # сколько раз выпало чётное (условие B)
count_six_given = 0 # из них — сколько раз именно 6 (событие A и B)
for _ in range(N):
d = random.randint(1, 6)
if d % 2 == 0: # чётное
count_even += 1
if d == 6:
count_six_given += 1
print("P(6 | чётное) ≈", round(count_six_given / count_even, 4))
print("Теоретически 1/3 =", round(1/3, 4))
Вывод:
P(6 | чётное) ≈ 0.3325 Теоретически 1/3 = 0.3333
Симуляция подтвердила: знание «чётное» подняло вероятность шестёрки с 1/6 до 1/3. Это и есть суть условной вероятности — обновление шансов в свете новой информации. На этой идее построен следующий урок про теорему Байеса.
Итог
- P(A или B) = P(A) + P(B) − P(A и B) — вычитаем пересечение.
- Независимые события: P(A и B) = P(A)·P(B); знание одного не меняет другое.
- Условная вероятность P(A|B) = P(A и B) / P(B) — шанс A при известном B.
- Условие может как повышать, так и понижать вероятность события.