Биномиальное распределение

Сколько решек выпадет в 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 биномиальное распределение приближается к нормальному.
Проверьте себя
1. Какое распределение описывает число успехов в n независимых испытаниях с вероятностью успеха p?
AРавномерное
BНормальное
CБиномиальное
DУсловное
2. Чему равно ожидаемое число успехов в биномиальном распределении?
An + p
Bn · p
Cp / n
Dn − p
3. Почему при 10 бросках монеты «ровно 5 орлов» — самый вероятный исход?
AПотому что 5 — половина от 10 и существует больше всего комбинаций дать ровно 5 успехов
BПотому что монета запоминает прошлые броски
CПотому что 5 орлов гарантированы
DЭто случайность расчёта
Поддержать проект