Биномиальное распределение
Сколько решек выпадет в 10 бросках монеты? Сколько из 100 посетителей купят товар? Это задачи для биномиального распределения.
Биномиальное распределение описывает число успехов в серии из n независимых испытаний, в каждом из которых успех случается с вероятностью p.
Когда оно применимо
Три условия биномиальной схемы:
- фиксированное число испытаний n;
- каждое испытание — «успех/неудача» (бросок монеты, купил/не купил);
- испытания независимы, вероятность успеха p одинакова.
Тогда число успехов X — биномиальная случайная величина с параметрами n и p.
Формула вероятности
Вероятность ровно k успехов: C(n, k) · p^k · (1−p)^(n−k), где C(n, k) — число способов выбрать k успешных испытаний из n. В Python C(n, k) — это math.comb.
from math import comb
def binom_pmf(k, n, p):
return comb(n, k) * p**k * (1 - p)**(n - k)
# 10 бросков честной монеты. Вероятность ровно 5 орлов
n, p = 10, 0.5
print("P(ровно 5 орлов):", round(binom_pmf(5, n, p), 4))
print("P(ровно 0 орлов):", round(binom_pmf(0, n, p), 4))
print("P(ровно 10 орлов):", round(binom_pmf(10, n, p), 4))
Вывод:
P(ровно 5 орлов): 0.2461 P(ровно 0 орлов): 0.001 P(ровно 10 орлов): 0.001
Ровно 5 орлов из 10 — самый вероятный исход (≈24.6%), а «все орлы» или «ни одного» — крайне редки (≈0.1%). Сумма вероятностей по всем k от 0 до 10 равна 1 — это полное распределение.
Вся таблица распределения
from math import comb
n, p = 10, 0.5
total = 0
for k in range(n + 1):
prob = comb(n, k) * p**k * (1 - p)**(n - k)
total += prob
print(f"{k:2} орлов: {prob:.4f} {'#' * round(prob * 100)}")
print("Сумма вероятностей:", round(total, 4))
Вывод:
0 орлов: 0.0010 1 орлов: 0.0098 # 2 орлов: 0.0439 #### 3 орлов: 0.1172 ############ 4 орлов: 0.2051 ##################### 5 орлов: 0.2461 ######################### 6 орлов: 0.2051 ##################### 7 орлов: 0.1172 ############ 8 орлов: 0.0439 #### 9 орлов: 0.0098 # 10 орлов: 0.0010 Сумма вероятностей: 1.0
Текстовая «гистограмма» наглядно показывает колоколообразную, симметричную (при p = 0.5) форму. При большом n биномиальное распределение всё сильнее напоминает нормальное — это не совпадение, а следствие ЦПТ из следующего урока.
Ожидание и разброс
Удобные формулы: ожидание биномиальной величины E = n·p, дисперсия = n·p·(1−p). Для 10 бросков честной монеты ожидаем 5 орлов. Проверим симуляцией.
import random
from statistics import mean
random.seed(8)
def trial(n, p):
return sum(1 for _ in range(n) if random.random() < p)
n, p = 10, 0.5
sims = [trial(n, p) for _ in range(100000)]
print("Среднее число орлов:", round(mean(sims), 3))
print("Теория n*p:", n * p)
Вывод:
Среднее число орлов: 4.999 Теория n*p: 5.0
Симуляция дала 4.999 при теоретических 5.0. Формула E = n·p работает: если конверсия сайта 3%, то из 1000 посетителей в среднем ожидаем 30 покупок (1000 · 0.03).
Итог
- Биномиальное распределение — число успехов в n независимых испытаниях с вероятностью p.
- P(k успехов) = C(n, k) · p^k · (1−p)^(n−k); в Python C(n,k) =
math.comb. - Ожидание E = n·p, дисперсия = n·p·(1−p).
- При большом n биномиальное распределение приближается к нормальному.