February 3, 2021

Что скрывает понятие вероятности

В  этой статье изучим ключевые свойства понятия вероятности события,  рассмотрим  правильный подход к ее оценке и способы моделирования  вероятности на языке 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)]

x = np.linspace(-1,2,1000)

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. То есть при большом количестве подбрасываний степень уверенности  настолько растет, что априорная вероятность оказывает значительно меньшее влияние.

Не пропустите ничего интересного и подписывайтесь на страницы канала в других социальных сетях:

Instagram

Яндекс Дзен

Telegram