Хотя я бы предпочел просто использовать математику для решения этого вопроса, есть способ приблизить желаемую вероятность с помощью симуляции Монте-Карло. Я разработал оба подхода здесь.
Подход Монте-Карло
Из того, что говорит нам ваш текст, составляют 47% девушек в населении 200 человек. , Таким образом, вы не должны использовать np.random.choise()
для получения населения, вместо этого вы должны сгенерировать набор из 200 человек со 106 мужчинами и 94 женщинами, где 0
представляет мужчину и 1
представляет женщину:
population = [0] * 106 + [1] * 94
Из этого набора вы должны выбрать случайным образом 24 человека:
subpopulation = np.random.choice(population, size=24)
Чтобы оценить число женщин в этом подмножестве, просто суммируйте массив с помощью:
female_count = np.sum(subpopulation)
Рассчитать общую вероятность наличия от 6 до 9 девочек при случайном выборе 24 человек из набора из 200 человек, повторить этот случайный тест несколько раз (например, N = 100000) и посчитать, как часто female_count
в диапазоне от 6 до 9:
import numpy as np
population = [0] * 106 + [1] * 94
N = 100000
count_in_range = 0
for _ in range(N):
subpopulation = np.random.choice(population, size=24)
female_count = np.sum(subpopulation)
if female_count in range(6, 10): # 10 is not included
count_in_range += 1
in_range_probabilty = count_in_range/N
print(f'p = {in_range_probabilty}')
Точный подход
Чтобы вычислить точную вероятность, просто используйте Биномиальное распределение , чтобы вычислить вероятности для этих 24 человек ровно 6 человек женского пола, 7 человек женского пола и т. д. и суммируют эти вероятности:
import scipy.special
p = 0.47
n = 24
p_exact = 0
for k in range(6,10):
p_exact += scipy.special.binom(n,k) * p**k * (1-p)**(n-k)
print(f'p_exact = {p_exact}')
Пример вывода:
p = 0.226853
p_exact = 0.22672292898157842
Обратите внимание, что результат * 10 33 * может варьироваться при разных прогонах, поскольку это генерируется случайным образом, тогда как p_exact
является математической точной вероятностью и остается неизменной все время.