Что скрывает понятие вероятности
В этой статье изучим ключевые свойства понятия вероятности события, рассмотрим правильный подход к ее оценке и способы моделирования вероятности на языке Python. В общем случае вероятность события определяется как относительное количество его наступления в ходе большого набора испытаний (например, вероятность выпадения решки равна 0.6, если в 10000 испытаний она выпала 6000 раз).
Если испытаний мало, то говорить о вероятности некорректно (например, делать вывод о том, что она равна 0.5, если событие произошло в одном из двух испытаний). Для демонстрации этого ошибочного подхода смоделируем данные 5, 20 и 1000 подбрасываний монеты с истинной вероятностью выпадения решки 0.62. При этом каждый эксперимент проведем по три раза, чтобы отмечать изменение наблюдаемой вероятности от случая к случаю:
Код для вывода этого графика выглядит следующим образом:
import scipy.stats as stats
import numpy as np
import matplotlib.pyplot as plt
# количество подбрасываний
n = [5,20,1000]
# истинная вероятность
p = 0.62
fig, ax = plt.subplots(len(n),3, sharey=True)
for i,num in enumerate(n):
for j in range(3):
x = np.arange(0,num+1)
# количество успехов в схеме из n испытаний Бернулли
# имеет биномиальное распределение
s_kol = stats.binom(n=num, p=p).rvs()
# рисуем линию наблдаемой вероятности
ax[i,j].vlines(s_kol/num,0,0.2,label=f'количество выпадений\nрешки - {s_kol}')
ax[i,j].legend(loc='center left')
ax[i,j].yaxis.set_major_locator(plt.NullLocator())
ax[2,j].set_xlabel(f'эксперимент - {j}')
ax[i,0].set_ylabel(f'всего испытаний - {num}')
Отметим, что при малом количестве испытаний вероятность нестабильна (например, при 5 подбрасываниях вероятность выпадения решки меняется от 0.4 до 1 в зависимости от эксперимента). В противоположность этому при 1000 подбрасываниях в каждом из трех экспериментов она получилась равной примерно 0.62.
В жизни оценку вероятности следует постепенно корректировать по мере поступления данных и с учетом первоначальных догадок о ее величине. Например, перед проведением экспериментов по подбрасыванию монеты вы можете полагать, что вероятность выпадения решки может быть произвольным значением от 0 до 1 с одинаковой долей уверенности (равномерное распределение). Это называется априорной вероятностью, то есть до каких-либо экспериментов.
Ниже представлен график равномерного распределения:
Для его получения можно использовать следующий код:
import scipy.stats as stats
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-1,2,1000)
uni = stats.uniform(0,1)
plt.plot(x,uni.pdf(x))
Равномерное распределение используют, когда исследователь, не имея дополнительных сведений, придает одинаковую вероятность любому значению неизвестного параметра. Впоследствии, по мере наблюдения за данными, вероятность корректируется и ее называют апостериорной, так как она рассчитана уже с учетом полученных знаний. В соответствии с ранее показанной динамикой правдоподобности наблюдаемой вероятности при малом и большом количеством испытаний, степень такой коррекции также меняется от меньших значений к большим.
Ниже приведен график апостериорной вероятности выпадения решки при наблюдении ее выпадения в 60% случаев в ходе трех экспериментов по 5, 20 и 1000 подбрасываниям (априорную вероятность будем считать равномерной на отрезке от 0 до 1).
Код для вывода графика с комментариями приведен ниже:
params = [(5,3),(20,12),(1000,600)]
fig,ax=plt.subplots(3,1)
n=5; k=3
for i,pars in enumerate(params):
# значение апостериорной вероятности с точностью до множителя
# вычисляется как произведение априорной вероятности на правдоподобие
# априорное равномерное распределение выразили как stats.beta(1,1), а #правдоподобие как stats.beta(pars[1],pars[0]-pars[1])
# их произведение задали как stats.beta(1+pars[1],pars[0]-pars[1]+1)
# строго говоря, в апостериорном распределении не учтен множитель, но он для #всех значений вероятности одинаковый
# поэтому их соотношение сохранится
apost = stats.beta(1+pars[1],pars[0]-pars[1]+1)
ax[i].plot(x,apost.pdf(x))
ax[i].yaxis.set_major_locator(plt.NullLocator())
ax[i].set_ylabel(f'{pars[0]} подбрасываний')
ax[2].set_xlabel(f'наблюдаемая вероятность выпадения 0.6 во всех случаях')
Как и следовало ожидать, доля уверенности в истинном значении вероятности решки сильно меняется в зависимости от числа наблюдений (при малом их количестве мы не уверены в реальных значениях, а при большом - наоборот).
В вышеприведенном примере мы фактически нивелировали влияние априорной вероятности, положив ее равномерной. Вместе с тем, если бы мы на основании каких-либо первоначальных знаний могли полагать, что вероятность выпадения решки меньше вероятности выпадения орла, например, с таким априорным распределением (априорная вероятность решки около 0.375):
Если бы мы опять наблюдали при 5, 20 и 1000 подбрасываниях выпадение решки в 60% случаев, мы бы получили следующие результаты оценки апостериорной вероятности:
Таким образом, после первого эксперимента мы бы считали, что вероятность выпадения решки вблизи 0.46, после второго - 0.54, а после третьего - 0.6. То есть при большом количестве подбрасываний степень уверенности настолько растет, что априорная вероятность оказывает значительно меньшее влияние.
Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях: