Найти тему
Георгий Багаев

Дискретные случайные величины. Распределения в коде.

Функция вероятности в Python

По умолчанию в этом языке программирования не предусмотрена работа с вероятностными распределениями. Поэтому первым делом импортируем нужные функции из библиотеки SciPy.

# Импортируем в Python статистические функции.

from scipy import stats.

Для каждого распределения, в SciPy есть своё обозначение:

  • randint(a, b + 1) — U([a, b]);
  • bernoulli(p) — Bernoulli(p);
  • binom(n, p) — Binom(n, p);
  • geom(p) — Geometric(p);
  • poisson(mu) — Poisson(μ).

Эти распределения как раз и находятся в импортированном модуле stats. Например, распределение Бернулли в Python определяется как stats.bernoulli(p).

Основные распределения и их свойства
Основные распределения и их свойства

Пример№ 1

Пятеро друзей отдельно и независимо друг от друга решают, чем заняться завтра вечером:

  • пойти на вечеринку;
  • пойти в паб смотреть хоккей;
  • сидеть дома и грустить.

Каждый из друзей настолько не знает, чего хочет, что принимает решение наугад: описывает активности на бумажках и не глядя вытягивает одну.

Выведите вероятность, что только два друга встретятся завтра вечером в пабе.

Код:

from scipy import stats

n=5

p= 1/3

X = stats.binom(n, p)

x = 1

p = X.pmf(x)

print(p) # Сохраняем полученную вероятность в переменной p.

Результат: 0.3292181069958849.

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

Биноминальное распределение - это распределение вероятностей возможных чисел появления события А при n независимых испытаниях, в каждом из которых событие А может осуществиться с одной и той же вероятностью Р (А)= р = const. Кроме события А может произойти также противоположное событие Ā, вероятность которого Р (Ā)= 1 - р = q.

Чтобы вычислить вероятность значения X, то есть применить к значению функцию вероятности, нужен метод pmf(x). Это сокращение от английского probability mass function.

Функция вероятности в теории вероятностей — функция, возвращающая вероятность того, что дискретная случайная величина X примет определённое значение.

Пример№ 2

Костя — специалист по обеспечению качества продукции на производстве

ЖК-дисплеев. Он подсчитал, что в среднем 1 из 1000 дисплеев бракованный.

Выведите вероятность того, что при последовательной проверке деталей Костя встретит брак не раньше, чем на 501 проверке. Результат сохраните в переменной result.

Код:

from scipy import stats

p = 0.001

X = stats.geom(p)

# Зададим интересующее значение x.

x =500

# Сохраним результат в переменную F.

F = X.cdf(x)

result =1-F

# Выведем результат на экран.

print(result)

Результат: 0.606378944861185

Проверка дисплея — это испытание Бернулли. Последовательность проверок независимых друг от друга дисплеев — это серия испытаний Бернулли. Тогда номер проверки, на котором впервые встретится брак, подчиняется геометрическому распределению.

Под геометрическим распределением в теории вероятностей подразумевают одно из двух распределений дискретной случайной величины:

распределение вероятностей случайной величины X равной номеру первого «успеха» в серии испытаний Бернулли и принимающей значения n=1,2,3,...;

распределение вероятностей случайной величины Y=X-1 равной числу «неудач» до первого «успеха» и принимающей значения n=0,1,2,... .

Чтобы посчитать значение функции распределения, к случайной величине применяют метод cdf(x) — от английского cumulative distribution function.

функция распределения дискретной случайной величины X. Она определяет вероятность того, что X примет значение, не большее произвольного действительного числа x.

Пример№ 3

Среднее количество голов в любом матче чемпионата мира по футболу равно 2.5.

Считая, что это количество подчиняется распределению Пуассона, выведите список вероятностей для каждого возможного количества голов от 0 до 4 включительно.

Код:

from scipy import stats

import numpy as np

mu = 2.5

X = stats.poisson(mu)

x = np.array([0, 1, 2, 3, 4])

result = X.pmf(x)

print(result) # Сохраним полученный ответ в переменную result.

Результат

[0.082085 0.2052125 0.25651562 0.21376302 0.13360189]

Количество забитых мячей подчиняется распределению Пуассона с параметром μ=2.5. Остаётся применить соответствующую функцию вероятности для списка возможных значений количества голов.

Распределение Пуассона — распределение дискретного типа случайной величины, представляющей собой число событий, произошедших за фиксированное время, при условии, что данные события происходят с некоторой фиксированной средней интенсивностью и независимо друг от друга.

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

Но библиотека NumPy позволяет работать и с несколькими числами одновременно. Можно создать список значений и передать его функциям из SciPy. Функция применится покомпонентно, то есть к каждому значению по очереди. И мы получим новый список с результатами.

Для того чтобы , библиотеки numpy и SciPy заработали необходимо установить их сначала , командой pip install numpy и pip install SciPy, и убедитесь, что используете последнюю версию Python. Команды необходимо вводить в cmd.exe.

В других ОС, существуют подобные командные строки, я работаю в операционной системе Windows.

Чтобы запустить этот код в среде разработки Python нужно в меню выбрать пункт File->New File, в появившемся окне набрать код или скопировать его туда, проверить ошибки, в меню появившегося окна выбрать Run->Run Module, программа выполнится.

Вот-так, относительно просто можно найти вероятности для приведенных выше распределений в языке программирования Python.

Маленькая просьба, поставить лайк в Дзене, если Вам понравилась публикация и подписаться, это поможет развитию канала: https://dzen.ru/id/5f572502b7204709f04ab67c