Распределения случайных величин с 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_). Как и случайная величина с пуассоновским распределением, экспоненциальная переменная может принимать только неотрицательные значения, но в отличие от первой не только целочисленные:
Существует еще ряд других часто употребляемых и более сложных распределений, о которых я расскажу в следующих статьях.