python
February 3, 2022

Распределения случайных величин с Python

Для  исследования процессов из реальной жизни требуется  трансформировать их  в некие математические модели. Так, зачастую сами явления либо описывающие их параметры представляются в виде набора исходов с соответствующими им вероятностями осуществления. Например, это может быть время присутствия в социальной сети, количество отправленных сообщений или нанесенных ударов в ходе поединка, результаты голосования, а также параметры в модели.

На картинке ниже привожу основные виды распределений случайных величин с их параметрами (скриншот с лекции по ТВиМС):

Теперь  разберемся как распределения задаются в библиотеке SciPy (модуль scipy.stats, будем считать, что импортировали его под псевдонимом  stats):

1. Распределение Бернулли с параметром p: stats.bernoulli(p=p).
Полезно для моделирования распределения голосов в ходе опросов, предполагающих два ответа (да, нет или за и против):

2. Биномиальное распределение  с параметрами n и p: stats.binom(n=n,p=p).  Удобно для моделирования количества произошедших событий в серии  испытаний, например, лиц, поддержавших действующего Президента в ходе  опроса, либо количества неудачных попыток запуска ракеты-носителя из  всех:

3. Пуассоновское распределение с параметром mu>0: stats.poisson(mu=mu). Переменная  mu регулирует распределение, так что при ее увеличении  повышается  вероятность больших значений и, наоборот. Удобно для задания вероятности  неотрицательных целочисленных значений (например, количества нанесенных  в ходе поединка ударов либо направленных в течение дня сообщений):

4. Равномерное дискретное распределение на полуинтервале [low, high): stats.randint(low = low, high = high). Используется, когда нет оснований полагать, что  одно из значение обладает большей вероятностью, чем другие:

5. Равномерное распределение на отрезке [beg, beg+width]: stats.uniform(loc = beg, scale = width). Используется при полной неопределенности того, какое значение примет случайная величина на отрезке.

6. Нормальное распределение со средним loc и стандартным отклонением scale: stats.norm(loc=loc, scale = scale). Удобно для описания параметров, колеблющихся вокруг некоторого среднего значения (например, рост и вес человека):

7. Экспоненциальное распределение с параметром lambda_: stats.expon(scale=1/lambda_).  Как и случайная величина с пуассоновским распределением,  экспоненциальная переменная может принимать только неотрицательные  значения, но в отличие от первой не только целочисленные:

Существует еще ряд других часто употребляемых и более сложных распределений, о которых я расскажу в следующих статьях.