September 17, 2022
Биномиальное распределение с Python
Биномиальное распределение задает вероятности k успехов в схеме длины n. Его можно задать при помощи функции binom из модуля scipy.stats:
from scipy.stats import binom import seaborn as sns import numpy as np np.random.seed(0) n=5 p = 0.3 distr = binom(n, p) sns.histplot(distr.rvs(10000))
Также у нашего распределения distr есть методы:
- pmf - вероятность k успехов;
- cdf - вероятность, что произойдет не более k успехов;
- expect - математическое ожидание распределения;
- rvs - случайное значений из распределения.
distr.expect()
Для демонстрации использования перечисленных методов найдем вероятность пройти k собеседований из n, если вероятность пройти одно равна 0.3:
for k in range(0, n+1): print(f"Вероятность пройти {k} собеседований из {n} равна {distr.pmf(k)}")
Это же можно сделать вручную, так как каждая вероятность пройти в точности k собеседований - это число способов выбрать эти k собеседований из n (например, при k=1 - это 1 или 2, или 3, или 4, или 5), умноженное на вероятность последовательности - p^k*(1-p)^(n-k). Число способов считается как число сочетаний из n по k:
from math import factorial for k in range(0, n+1): p_k = factorial(n)/(factorial(k)*factorial(n-k))*p**k*(1-p)**(n-k) print(f"Вероятность пройти {k} собеседований из {n} равна {p_k}")
А так можно посчитать вероятность пройти хотя бы одно собеседование:
1 - distr.cdf(0)