Основы теории вероятностей и распределения вероятностей для случайной величины.
Биномиальное и нормальное распределения, распределение Пуассона.
Кумулятивная функция нормального распределения и обратная функция.
Аппроксимация одного распределения другим в определенных случаях
Вы уже знакомы с основами теории вероятностей и с понятием распределения вероятностей для случайной величины. Настало время познакомиться с распределениями, которые часто встречаются на практике.
Вы научитесь
понимать, как устроены биномиальное и нормальное распределения, а также распределение Пуассона;
работать с кумулятивной функцией нормального распределения и с обратной ей функцией;
определять случаи, когда одно распределение можно аппроксимировать другим.
Эксперимент Бернулли
Кратко:
Эксперимент Бернулли - это испытание с двумя исходами, например, отправка сообщения или выбор между двумя одинаково вкусными кормами.
Один из исходов называют успехом, а второй неудачей.
Вероятность успеха обозначают p, а вероятность неудачи равна 1 - p.
Распределение с двумя исходами часто называют схемой Бернулли.
График распределения Бернулли показывает вероятность успеха и вероятность неуспеха для каждого значения.
Практическое значение имеет не только эксперимент Бернулли, но и серия таких экспериментов
Часто встречаются эксперименты, в которых только два исхода. Например:
отправленное сообщение может быть открыто или нет;
студент может окончить онлайн-курс или забросить;
после посещения главной страницы интернет-магазина пользователь может зарегистрироваться в нём или нет;
коту предлагают два одинаково вкусных корма, и кот выбирает один из них.
Такое испытание с двумя исходами называют экспериментом (испытанием)Бернулли.
Обычно один из исходов называют успехом, а второй, соответственно, неудачей. Например, в эксперименте с отправкой сообщения успехом можно считать исход, когда сообщение открыто. В эксперименте со студентом успехом можно считать завершение онлайн-курса. Эксперимент Бернулли заканчивается или успехом, или неудачей — третьего не дано.
В какой из ситуаций описан не эксперимент Бернулли?
Выберите один вариант ответа из предложенных.
Урбанист исследует, как жители микрорайона добираются до работы. Эксперимент — наблюдение за рабочим днём конкретного жителя. Успех: житель микрорайона воспользовался общественным транспортом. Неудача: житель микрорайона не дождался общественного транспорта и заказал такси.
Наверняка есть и другие способы добраться до работы, например, можно пойти пешком или попросить коллегу подвезти. Нужно учитывать все возможные исходы эксперимента.
Вероятность успеха обычно обозначают p. По определению вероятности это значение лежит в диапазоне от 0 до 1. Вероятность неудачи равна 1−p, поскольку сумма вероятностей обоих исходов эксперимента равна единице. Например:
Если вероятность, что кот выберет корм с лососем, равна 50 %(p=0.5), то вероятность, что он выберет корм с тунцом, тоже равна 50 %(1−p=0.5).
Пусть вероятность, что пользователь зарегистрируется в интернет-магазине после того, как впервые откроет главную страницу, равна 10 %(p=0.1) Тогда вероятность, что пользователь не зарегистрируется, равна 90 %(1−p=0.9).
Распределение с двумя исходами часто называют схемой Бернулли.
Обычно единицей обозначают результат эксперимента, принятый за успех, а нулём — неудачу.
График распределения Бернулли выглядит так:
На графике у линии для значения 1 высота p — это вероятность успеха. Для значения 0 высотой линии задаётся вероятность неуспеха. У этого столбца высота 1−p.
Практическое значение имеет не только эксперимент Бернулли, но и серия таких экспериментов. Поговорим об этом в следующем уроке.
Биномиальный эксперимент
Кратко:
Биномиальный эксперимент - это эксперимент, в котором подряд проводят несколько одинаковых и независимых друг от друга испытаний Бернулли.
Примеры биномиальных экспериментов: пользователи кликают по баннеру, завод производит детали, питон в питон питомнике вырастает добрым или злым.
Расчёт вероятности определённого порядка успехов и неуспехов.
Вероятность того, что в биномиальном эксперименте успехи и неудачи произойдут в определённом порядке.
Вероятности исходов биномиального эксперимента с двумя испытаниями по схеме Бернулли.
Распределение вероятностей биномиального эксперимента с двумя испытаниями по схеме Бернулли
Биномиальный эксперимент — это эксперимент, в котором подряд проводят несколько одинаковых и независимых друг от друга испытаний Бернулли. Под независимостью понимают то же, что и в теории вероятностей: исход одного эксперимента не влияет на вероятности исходов другого.
Примеры биномиальных экспериментов:
Пользователи кликают по баннеру. Каждый пользователь может попасть по баннеру, а может промахнуться. Ситуацию каждого пользователя можно описать схемой Бернулли, все эксперименты одинаковы с равной вероятностью успеха. Попадания или промахи нескольких пользователей подряд — это серия одинаковых независимых испытаний Бернулли, а значит, биномиальный эксперимент.
Завод производит детали. Каждая деталь может оказаться бракованной или исправной — это эксперимент Бернулли. Количество бракованных деталей в партии — результат биномиального эксперимента.
Питон в питон питомнике вырастает добрым или злым — это испытание Бернулли. Если изучать душевные качества нескольких питонов, то получится биномиальный эксперимент.
Перейдём к вероятностям.
Расчёт вероятности определённого порядка успехов и неуспехов
Для начала посмотрим, как находить вероятности того, что в биномиальном эксперименте успехи и неудачи произойдут в определённом порядке. Например, в эксперименте с кликами пользователей — вероятность того, что из пяти независимо кликающих по баннеру пользователей первые три попадут по баннеру, а следующие двое промажут. В эксперименте с питонами это может быть вероятность того, что два первых питона из трёх будут добрыми, а последний — злым.
Найти эту вероятность нам поможет правило:
❕ Если события независимы, вероятность того, что они произойдут вместе, равна произведению их вероятностей.
В биномиальном эксперименте исходы независимы, значит, вероятность конкретной комбинации успехов и неудач равна произведению их вероятностей.
Рассмотрим пример с питонами. Пусть у нас есть три питона. Нас интересует вероятность того, что первые двое из них окажутся добрыми, а последний будет злым.
Будем считать успехом исход, в котором питон добрый. Обозначим вероятность успеха как p. Неудача — злой питон, вероятность неудачи равна 1−p. Тогда вероятность того, что первые два питона добрые, а последний злой, равна p⋅p⋅(1−p).
Перейдём к числам. Пусть вероятность того, что питон добрый, p=0.9, тогда вероятность того, что питон перешёл на тёмную сторону, равна 1−p=1−0.9=0.1. Вычислим вероятность комбинации «успех, успех, неудача»:
p = 0.9 # вероятность, что питон добрый
prob = p * p * (1 - p)
print(prob)
Вероятность, что в тройке питонов случится именно такой порядок: два первых добрых, а последний злой — чуть больше 8 %.
Вы узнали, как рассчитывать вероятность исхода биномиального эксперимента, в котором задан определённый порядок успехов и неудач. Теперь посмотрим, как рассчитывать вероятности в случае, если порядок неважен. Рассмотрим на простом примере — испытаний по схеме Бернулли всего 2.
Вероятности исходов биномиального эксперимента с двумя испытаниями по схеме Бернулли
Посмотрим на питонов в питонопитомнике. Вероятности оставим те же: питон вырастает добрым с вероятностью 90 %, питон переходит на тёмную сторону с вероятностью 10 %.
Правильный ответ
0.9⋅0.1⋅2=0.18=18 %
Здесь подойдут два исхода: «Первый злой, а второй добрый» и «первый добрый, а второй злой». Вероятности этих исходов одинаковы, поэтому просто умножаем одну из них на 2.
Проверим результат задачи с помощью вероятностного пространства всех исходов.
Вероятностное пространство такого эксперимента состоит из четырёх исходов — «добрый, добрый», «добрый, злой», «злой, добрый», «злой, злой», — и его можно отобразить так:
...или с помощью дерева:
Нам подходят два исхода: «добрый-злой» и «злой-добрый» — и не подходят тоже два исхода: «оба добрые» и «оба злые». Вычислим вероятность неподходящих исходов. Вероятность исхода «оба добрые» равна 0.92=0.81, «оба злые» равна 0.12=0.01. Вероятность всех неподходящих исходов равна 81 %+1 %=82 %. На подходящие комбинации остаётся 18 %. Тот же результат, что и в задании!
Если бы задача звучала так: «Какова вероятность, что первый питон злой, а второй — добрый?» — то решением был бы всего один исход. Учитывать комбинации «злой-добрый» и «добрый-злой» было бы не нужно: достаточно умножить 0.1 на 0.9, чтобы получить ответ.
Правильный ответ
6.25 %
Всего один исход: пара зеленоглазых питонов. Его вероятность равна 0.25 в квадрате — то есть 0.0625, или 6.25 %.
В прикладных задачах, связанных с повторением эксперимента по схеме Бернулли, чаще всего конкретный порядок неважен. Полезно найти вероятность того, что случится какое-то количество «успехов» из заданного числа экспериментов. Например: вероятность того, что три любых пользователя из пяти кликнут по баннеру, или вероятность того, что два питона из трёх будут добрыми, и неважно, какие по счёту.
Вы научились считать вероятности исходов для биномиального эксперимента с двумя испытаниями по схеме Бернулли. Значит, теперь можно построить для него распределение вероятностей.
Распределение вероятностей биномиального эксперимента с двумя испытаниями по схеме Бернулли
В задачах с биномиальным экспериментом определяют случайную величину «количество успехов» и строят для неё распределение вероятностей.
Например, в задаче о злых и добрых питонах случайная величина «количество злых питонов из двух выбранных случайно» принимает значения 0, 1 или 2. Чтобы построить её распределение вероятностей, нужно:
зафиксировать значение случайной величины;
определить количество исходов, которые приводят к такому значению случайной величины;
рассчитать вероятность одного исхода с нужным количеством успехов;
домножить значение из п.2 на вероятность из п.3.
Для случайной величины «количество злых питонов из двух выбранных случайно» получится такая таблица:
Значение
0
1
2
Вероятность
81 %
18 %
1 %
Другой пример. В задаче о цвете глаз питонов определим случайную величину «количество питонов с зелёными глазами из двух выбранных случайно». Вероятность успеха, то есть зелёного цвета глаз, равна 25%. Случайная величина также принимает значения 0, 1 или 2 и имеет распределение вероятности:
Значение
0
1
2
Вероятность
56.25 %
37.5 %
6.25 %
Проверим расчёты:
Вероятность, что оба питона будут с зелёными глазами, равна 0.25^2=0.0625=6.25 %.
Вероятность, что цвет глаз у обоих питонов голубой, равна 0.75^2=0.5625=56.25 %.
Вероятность, что один с зелёными, а другой с голубыми: 0.25⋅0.75⋅2=37.5 %.
В сумме получаем единицу — значит, это корректное распределение вероятностей.
В этом уроке вы познакомились с идеей биномиального эксперимента и научились считать вероятности событий для двух испытаний по схеме Бернулли. В следующем уроке перейдём к более сложным случаям и построим распределение вероятностей для произвольного количества испытаний Бернулли и произвольного количества успехов.
Биномиальное распределение
Кратко:
Биномиальное распределение используется для расчета вероятностей исходов эксперимента Бернулли.
В статье рассматривается пример с тремя испытаниями Бернулли и вычисление вероятности события.
Вероятность произвольного числа успехов из произвольного числа повторений испытания Бернулли вычисляется по формуле.
Биномиальное распределение строится с использованием двух параметров: количества попыток n и вероятности успеха p.
Вероятности каждого возможного числа успехов находятся по формуле.
Математическое ожидание и дисперсия для распределения вычисляются по коротким формулам.
Приведены примеры графиков биномиальных распределений для разных значений n и p.
В задаче 1 рассматривается пример с важным мероприятием и поиском инфопартнеров.
В задаче 2 рассматривается пример с питоноакадемией и подготовкой к экзаменам
В предыдущем уроке мы рассчитывали вероятности исходов, когда эксперимент Бернулли проводится дважды. В этом уроке перейдём к более сложным ситуациям.
План такой:
Рассмотрим ситуацию с экспериментом из трёх испытаний Бернулли.
Обобщим подход на произвольное количество.
Построим биномиальное распределение для любого количества испытаний Бернулли и любого возможного количества успехов.
Биномиальный эксперимент с тремя испытаниями Бернулли
Вспомним питонопитомник. В прошлом уроке было два питона, для них всего четыре исхода в вероятностном пространстве. Варианты можно было перебрать в уме. Когда экспериментов больше, посчитать возможные комбинации сложнее. Но с тремя справимся.
Возьмём трёх случайных питонов и посмотрим на их душевные качества.
8
Существует восемь разных комбинаций доброты всех трёх питонов, то есть способов пройти по дереву на иллюстрации сверху вниз.
На дереве видно, что разных вариантов комбинаций добрых и злых питонов стало больше. Есть крайние случаи: «все питоны злые» и «все питоны добрые», — для них всё легко. Это крайняя правая и левая ветви дерева вероятностей: есть только по одному варианту получить такой набор. С другими комбинациями немного сложнее. Вот, например, варианты для комбинации «два питона добрые, а один злой»:
Комбинацию исходов «два питона добрые, а один злой» можно получить тремя способами:
«злой, добрый, добрый»;
«добрый, злой, добрый»;
«добрый, добрый, злой».
Найдём вероятность этой комбинации. Вероятности для каждого питона вырасти добрым или злым оставим прежними: 0.9 и 0.1 соответственно.
Душевные качества питонов независимы. Чтобы вычислить вероятность каждого варианта, перемножим вероятности успехов и неудач:
P(злой,добрый,добрый)=0.1⋅0.9⋅0.9=0.081
P(добрый,злой,добрый)=0.9⋅0.1⋅0.9=0.081
P(добрый,добрый,злой)=0.9⋅0.9⋅0.1=0.081
Получается, в событие «два питона добрые, а один злой» входят три исхода, вероятность каждого из которых равна 8.1 %.
Чтобы получить вероятность всего события «два питона добрые, а один злой», нужно сложить вероятности исходов, входящих в него. Вероятности исходов равны, так что просто умножим одну на их количество: 0.081⋅3=0.243=24.3 %
Значит, вероятность, что из трёх питонов два добрые, а один злой — чуть меньше 25 %.
Посмотрим ещё раз на расчёт:
Эксперименты независимы, поэтому для конкретного числа добрых питонов из трёх вероятности каждой комбинации одинаковы: мы перемножаем одни и те же числа, просто в разном порядке.
Три разных пути получения двух добрых питонов из трёх на иллюстрации выше — это три способа выбрать одного злого питона из трёх. Это же количество сочетаний из трёх по одному! Вспомните формулу сочетаний из темы «Комбинаторика»:
Cnk=n!/k!(n−k)! C31 как раз и равно трём. Кстати, можно выбирать не одного злого питона из трёх, а двух добрых из трёх — как можно предположить, комбинаций будет столько же. В таком случае получится C32. Оно тоже равно трём
Мы рассмотрели пример с тремя подряд экспериментами Бернулли. Обобщим изученное.
Вероятность произвольного числа успехов из произвольного числа повторений испытания Бернулли
Пусть мы провели n экспериментов по схеме Бернулли, вероятность успеха в которой равна p. Нас интересует вероятность получить k успехов (k<n). Действуем по той же схеме, что и для двух и трёх экспериментов. Получаем такой алгоритм:
Чтобы найти вероятность получить k успехов из n экспериментов по схеме Бернулли, надо:
Перемножить вероятности всех успехов и неудач. Каждый исход состоит из k успехов и n−k неудач. Вероятность успеха равна p, всего их k штук, значит, вероятность всех успехов равна pk. Вероятность неудачи равна 1−p, всего их n−k штук, значит, вероятность всех неудач (1−p)n−k. Получаем вероятность исхода с k успехами из n испытаний: pk⋅(1−p)n−k.
Вычислить число исходов, которые приведут к нужному событию. Это число сочетаний из n по k.
Перемножить количества из п. 1 и п. 2.
Запишем в виде общей формулы:
P(k успехов из n попыток)=C(n)(k)⋅p(k)⋅(1−p)^(n−k).
Магазин отправляет VIP-клиентам письмо со специальным предложением. Каждое отправленное письмо — испытание с двумя исходами:
клиент открыл письмо — успех;
клиент не открыл письмо — неудача.
Аналитики магазина выяснили, что обычно VIP-клиенты открывают 20 % отправленных им писем, то есть вероятность успеха равна 0.2. Тогда вероятность неудачи по схеме Бернулли равна 1−0.2=0.8.
Допустим, магазин отправляет 10 писем, то есть n=10.
Посчитаем вероятность того, что будут открыты два письма из десяти:
Вероятность двух успехов равна 0.22, вероятность восьми неудач равна 0.88, количество подходящих исходов равно C(10)(2). Получаем:
P(открыто 2 из 10 писем)=C(10)(2)⋅0.2^2⋅0.8^(10−2)=10!/8!2!*0.2^2⋅0.8^8≈0.302.
Вероятность двух успехов из десяти испытаний Бернулли — чуть выше 30 %.
Правильный ответ
C(10)(0)⋅0.8^10
Количество успехов — 0, их вероятность равна 0.20. Любое число в нулевой степени равно единице, так что множитель можно опустить. Количество неудач равно 10. Значит, их вероятность равна 0.8^10. Всего возможно C(10)(0) вариантов. Составим произведение, получим: C(10)(0)*0.8^10
Биномиальное распределение
Часто исследователей интересует вероятность не конкретного числа успехов, а интервала. Например, какова вероятность, что:
Из десяти писем откроют больше шести?
В партии из ста лампочек будет меньше двух бракованных?
Из семи питонов добрыми окажутся от двух до пяти?
Чтобы ответить на эти вопросы, нужно построить распределение, то есть найти вероятности для любого возможного количества успехов.
💡 Случайная величина распределена биномиально, если:
Проводится фиксированное число попыток n.
Каждая попытка — простой эксперимент Бернулли ровно с двумя исходами.
Вероятность успеха p одинакова для всех n попыток.
Попытки независимы между собой.
Если все эти условия выполняются, можно построить биномиальное распределение, то есть найти вероятности каждого возможного числа успехов по приведённой выше формуле.
Правильный ответ
Спортсмен участвует в соревнованиях по стрельбе. У него 55 попыток, каждый раз он или попадает по мишени, или нет. Судьи считают количество попаданий.
Каждая попытка — испытание Бернулли. Попытки повторяются, и они независимы. Значит, это биномиальное распределение!
Правильный ответ
Количество сообщений в почте, которые программа за день отнесла к спаму.
Каждое письмо может быть спамом или не быть им. Программа оценивает письма независимо друг от друга. Это повторяющиеся независимые друг от друга испытания Бернулли. Значит, случайную величину можно описать биномиальным распределением.
Чтобы определить биномиальное распределение, нужны два параметра: количество попыток n и вероятность успеха p.
Мы рассматриваем случайную величину «количество успехов из nn попыток» и находим вероятность каждого возможного числа успехов: от 00 до nn. Получаем такое распределение вероятностей:
Значения (количество успехов)
0
1
…
n
Вероятности
C(n)(0)⋅p^0⋅(1−p)^n
C(n)(1)⋅p^1⋅(1−p)^(n−1)
…
C(n)(n)⋅p^n⋅(1−p)^0
Зная вероятности всех значений, можно рассчитать математическое ожидание и дисперсию для распределения. Для биномиального распределения формулы получаются короткими: мат.ожидание равно n⋅p, а дисперсия n⋅p⋅(1−p). По мат.ожиданию легко судить каким будет самое вероятное значение — это самое близкое к n⋅p число. Это видно и на графиках.
Графики биномиальных распределений
Приведём несколько примеров для разных n и p.
По горизонтальной оси отложим возможное число успехов, а по вертикальной — вероятность соответствующего исхода. Всего может случиться от 0 до n успехов, то есть возможен n+1 вариант.
Сначала рассмотрим случай, когда вероятность успеха равна вероятности неудачи (обе равны 50 %). В такой ситуации график распределения будет симметричным. Проверим это с помощью Python. Допустим, эксперимент повторили 5 раз, то есть n=5, и вероятность успеха равна 50 % на каждом повторении, то есть p=0.5
from matplotlib import pyplot as plt
from math import factorial
n = 5 # количество попыток
p = 0.5 # вероятность успеха
distr = []
for k in range(0, n + 1):
choose = factorial(n) / (factorial(k) * factorial(n - k))
Результат
График действительно симметричный.
Теперь построим график для n=25 и p=0.5:
from matplotlib import pyplot as plt
from math import factorial
n = 25 # количество попыток
p = 0.5 # вероятность успеха
distr = []
for k in range(0, n + 1):
choose = factorial(n) / (factorial(k) * factorial(n - k))
Этот график тоже симметричный.
Перейдём к случаю, когда вероятность успеха не равна 50 %. Если n при этом не слишком велико, распределение получается скошенным. В какую именно сторону скошен график — зависит от вероятности успеха. Если она маленькая, то скошенность будет вправо; если большая — влево. Посмотрим на примерах.
Построим график для n=30 и p=0.07:
from matplotlib import pyplot as plt
from math import factorial
n = 30 # количество попыток
p = 0.07 # вероятность успеха
distr = []
for k in range(0, n + 1):
choose = factorial(n) / (factorial(k) * factorial(n - k))
График показывает, что при вероятности успеха pp, равной 7 %, и 30 попытках вероятность, что случится больше 8 успехов, крайне мала.
Посмотрим как выглядит график для n=26 и p=0.9
В коде ниже мы используем метод binom.pmf() из модуля scipy.stats. Он помогает получить вероятности биномиального распределения. Готовый метод даёт тот же результат и заодно сокращает код.
Аббревиатура PMF расшифровывается как probability mass function — функция для дискретных распределений, которая показывает вероятность каждого значения.
from matplotlib import pyplot as plt
from scipy.stats import binom
n = 26 # количество попыток
p = 0.9 # вероятность успеха
distr = []
for k in range(0, n + 1):
current_value = binom.pmf(k, n, p)
distr.append(current_value)
plt.bar(range(0, n + 1), distr)
Если вероятность успеха в каждом испытании равна 90 % то с высокой вероятностью мы получим много успехов в серии испытаний. Например, при 26 попытках практически всегда количество успехов будет больше 17.
Теперь потренируйтесь на задачах.
Задача 1
Компания устраивает важное мероприятие. Пиарщики предлагают осветить его в СМИ и ищут хотя бы 6 инфопартнёров. По опыту, соглашается примерно одно из 5медиа, с которыми начинают переговоры. Пиарщики предлагают начать переговоры с 6⋅5=30 медиа. Постройте распределения вероятностей и гистограммы для случайной величины «количество инфопартнёров», если переговоры начали с 30 медиа.
from matplotlib import pyplot as plt
from math import factorial
p = 0.2 # напишите ваш код здесь: какова вероятность заключить контракт?
n = 30 # напишите ваш код здесь: со сколькими компаниями начинаем переговоры?
# напишите ваш код здесь: создайте список distr, в котором будете хранить значения распределения
distr = []
for k in range(0, n + 1):
# напишите ваш код здесь: постройте распределение вероятностей
choose = factorial(n) / (factorial(k) * factorial(n - k))
prob = choose * p**k * (1 - p)**(n - k)
distr.append(prob)
# напишите ваш код здесь: постройте гистограмму распределения вероятностей
plt.bar(range(0, n + 1), distr)
Если начать переговоры с 30 медиа, то 6 — наиболее вероятный результат. Однако слишком велика вероятность, что успехов будет меньше. На гистограмме видно, что в диапазоне от 0 до 5 успехов примерно половина всего распределения. Риск неприемлемо велик.
А если начать переговоры с 45 медиа? Построим распределение вероятностей для биномиальной случайной величины с p=0.2 и n=45:
Когда потенциальных партнёров 45, то ситуация улучшается. Если сложить вероятности от 0 до 5 успехов, то в интервале от 0 до 5 всё ещё почти 10 % — в каждом десятом случае вам грозит недобор партнёров.
Увеличим количество потенциальных инфопартнёров до 60:
from matplotlib import pyplot as plt
from math import factorial
p = 1/5
n = 60
distr = []
for k in range(0, n + 1):
choose = factorial(n) / (factorial(k) * factorial(n - k))
prob = choose * p**k * (1-p)**(n-k)
distr.append(prob)
plt.bar(range(0, n + 1), distr)
Если начать переговоры с 60 медиа, риск получить меньше 6 партнёров совсем мал, около 1 %. Как видно, если нужно шесть инфопартнёров и соглашается каждое пятое СМИ, недостаточно переговоров с 6⋅5=30 медиа. Вам (и пиарщикам тоже!) нужно понимать, как распределена вероятность для разного количества успехов. Тогда получится верно оценить необходимый охват и начать переговоры с минимальным количеством медиа — таким, чтобы вероятность не найти нужное число инфопартнёров не была слишком высокой.
Пока пиарщики переводят дух, вернёмся в питонопитомник.
Задача 2
Питон Петя решил после питонопитомника поступить в питоноакадемию. Для этого ему надо сдать шесть разных (не зависящих друг от друга) экзаменов. Петя думает, что он отлично подготовился: вероятность завалить каждый из этих экзаменов, судя по пробным вариантам, для него равна 15 %.
Постройте распределение вероятностей для случайной величины «количество заваленных Петей экзаменов» и гистограмму для неё.
from matplotlib import pyplot as plt
from math import factorial
n_exams = 6 # напишите ваш код здесь: сколько экзаменов надо сдать?
failure_rate = 0.15 # напишите ваш код здесь: какова вероятность завалить один экзамен?
distr = [] # создайте список distr, в котором будете хранить значения распределения
for k in range(0, n_exams + 1):
# посчитайте кол-во вариантов выбрать k из n_exams
choose = factorial(n_exams) / (factorial(k) * factorial(n_exams-k))
# посчитайте вероятность
prob = choose * failure_rate**k*(1-failure_rate)**(n_exams-k)
# добавьте очередную вероятность prob в список distr
distr.append(prob)
# построение гистограммы распределения вероятностей
plt.bar(range(0, n_exams + 1), distr)
Казалось бы, вероятность прохождения экзамена в 85 % должна вселять уверенность. Но оказывается, что при n=6 и p=0.15 вероятность завалить один экзамен выше, чем вероятность не завалить ни одного. А если сравнить вероятность не завалить ни одного с вероятностью завалить хотя бы один (то есть один или больше), получаем, что с вероятностью более 60 % хотя бы один экзамен будет не пройден (видно, что вероятность нуля меньше, чем 40 %). Выходит, 85 % успехов недостаточно и надо готовиться лучше.
Непрерывное равномерное и нормальное распределения
Кратко:
В статье обсуждаются непрерывные случайные величины и их распределения. - Непрерывное равномерное распределение: случайная величина принимает любые значения на определённом промежутке или даже на всей числовой прямой. - Непрерывное равномерное распределение задаётся функцией плотности вероятности. - Нормальное распределение: среднее и дисперсия определяют параметры нормального распределения. - Правило трёх сигм: почти 100% значений попадают в пределы трёх стандартных отклонений от математического ожидания. - Сравнение распределений: непрерывное равномерное и нормальное распределения имеют свои сходства и различия
В теме «Случайные величины» мы обсуждали, что для дискретной случайной величины распределение вероятностей задаётся таблицей. В этой таблице указываются все возможные значения этой случайной величины и вероятность каждого из них:
Значения
x1x1
x2x2
…
xmxm
Вероятности
p1p1
p2p2
…
pmpm
А что насчёт непрерывных случайных величин? Для них сложно составить такую таблицу, ведь эти случайные величины принимают любые значения на определённом промежутке или даже на всей числовой прямой.
Для таких величин задают функцию плотности вероятности, по которой можно рассчитать вероятность того, что случайная величина попадёт в нужный промежуток. Плотность вероятности в этом смысле аналогична плотности частоты при построении гистограммы: площадь под графиком над выбранным интервалом равна вероятности того, что случайная величина попадёт в этот интервал.
Посмотрим, как это выглядит и работает на примерах.
Непрерывное равномерное распределение
Простейший пример непрерывной случайной величины — непрерывная случайная величина с равномерным распределением между числами a и b. Назовём её X. Пишут X∼U[a,b] (англ. Uniform — равномерный).
Обычно равномерным распределением описывают процессы, о которых мало информации или в целом нет причин предполагать сложную зависимость. Например:
10-метровый провод повреждён, но в какой именно точке — неизвестно. Видно, что на первых двух метрах всё в порядке, как и на последних трёх. Оставшаяся средняя часть провода скрыта за плинтусом. У электрика нет более точной информации о местоположении повреждения, то есть оно с равной вероятностью может располагаться в любом месте скрытого промежутка. Поэтому подходит равномерное распределение с a=2 и b=10−3=7. Значит, здесь X∼U[2,7].
Николай ждёт звонка с 13:30 до 15:00. Звонок происходит в случайный момент, то есть с равной вероятностью от начала периода может пройти любое время. Здесь X∼U[13.5,15].
Турист ждёт поезд в метро. Турист не знает города, поэтому считает, что поезда приходят в случайное время. По разговорам людей турист понял, что поезд в метро всегда приходит в течение 3 минут. Он с равной вероятностью может прождать любой промежуток времени до 3 минут. Здесь X∼U[0,3].
График плотности вероятности для XX будет выглядеть так:
Функция плотности вероятности для непрерывного равномерного распределения равна нулю везде, кроме отрезка [a,b]. На отрезке [a,b] она равна 1/(b−a), потому что общая площадь под графиком должна быть равна 1. Аналогичное верно и для дискретных распределений: сумма вероятностей всех значений должна быть равна 1.
Проверим, что площадь под функцией плотности вероятности для непрерывного равномерного распределения равна 1. Эта площадь равна площади прямоугольника с длиной, равной длине отрезка [a,b], и высотой, равной 1/(b−a). Получаем: (b−a)⋅1/(b−a)=1, что и было нужно!
Используем функцию плотности вероятности, чтобы найти вероятность того, что XX попадёт в конкретный интервал. Рассмотрим задачу.
Программист Никита решает рабочую задачу за время от двух до пяти часов, причём с одинаковой вероятностью на случайную задачу он тратит любое время из этого промежутка и никогда — меньше двух или больше пяти часов. Значит, это равномерное распределение с a=2 и b=5, то есть X∼U[2,5].
Вычислим 1/(b−a) при таких aa и b:1/(5−2)=1/3. Значит, график плотности вероятности выглядит так:
Определим, чему равна вероятность того, что Никита потратит на решение следующей задачи из бэклога от двух до четырёх часов? Вероятность того, что X попадёт в интервал [2,4], равна площади под графиком над этим отрезком:
Значит, искомая вероятность равна площади закрашенного прямоугольника. Вычислим её: (4−2)⋅1/3=2/3. Значит, вероятность того, что XX попадёт в интервал [2,4], равна 2/3. С этой вероятностью Никита управится со следующей задачей за период от 2 до 4 часов.
Напомним немного про обозначения промежутков. То, что величина X лежит в интервале от 2 до 4, можно записать разными способами: 2≤X≤4 или X∈[2,4]. Это равнозначные обозначения. Их используют и для записи вероятностей. Например, вероятность того, что случайная величина X попадёт в промежуток, можно записать как P(X∈[2,4]). Как мы только что выяснили, P(X∈[2,4])=2/3.
1/2
(a+b)/2 — середина отрезка [a,b] для любых a и b. Следовательно, мы ищем вероятность для половины прямоугольника. Раз площадь всего прямоугольника равна 1, то площадь его половины равна 1/2
Мы рассказали про непрерывное равномерное распределение. График его функции плотности вероятности простой, и он помогает наглядно проиллюстрировать, как с помощью этой функции найти вероятность, что случайная величина попадёт в интервал. Как вы увидели, для этого нужно вычислить площадь под графиком функции плотности вероятности над этим интервалом.
Далее мы перейдём к более сложным функциям плотности вероятности. Основная идея расчётов останется той же: площадь под её графиком равна вероятности.
Нормальное распределение
Многие случайные величины распределены так:
Средние значения и значения около них встречаются с высокой вероятностью.
Чем дальше от среднего, тем меньше вероятность встретить такое значение.
Вероятность очень маленьких или очень больших значений мала, но есть.
Например, рост взрослых людей практически всегда следует этой закономерности. В мире много людей среднего роста и людей с ростом, незначительно отличающимся от среднего. Низких и высоких людей меньше. Очень низких и очень высоких людей совсем мало, но нет-нет, да и встречаются такие. Этот пример хорошо иллюстрирует фотография ниже. На ней расставлены по росту студенты одного из колледжей.
Фотография расставленных по интервалам роста шириной в 1 дюйм 175 студентов одного из колледжей (Blakeslee, 1914)
На фотографии видно, что большинство студентов — среднего роста. Количество студентов с ростом выше или ниже среднего значения постепенно уменьшается по мере отдаления от среднего.
Другой пример — урожайность яблонь в саду. Большинство яблонь плодоносят средне, то есть имеют урожайность, которая немного отличается от среднего значения. Яблонь, которые плодоносят совсем плохо или удивительно хорошо, — мало, но нет-нет, да и впечатлит какое-то дерево.
Ещё пример. Мясокомбинат производит котлетки. По нормам, масса одной котлетки должна быть 50 граммов. Из-за погрешностей приборов или небольших отклонений в ингредиентах фактическая масса каждой котлетки может отличаться от нормы. Большинство котлеток будут иметь массу около нормы. Значительные отклонения от среднего маловероятны, и чем больше отклонение, тем менее оно вероятно. И всё же полуфабрикаты необычных размеров иногда попадаются в упаковке.
В мире много и других случайных величин с таким распределением. Если нарисовать это распределение, получится похожая на колокол кривая. Поэтому форму распределения иногда называют колоколообразной.
Формально такое распределение называется нормальным, оно описывает непрерывные случайные величины, и график его плотности вероятности выглядит так:
Конечно, оно построено таким образом, чтобы площадь под всей кривой была равна 1.
Почему многие величины имеют нормальное распределение?
Природу нормального распределения можно объяснить теоремой, которая неформально звучит так: «Много одинаковых независимых случайных величин, сложенных вместе, дают близкое к нормальному распределение».
Другими словами, на случайную величину влияет множество факторов. Их сложно учесть, и ни один из них не вносит решающий вклад. Но в итоге в сумме они создают нормальное распределение.
Конечно, не только нормальное распределение описывает наблюдаемые в реальном мире величины, но в силу этой теоремы оно встречается очень часто.
Почему распределение из теоремы подходит для описания множества реальных переменных? Это философский вопрос. Математик Анри Пуанкаре писал так: «Теоретики полагают, что это эмпирический факт, а эмпирики думают, что это доказанная теорема». Не самое полное объяснение, но ничего лучше пока не придумали.
Параметры нормального распределения
Нормальное распределение определяют два параметра — среднее и дисперсия:
X∼N(μ,σ^2)
Эту запись читают так: переменная X распределена нормально со средним мю (μ) и дисперсией сигма в квадрате (σ²), то есть стандартным отклонением сигма. μ также называют математическим ожиданием X.
На графике параметры можно отобразить так:
Например, автомат по производству конфет запрограммирован выдавать конфеты массой в три грамма. Но из-за небольших изменений в давлении внутри автомата и в составе смеси, из которой делаются конфеты, возможны небольшие отклонения в большую или в меньшую сторону. Чем дальше отклонение от 3 грамм, тем меньше его вероятность. Производитель автомата сообщает, что стандартное отклонение массы конфет составляет 0.3 грамма.
Массу конфет можно смоделировать как случайную величину L, имеющую нормальное распределение с указанными параметрами: L∼N(3,0.32). Отобразим плотность вероятности L на графике:
Обратите внимание на обозначения. Случайную величину мы называли заглавной буквой — L, а ось обозначили маленькой l. Принято сами случайные величины обозначать заглавными буквами, а их конкретные значения — строчными. Случайная величина L может принять значения l(0)=3 или l(1)=4.
Вероятности попадания в интервал
Имея распределение, можно рассчитать вероятность, что масса случайной конфеты окажется, например, между 2.5 и 3.5 граммами. Такая вероятность — это площадь под кривой между этими значениями:
По графику видно, что закрашенная площадь явно больше половины всей площади под кривой. Значит, масса конфеты скорее попадёт в этот интервал, чем нет.
Видно, что, скорее всего, вес конфеты окажется близким к 3. Поэтому, собственно, параметр μ=3 и называется математическим ожиданием.
Интервал может быть и бесконечным. Например, можно посчитать, какова будет вероятность, что вес конфеты окажется больше, чем 3.4 грамма. Эта вероятность равна соответствующей площади на графике:
Такой график ещё называют «хвостом» распределения. На иллюстрации изображён правый «хвост».
Видно, что вероятность того, что вес конфеты окажется меньше 2 или больше 4, очень мала. А вероятность того, что вес конфеты окажется меньше 1.5 или больше 4.5, практически равна нулю.
В следующих уроках вы научитесь рассчитывать вероятности для попадания нормально распределённой случайной величины в любой интервал. А сейчас разберёмся, как будет вести себя график плотности вероятности при изменении μ и σ.
Изменение параметров нормального распределения
Параметры μ и σ задают нормальное распределение, а значит, и вид его графика.
Изменение параметра μ сдвигает колокол влево или вправо.
Посмотрите ещё раз на вертикальные линии на иллюстрации — целые значения σ, отложенные от μ. Проценты между ними — вероятность попадания случайной величины в интервалы между линиями. К примеру, если вес песчинки распределён нормально со средним в 900 микрограмм и стандартным отклонением 200 микрограмм, то вероятность, что он окажется в пределах от 1100 до 1300 микрограмм, примерно равна 13.6 %. Задайте на иллюстрации эти параметры и убедитесь сами.
Правильный ответ
700 и 1000
Почти 100 %100% всех значений лежат в промежутке [μ−3⋅σ,μ+3⋅σ].
Правило трёх сигм
Если отметить целое число стандартных отклонений от центра графика, вероятности попасть в получившиеся интервалы не меняются.
Можно заметить, что вероятность попасть в интервал [μ−σ,μ+σ] равна примерно 68.2 %, а в интервал [μ−3⋅σ,μ+3⋅σ] — примерно 99.8 %.
Эта закономерность называется правилом трёх сигм:
💡 Почти 100 % всех значений попадают в пределах трёх стандартных отклонений от математического ожидания.
Производители лифтов используют это правило, когда указывают максимальное количество людей, которые могут зайти в лифт. Вес взрослых людей распределён нормально с параметрами, примерно равными: μ=70 кг, σ=10 кг. Если сложить вес 10 человек, мы прибавим друг к другу 10 независимых нормально распределённых случайных величин с μ=70 и σ=10. При этом математические ожидания и дисперсии тоже сложатся. По правилу трёх сигм можно утверждать, что вес десяти случайных зашедших в лифт взрослых практически всегда будет лежать в интервале [605,795] кг.
Как получился этот интервал?
Сумма случайных величин — тоже случайная величина. Если складывать независимые случайные величины, то дисперсия их суммы равна сумме дисперсий складываемых случайных величин. А математическое ожидание — сумме их математических ожиданий.
Мы складываем десять независимых случайных величин со стандартным отклонением σ=10, то есть дисперсия каждой из них равна σ^2=10^2=100. Значит, дисперсия их суммы будет равна σсуммы^2=10⋅100=1000, а стандартное отклонение их суммы будет равно σсуммы=1000**0.5=10*10**0.5.
Математическое ожидание суммы десяти таких величин равно: μсуммы=10⋅μ=10⋅70=700
Осталось только найти для суммы промежуток, границы которого отстоят на плюс-минус три стандартных отклонения от математического ожидания:
Если округлить получившийся интервал до целых границ — [605,795] кг, он немного расширится. Так мы будем ещё увереннее в том, что вес десяти случайных зашедших в лифт взрослых практически всегда попадёт в интервал.
Корректность моделирования
Вспомним фотографию с ростом студентов.
Рост 175 студентов считают нормально распределённой случайной величиной. Строго говоря, мы имеем дело с конечным набором чисел, но описываем его с помощью непрерывной случайной величины. Более того, нормальное распределение определено на всей числовой оси, но не существует людей с отрицательным ростом или десятиметровых. Почему же всё равно используют эту модель?
Если взять нормальное распределение роста X∼N(175,11^2) и рассчитать вероятность того, что X окажется отрицательным, получится примерно 2.74⋅10^(−57). Это исчезающе малая вероятность, которой можно пренебречь.
Утверждение, что набор данных распределён нормально, предполагает допущение. Любая математическая модель приблизительна, она может быть более или менее удачной для конкретной задачи. Модель — это инструмент, и, если понимать его возможности и цели, он отлично помогает.
И последнее замечание. Гистограмма частот значений нормально распределённой величины не всегда идеально соответствует теоретической кривой плотности вероятности. Возможны небольшие отклонения, — как например, на уже упомянутой фотографии. Приведём несколько гистограмм частот для переменной, значения которой случайно сгенерированы из одного и того же нормального распределения. Как видите, они могут заметно отличаться, но это всё еще графики для случайной величины, имеющей одно и то же нормальное распределение.
На этом минутка занудства закончена, в этом уроке остался последний раздел.
Сравнение распределений
В этой теме вы изучили несколько распределений. Посмотрим на их сходства и различия:
Распределение Бернулли
Биномиальное распределение
Равномерное непрерывное распределение
Нормальное распределение
Какие случайные величины описывает
Дискретные
Дискретные
Непрерывные
Непрерывные
Количество параметров
11
22
22
22
Симметрично ли
Только если вероятность успеха равна вероятности неудачи
Бывает симметричным или скошенным
Всегда симметрично
Всегда симметрично
Где вероятность не равна нулю
Только для значений 00 и 11 — ими обозначаются неудача и успех
Вероятности всегда распределены по конечному числу значений — целым числам от 00 до nn
Функция плотности вероятности больше нуля только для конечного промежутка
Функция плотности вероятности больше нуля для всех значений от минус до плюс бесконечности
Непрерывная случайная величина, которая равновероятно принимает значения на ограниченном промежутке, имеет непрерывное равномерное распределение. Под это описание подходит время ответа сервера.
Количество успехов испытаний с двумя исходами, независимо повторяющихся фиксированное количество раз, описывают биномиальным распределением. Здесь это количество кликов.
Если непрерывная величина имеет наибольшую вероятность оказаться около своего среднего значения, с равной убывающей вероятностью принимает значение больше или меньше среднего, то она описывается нормальным распределением. Здесь это скорость участников марафона.
В этом уроке вы познакомились с непрерывными распределениями: непрерывным равномерным и нормальным, изучили графики их функций плотности вероятности и научились по графику этой функции определять вероятность, что случайная величина попадёт в заданный интервал. В следующем уроке вы продолжите изучать нормальное распределение и научитесь решать новые практические задачи.
Функция нормального распределения
Кратко:
Функция нормального распределения задается двумя параметрами: центром и стандартным отклонением.
Функция распределения (кумулятивная функция) накапливает вероятность по мере роста значения x.
Для непрерывного нормального распределения кумулятивная функция F(x) = P(X ≤ x) = P(X < x) = P(X ∈ (-∞, x)).
График плотности вероятности нормального распределения имеет колоколообразную форму.
Методы norm() и cdf() из пакета scipy.stats помогают рассчитать значения функции нормального распределения.
Метод cdf() возвращает вероятность, что случайная величина примет значение, меньшее заданного аргумента.
Вероятность попадания в конечный интервал рассчитывается путем вычитания меньшей кумулятивной вероятности из большей.
Пример задачи: время реакции беспилотного автомобиля на препятствие распределено нормально, нужно найти вероятность попадания в интервал от 900 до 1100 миллисекунд
Типичная задача для известного распределения — найти вероятность того, что случайная величина, следующая этому распределению, попадёт в тот или иной интервал.
Канонический вид задачи такой. Дана случайная величина X, задано значение x0. Нужно найти вероятность, что X примет значение меньше x0, то есть попадёт в интервал от минимально возможного значения до x0 включительно.
Пример такой задачи. Известно, что время реакции беспилотного автомобиля на препятствие распределено нормально со средним в 1 секунду и стандартным отклонением в 100 миллисекунд. Нужно найти вероятность, что автомобиль отреагирует на препятствие менее чем за 50 миллисекунд. Здесь случайная величина — время реакции беспилотного автомобиля, интервал — менее x миллисекунд.
Решать такие задачи помогает функция распределения, или кумулятивная функция распределения. Напомним главное про неё.
Функция распределения — это функция, значения которой равны вероятности, что случайная величина окажется меньше заданного значения или равна ему.
Обозначают: F(x).
Можно записать так: F(x)=P(X≤x)
Она называется кумулятивной (от лат. cumulare — «складывать, заполнять, завершать»), потому что накапливает вероятность по мере роста x: чем больше x, тем шире интервал, и, значит, больше вероятность попасть в него. Отсюда также следует, что это неубывающая функция.
Не убывает и стремится к 1
Это правильный вариант. Вероятность не может быть больше единицы, и чем больше возможных значений случайной величины включает в себя интервал, тем ближе к единице вероятность попасть в него.
Раньше мы использовали кумулятивную функцию только для дискретных случайных величин, теперь применим и к непрерывному.
Функция нормального распределения
В прошлом уроке вы узнали, что нормальное распределение задаётся двумя параметрами:
центром, или математическим ожиданием μ;
разбросом: дисперсией σ^2 или стандартным отклонением σ.
Поскольку нормальное распределение задано на всей числовой оси, получается, что его кумулятивная функция: F(x)=P(X≤x)=P(X<x)=P(X∈(−∞,x)).
В равенстве выше можно заменить P(X≤x)=P(X<x), поскольку для непрерывных случайных величин вероятность любого конкретного значения равна нулю. Значит, неважно, включать правую границу в интервал или нет.
Прочувствовать эту формулу поможет интерактив. Посмотрите на нём значения функции нормального распределения при разных xx для случайной величины X∼N(1000,100^2):
Видно, что для конкретного x кумулятивная функция нормального распределения выдаёт вероятность, что случайная величина попадёт в левый «хвост» — левее этого значения x.
Сравните графики плотности вероятности нормального распределения и его кумулятивной функции:
График плотности вероятности нормального распределения — колоколообразной формы: до μ функция растёт, а после — убывает. Поэтому для x<μ площадь графика под кумулятивной функцией возрастает быстрее, а при x>μ — медленнее. Говоря неформально, до μ функция распределения накапливает вероятность быстрее, а затем — медленнее.
Посмотрите на графике, как кумулятивная функция показывает вероятность левого хвоста для разных значений X: μ−σ, μ, μ+2σ:
Рассчитать значения функции нормального распределения в Python помогут методы из пакета scipy.stats: norm() и cdf().
Слово norm в именах методов означает «нормальное распределение» (от англ. normal distribution).
Метод norm() задаёт нормальное распределение. На вход он получает два аргумента: математическое ожидание и стандартное отклонение.
Аббревиатура cdf расшифровывается как cumulative distribution function, что переводится как «кумулятивная функция распределения». Метод cdf() получает на вход один аргумент и возвращает вероятность, что случайная величина примет значение, меньшее заданного аргумента.
Зададим в коде нормальное распределение N(1000,100^2) с помощью метода norm(1000, 100), а затем с помощью метода cdf() найдём вероятность получить 1000 или менее при таком распределении:
from scipy import stats as st
# математическое ожидание
mu = 1000
# стандартное отклонение
sigma = 100
# задаём нормальное распределение с математическим ожиданием 1000
# и стандартным отклонением 100
distr = st.norm(1000, 100)
# значение, для которого хотим найти вероятность
x = 1000
# считаем вероятность получить значение, равное x или меньше
result = distr.cdf(x)
print(result)
Результат
0.5
Как видно, вероятность получить 1000 или меньше при таком распределении равна 0.5 И действительно, 1000 — это среднее значение, которое делит распределение строго пополам.
Теперь найдём вероятность получить значение более 1150. Другими словами, рассчитаем вероятность правого «хвоста».
Метод cdf() возвращает вероятность получить значение, равное 1150 или меньше. Чтобы получить нужную нам вероятность, вычтем результат cdf() из единицы.
from scipy import stats as st
# математическое ожидание
mu = 1000
# стандартное отклонение
sigma = 100
# задаём нормальное распределение с математическим ожиданием 1000
# и стандартным отклонением 100
distr = st.norm(1000, 100)
# значение, для которого хотим найти вероятность
x = 1150
# считаем вероятность получить значение больше x
result = 1 - distr.cdf(x)
print(result)
Вероятность получить значение больше 1150 при таком распределении невелика: примерно 0.0668, или около 6.7 %.
Вероятность попадания в конечный интервал
Функция распределения помогает решить ещё и такую задачу: найти вероятность, что случайная величина попадёт в конечный интервал.
Вернёмся к примеру со временем реакции беспилотного автомобиля на препятствие. Задача может быть такой. Время реакции распределено нормально: T∼N(1000,100^2). Нужно найти вероятность, что автомобиль среагирует на препятствие за время от 900 до 1100 миллисекунд, то есть P(T∈(900,1100)).
Чтобы рассчитать вероятность, что случайная величина попадёт в интервал, нужно:
Найти кумулятивную вероятность меньшего значения.
Найти кумулятивную вероятность большего значения.
Вычесть из большей вероятности меньшую. «Хвост» распределения левее меньшего значения сократится и останется только интервал между значениями.
Рассчитаем то же самое в Python. Нам дано то же нормальное распределение со средним, равным 1000, и стандартным отклонением, равным 100. Найдём вероятность, что случайная величина попадёт между 900 и 1100:
from scipy import stats as st
mu = 1000
sigma = 100
distr = st.norm(mu, sigma)
x1 = 900
x2 = 1100
result = distr.cdf(x2) - distr.cdf(x1)
print(result)
Вероятность, что нормально распределённая случайная величина попадёт в пределах одного стандартного отклонения от центра, примерно равна 68.3 %. Для нашей задачи это вероятность, что автомобиль среагирует на препятствие за время от 900 до 1100 миллисекунд.
Задача
Студенты бросают в длину тяжёлый мяч с песком. Длина броска распределена нормально с математическим ожиданием в 7.2 метра и дисперсией 16900 см^2.
Почётную грамоту получают студенты, которые бросят мяч дальше 7.35 м. Те же, кто бросит мяч дальше 7.5 м, в дополнение к грамоте получают медаль.
Какова вероятность, что:
1) Случайно взятый студент получит грамоту?
2) Случайно взятый студент получит грамоту, но не получит медаль?
3) Случайно взятый студент получит и грамоту, и медаль?
Выведите ответы на вопросы в разных строках. Перед тем как построить распределения и рассчитать вероятности, приведите параметры распределения и пороговые значения к одной единице измерения — сантиметрам.
from scipy import stats as st
# задайте нормальное распределение с нужными параметрами
mu = 720
sigma = 16900**0.5
print(sigma)
# задайте значения случайной величины - пороги длин броска для получения грамот и медалей
distr = st.norm(mu, sigma)
x1 = 735
x2 = 750
print('Вероятность получить грамоту:', 1 - distr.cdf(x1))# рассчитайте вероятность
print('Вероятность получить грамоту без медали:', distr.cdf(x2) - distr.cdf(x1)) # рассчитайте вероятность )
print('Вероятность получить медаль:', 1 - distr.cdf(x2))# рассчитайте вероятность )
Медаль получат чуть больше 40 %40% студентов. Иногда и спортивным тренерам нужна теория вероятностей: например, чтобы рассчитать, сколько грамот и медалей заказывать.
Стандартное нормальное распределение и стандартизация
Кратко:
Стандартное нормальное распределение - это нормальное распределение с математическим ожиданием, равным 0, и стандартным отклонением, равным 1.
Любое нормальное распределение можно с помощью простых арифметических операций привести к стандартному.
Чтобы стандартизировать нормальное распределение, нужно: Вычесть из случайной величины её математическое ожидание μ - график распределения при этом сдвинется так, чтобы центр оказался в нуле.
Разделить полученную случайную величину на стандартное отклонение σ.
Стандартизация помогает решить задачи алгебраически.
Z-значение - это количество стандартных отклонений, на которое некоторое число отклонилось от центра нормального распределения.
Расчёт Z-значений позволяет сравнить, на сколько значения случайных величин с разными нормальными распределениями отклонились от своих математических ожиданий
В прошлых уроках вы познакомились с нормальным распределением и его функцией распределения. Среди всех нормальных распределений есть одно особенное, его называют стандартным.
Стандартное нормальное распределение — это нормальное распределение с математическим ожиданием, равным 0, и стандартным отклонением, равным 1. Его принято обозначать Z: Z∼N(0,1)
Любое нормальное распределение можно с помощью простых арифметических операций привести к стандартному. Такое преобразование называют стандартизацией.
Чтобы стандартизировать нормальное распределение, нужно:
Вычесть из случайной величины её математическое ожидание μ — график распределения при этом сдвинется так, чтобы центр оказался в нуле.
Разделить полученную случайную величину на стандартное отклонение σ. Стандартное отклонение получившегося распределения станет равным 1.
Запишем формулой:
X∼N(μ,σ^2)⇒(X−μ)/σ∼N(0,1)
Посмотрите на графики нормального распределения с μ=20,σ=3 и стандартного нормального распределения, которое получается из него стандартизацией:
Правильный ответ
Вычесть 145 и разделить на 12
Математическое ожидание Y равно 145 — сначала его нужно отнять. Дисперсия Y равна 144, значит, стандартное отклонение равно 144**0.5=12
Зачем стандартизировать распределения? Отличный вопрос! Есть класс задач, которые не решить без приведения нормального распределения к стандартному виду. Приведём пример.
В школе «Инклюзия» проводят соревнования по прыжкам в длину. Известно, что длины прыжков школьников и школьниц распределены нормально, но с разными параметрами: длина прыжка школьников — со средним 3.9 метра и стандартным отклонением 0.5 метра, а школьниц — со средним 3.5 метров и стандартным отклонением 0.7 метра. Организаторы соревнований хотят установить пороговую длину и выдавать сертификат всем, кто прыгнет дальше этого порога. При этом важно, чтобы вероятность получить сертификат была одинакова для всех детей независимо от пола.
Можно попробовать решить такую задачу перебором. Этот способ можно использовать, но он требует много времени и вычислений. Стандартизация помогает решить задачу алгебраически! Разберёмся как.
Для решения нам пригодится новое понятие — Z-значение.
Z-значение
Z-значение — это количество стандартных отклонений, на которое некоторое число отклонилось от центра нормального распределения.
Например, если случайная величина X распределена так: X∼N(1000,100^2) Рассмотрим число 1100, оно больше среднего на 100, что равно одному стандартному отклонению. Значит, Z-значение числа 1100 равно 1.
Теперь рассмотрим 900. Оно меньше среднего на 100, это одно стандартное отклонение в отрицательную сторону. Значит, Z-значение числа 900 равно −1.
Z-значение любого значения нормально распределённой случайной величины можно получить по всё той же формуле: (X−μ)/σ∼Z
Проверим для тех же примеров:
Z-значение числа 1100: (1100−1000)/100=1;
Z-значение числа 900: (900−1000)/100=−1
−1/2
Вычислим по формуле: (950−1000)/100=−50/100=−1/2. Значит, Z-значение числа 950 равно −0.5. Другими словами, число 950 лежит левее математического ожидания, равного 1000, на половину стандартного отклонения, равного 100.
Возьмём два числа, симметричных относительно математического ожидания. Например, для X∼N(1000,100:2) это может быть пара 1100 и 900 или пара 1050 и 950. Числа в такой паре находятся на одинаковом расстоянии от центра распределения. Нормальное распределение симметрично, поэтому Z-значения чисел в такой паре будут равны по модулю, но противоположны по знаку.
Выше мы уже рассчитали, что для X∼N(1000,100:2)Z-значение числа 1100 равно 1, а числа 900 равно −1.Z-значения равны по модулю и отличаются знаками.
Аналогично Z-значение числа 1050 равно 0.5, а числа 950 равно −0.5
Такие пары чисел, симметричных относительно среднего, отрубают одинаковые «хвосты» распределения слева и справа:
Если для нормального распределения X∼N(μ,σ:2) есть значения x0 и x1, такие что P(X<x0)=P(X>x1), то Z-значение x0 будет равно минус Z-значению x1.
Расчёт Z-значений позволяет сравнить, на сколько значения случайных величин с разными нормальными распределениями отклонились от своих математических ожиданий.
Допустим, случайная величина X∼N(100,10^2) приняла значение x=95, а случайная величина Y∼N(180,4^2) приняла значение y=178. Их Z-значений равны, и по ним сразу можно понять, что и x, и y отклонились на половину стандартного отклонения влево от математического ожидания:
(95−100)/10=(178−180)/4=−0.5.
Эти значения отрубили одинаковые «хвосты» от своих распределений. То есть вероятность того, что X окажется меньше (или больше) 95 равна вероятности того, что Y окажется меньше (или больше) 178: P(X≤95)=P(Y≤178); P(X≥95)=P(Y≥178).
Теперь посмотрим, как это поможет решить задачу о пороге выдачи сертификатов школьникам и школьницам.
Нам известно, что F∼N(3.5,0.7^2) и M∼N(3.9,0.5^2).
Нужно найти число aa, такое, что: P(M≥a)=P(F≥a).
Число aa должно отрубать справа одинаковый «хвост» от обоих распределений. Это значит, что Z-значение числа a должно быть одинаковым для F и для M.
На графике это выглядит так:
Стандартизируем оба нормальных распределения, затем учтём, что получающиеся Z-значения для числа aa должны быть одинаковыми и для распределений F и M. Получим уравнение:
(a−3.5)/0.7=(a−3.9)/0.50.
Это уравнение с одной неизвестной, и значит его можно решить. Домножим обе части равенства на 0.5 и на 0.7:
0.7⋅(a−3.9)=0.5⋅(a−3.5)
Раскроем скобки и приведём подобные слагаемые:
0.7a−2.73=0.5a−1.75;
0.2a=0.98;
a=4.9
Число aa найдено! Если установить порог прыжка в 4.9 метра, сертификат получит одинаковый процент и школьников, и школьниц.
Найдём этот процент. Используем метод cdf().
rom scipy import stats as st
# зададим нормальное распределение для школьниц:
mu_F = 3.5
sigma_F = 0.7
distr_F = st.norm(mu_F, sigma_F)
# зададим нормальное распределение для школьников:
mu_M = 3.9
sigma_M = 0.5
distr_M = st.norm(mu_M, sigma_M)
# найденная пороговая длина прыжка a, за прыжок дальше которой выдаётся сертификат:
a = 4.9
# найдём и выведем на экран вероятности правых хвостов для a,
# округлив их до 5 цифр после запятой:
print('Вероятность того, что случайная школьница получит сертификат:',
round(1- distr_F.cdf(a),5))
print('Вероятность того, что случайный школьник получит сертификат:',
round(1- distr_M.cdf(a), 5))
Если установить порог длины прыжка в 4.9 метра, вероятность получить сертификат одинакова и для школьников, и для школьниц, хотя распределения длин прыжков у них разные.
У компании International два офиса: один — в Ванкувере, другой — в Лондоне. В обоих офисах одинаковое количество сотрудников, а рабочий день с 9 до 18. Когда в Ванкувере 9 утра, в Лондоне — 17 вечера.
HR-менеджеры компании предлагают провести онлайн-игру между сотрудниками из разных стран. Для этого нужно, чтобы число участников от обоих офисов совпадало. Единственная возможность организовать это — найти время, когда в Ванкувере пришло на работу столько человек, сколько ещё не ушло в Лондоне.
Менеджеры выяснили, что время прихода на работу в Ванкувере распределено нормально со средним в 9:00 и стандартным отклонением в 10 минут, а в Лондоне время ухода с работы распределено со средним в 18:00 и стандартным отклонением в 15 минут.
Какое время по часовому поясу Ванкувера стоит выбрать для начала онлайн-игры?
Первая подсказка
Переведём время в минуты и зададим нормальные распределения на единой числовой оси. Примем за ноль время 9 утра по Ванкуверу. Тогда время прихода сотрудников в этот офис распределено так: V∼N(0,102).
Разница между 9 утра в Ванкувере и 18 вечера в Лондоне — час. Тогда время ухода сотрудников в лондонском офисе распределено так: L∼N(60,152).
Вторая подсказка
Нужно найти число a,a, такое что: P(V≤a)=P(L≥a). Слева в этом уравнении стоит вероятность левого «хвоста», а справа — правого. Чтобы корректно составить уравнение, нам нужны вероятности одинаковых хвостов. На наше счастье, Z-значения симметричны, поэтому при составлении уравнения просто заменим знак одной из частей равенства. Получим уравнение:
(a−0)/10=−(a−60)/15.
Правильный ответ
9:24
Похоже, это оптимальное время для начала игры.
Решение
Переведём время в минуты и зададим нормальные распределения на единой числовой оси. Примем за ноль время 9 утра по Ванкуверу.
Время прихода на работу сотрудников в Ванкувере распределено так: V∼N(0,10^2).
Время ухода сотрудников в Лондоне распределено так: L∼N(60,15^2)
Найдём число a,a, такое что: P(V≤a)=P(L≥a).
Слева в этом уравнении стоит вероятность левого «хвоста», а справа — правого. Чтобы корректно составить уравнение, нам нужны вероятности одинаковых хвостов. На наше счастье, Z-значения симметричны, поэтому при составлении уравнения просто заменим знак одной из частей равенства. Получим уравнение:
(a−0)/10=−(a−60)/15
Решим его:
600−10a=15a;
a=24
За ноль мы принимали 9 часов Ванкувера. Значит, наиболее подходящее время начала онлайн-игры — 9:24 по Ванкуверу, в это время в Лондоне будет 17:24.
Percent Point Function для нормального распределения
Кратко:
Функция распределения помогает определить вероятность попадания случайной величины в левый "хвост" графика плотности вероятности.
PPF (Percent Point Function) - функция, которая возвращает значение, отсекающее левый "хвост" с заданной вероятностью.
PPF и функция cdf являются обратными друг другу.
Пример использования PPF: нахождение времени торможения беспилотного автомобиля с вероятностью 99% или грузоподъёмности крана, способного поднять 85% массы взрослых питонов.
Пример применения PPF: определение времени работы лампочки накаливания до перегорания с вероятностью 80%.
Примеры задач с использованием PPF: интернет-магазин "ВИП-Чесс" и "Абобус"
Ранее вы познакомились с функцией распределения, или кумулятивной функцией распределения.
Правильный ответ
X окажется меньше заданного или равно ему: F(x)=P(X≤x)
Это правильный ответ. Так звучит определение функции распределения, или кумулятивной функции.
Вспомним графики плотности вероятности и функции распределения нормального распределения:
В Python функцию распределения рассчитывают с помощью метода cdf().
Функция распределения помогает определить вероятность, что случайная величина попадёт в левый «хвост» графика плотности вероятности. Но что, если задача стоит наоборот: распределение вероятности известно, и нужно найти значение, которое отсекает именно такой «хвост»? Например:
Время торможения беспилотного автомобиля при обнаружении препятствия распределено нормально. За какое время успеет остановиться беспилотный автомобиль с вероятностью 99 %?
Масса взрослых питонов подчиняется нормальному распределению. Кран какой грузоподъёмности сможет поднять 85% питонов?
Время собеседования нового кандидата подчиняется нормальному распределению. Сколько времени в календаре стоит выделить HR-специалисту на собеседование, чтобы его хватило для 90 % кандидатов?
Известно, что для лампочки накаливания время работы до перегорания распределено нормально. Сколько часов случайная лампочка будет гореть, не перегорая, с вероятностью 80 %?
В этих задачах известно распределение вероятности, задана вероятность и нужно найти значение x,x, при котором F(x) примет именно такое значение. Решить эту задачу помогает специальная функция — PPF.
Аббревиатура PPF расшифровывается как percent point function и переводится с англ. как «функция процентных значений». Если даны распределение и вероятность, то эта функция вернёт значение, которое отсекает левый «хвост», соответствующий этой вероятности.
На той же иллюстрации покажем, как работают функции cdf и ppf — они обратны друг другу:
Убедимся в том, что эти функции обратны. Для расчётов используем Python.
Для любого нормального распределения X∼N(μ,σ) вероятность получить значение левее μ+σ примерно равна 84.13 %. Посмотрим, выдаст ли нам тот же результат метод cdf(). Возьмём X∼N(1234,56). Вычислим F(1234+56):
from scipy import stats as st
distr = st.norm(1234, 56)
x_0 = 1234 + 56
result = distr.cdf(x_0)
print(result)
Получилось 0.8413447460685429, как и должно быть.
Теперь проведём обратную операцию — для того же распределения найдём значение, функция вероятности для которого равна 0.8413447460685429. Используем для этого метод ppf():
from scipy import stats as st
distr = st.norm(1234, 56)
p = 0.8413447460685429
result = distr.ppf(p)
print(result)
Получили 12901290 — это как раз 1234+56.
На примере мы показали, что функции cdf и ppf обратны друг другу.
Посмотрим, как нашу новую знакомую PPF применяют на практике. Решим задачу!
Известно, что время работы лампочки накаливания до перегорания распределено нормально со средним в 1200 часов и стандартным отклонением в 80 часов. Сколько часов случайная лампочка будет гореть, не перегорая, с вероятностью 80 %?
В условии дана вероятность, с которой лампочка будет работать больше искомого количества часов. Значит, это вероятность правого «хвоста» и она равна 0.8. Для PPF нужна вероятность левого «хвоста», она равна 0.2. Это вероятность, что лампочка перегорит, то есть время её работы окажется меньше искомого количества часов или равно ему.
from scipy import stats as st
distr = st.norm(1200, 80)
p = 0.2
result = distr.ppf(p)
print(result)
Получается, что с вероятностью 80 % случайная лампочка продержится дольше, чем 1132 часа 40 минут, то есть больше 47 суток.
Задача 1
Интернет-магазин «ВИП-Чесс» продаёт премиальные шахматы из хрусталя. Количество наборов, которые магазин продаёт за неделю, распределено нормально со средним значением 420 и стандартным отклонением 65.
Сколько наборов хрустальных шахмат нужно заказать отделу закупок, чтобы продать их все на следующей неделе с вероятностью 90 %? Перед поставкой на следующую неделю склад будет пуст.
from scipy import stats as st
mu = 420 # укажите среднее значение распределения
sigma = 65 # укажите стандартное отклонение распределения
prob = 0.9 # укажите, с какой вероятностью нужно распродать весь товар
distr = st.norm(mu, sigma) # создайте требуемое распределение
n_shipment = distr.ppf(1-prob) # рассчитайте методом ppf, сколько единиц товара нужно заказать
print('Нужно заказать единиц товара:', int(n_shipment))
Чтобы наверняка продать все шахматы со склада за следующую неделю, достаточно закупить почти на сотню наборов меньше, чем в среднем.
В интернет-магазине «Абобус» пользователи делают заказы, стоимость которых распределена нормально со средним 2400 руб. и стандартным отклонением 320 руб.
Магазин хочет установить фиксированную цену на доставку.
Исследование показало, что пользователи расстраиваются, когда стоимость доставки больше половины стоимости заказа или равна ей. Сколько должна стоить курьерская доставка, чтобы для 3/4 заказов она не превышала половины цены?
from scipy import stats as st
mu = 2400 # укажите, чему равно среднее значение распределения
sigma = 320 # укажите, чему равно стандартное отклонение распределения
threshold = 3/4 # укажите, какая доля заказов должна быть дороже двух стоимостей доставки
max_delivery_price = st.norm(mu, sigma).ppf(1-threshold)/2 # рассчитайте, какую максимальную стоимость доставки можно установить
print('Максимальная стоимость доставки курьером:', max_delivery_price)
1092 рубля! Максимальная стоимость доставки установлена.
Какой метод поможет решить задачу? Подберите подходящее решение.
Погрешность измерения распределена нормально. Нужно найти вероятность, с которой погрешность следующего измерения не превысит заданного значения.
Метод CDF
Нужно найти вероятность, с этим помогает CDF.
Вес куриных яиц на птицефабрике распределён нормально. Нужно найти вес, тяжелее которого окажется треть яиц в следующей партии.
Метод PPF
Пороговое значение вероятности известно. Нужно найти значение случайной величины, соответствующее этой вероятности. С этим поможет PPF
Урожай груш с одного дерева, распределено нормально. Нужно найти, с какой вероятностью случайно выбранное дерево принесёт больше ста плодов.
Метод CDF
Нужно найти вероятность, с этим помогает CDF.
Длина взрослых черепах распределена нормально. Для маркировки подойдут черепахи длиннее 6/106/10 всех в популяции. Нужно найти минимальную длину подходящей особи.
Метод PPF
Нужно найти минимальную длину, то есть значение случайной величины. Значит, поможет PPF
Распределение Пуассона
Кратко:
Статья посвящена распределению Пуассона и его применению в различных задачах.
Распределение Пуассона описывает вероятности возможного числа событий в процессах с известной интенсивностью.
Параметры λ (лямбда) и математическое ожидание совпадают, а дисперсия равна λ.
Вероятность P(Y=k) для k событий в заданном периоде можно рассчитать по формуле P(Y=k) = λ^kk!· e^λ.
График распределения Пуассона показывает вероятности для разных значений k.
Функция распределения Пуассона позволяет находить кумулятивные вероятности и "хвосты" распределения.
Распределения Пуассона и биномиальное распределение могут быть аппроксимированы друг другом
В этом уроке вы познакомитесь с ещё одним распределением, которое часто встречается на практике, и научитесь использовать его для решения задач.
В начале темы вы изучили биномиальное распределение. Вспомним его.
Правильный ответ
Количество независимых повторений эксперимента по схеме Бернулли
Это правильный ответ. Биномиальное распределение задают двумя параметрами, и один из них — количество независимых повторений эксперимента по схеме Бернулли. Этот параметр обозначают n.
Правильный ответ
Вероятность успеха в каждом эксперименте по схеме Бернулли
Это правильный ответ. Вероятность успеха в каждом эксперименте по схеме Бернулли обозначают p.
Рассмотрим особый случай биномиального эксперимента. Будем проводить испытания Бернулли с небольшой вероятностью успеха очень много раз подряд в равные промежутки времени. Получится ситуация, которую можно интерпретировать как процесс, происходящий с некоторой интенсивностью. Здесь важным становится уже не количество экспериментов и вероятность их успеха, а средняя интенсивность этих успехов за определённый промежуток времени.
Например, во время матча футболисты часто бьют по мячу, но голы забивают редко. Каждый удар по мячу — испытание Бернулли, гол — это успех. Попаданий по мячу много, вероятность забить гол маленькая. В итоге нас интересует не общее количество ударов по мячу и не вероятность успеха каждого из них, а среднее количество голов за матч, то есть их интенсивность.
Распределение, которое описывает вероятности возможного числа событий в таких процессах, называют распределениемПуассона.
✔️ В каких случаях работает распределение Пуассона:
Происходит некоторый процесс, обычная интенсивность которого известна.
События — реализации этого процесса — происходят независимо друг от друга (как и успехи в экспериментах по схеме Бернулли в биномиальном распределении).
Примеры процессов, которые можно описать распределением Пуассона:
Футболисты забивают голы со средней интенсивностью 2.7 гола за матч.
В кафе в часы обеда обычно заказывают в среднем 35 порций супа в час.
В течение полярной ночи в заполярном городе северное сияние появляется обычно 3 раза в неделю.
Летом в определённой местности происходят торнадо — в среднем 8.1 торнадо в месяц.
Правильный ответ
Количество аварий на перекрёстке за неделю
Это правильный вариант. Для этой переменной можно использовать распределение Пуассона: аварии происходят с определённой средней интенсивностью и независимо друг от друга.
Правильный ответ
Количество пассажиров, садящихся в автобус № 11 каждые пять минут в час пик
Это правильный вариант. Для этой переменной можно использовать распределение Пуассона: пассажиры пользуются автобусным маршрутом с определённой средней интенсивностью и независимо друг от друга.
Правильный ответ
Число звонков в службу поддержки за неделю
Это правильный вариант. Здесь распределение Пуассона подойдёт: звонки в службу поддержки происходят с определённой средней интенсивностью и независимо друг от друга.
Распределение Пуассона задаётся единственным параметром — интенсивностью процесса. Она показывает, сколько обычно событий происходит за некоторый промежуток времени.
Интенсивность обозначают λ (лямбда).
Обратите внимание, что λ задаётся для фиксированного временного промежутка. Её можно рассчитать для той же случайной величины и для других промежутков времени — об этом ниже.
Этот параметр равен и математическому ожиданию, и дисперсии распределения Пуассона.
С помощью распределения Пуассона можно рассчитать вероятность того, что за определённый период случится kk событий. Например, по среднему количеству голов за матч можно определить вероятность того, что забьют ровно два гола. Для этого используют формулу:
P(Y=k)=λ^k/k!⋅e^λ
В этой формуле: P(Y=k) — это вероятность, что за период случится k событий; λ — среднее количество событий в этот период; e — число Эйлера, одна из основных математических констант. Оно иррациональное, — как и, например, π. Число e примерно равно 2.7182822.718282.
Разберёмся, как применять эту формулу.
Возьмём пример с северным сиянием. Пусть известно, что в течение полярной ночи в заполярном городе северное сияние появляется обычно три раза в неделю. Значит, λ=3. Обозначим случайную величину «количество сияний за неделю» как Y.
Пишут Y∼Pois(3) — то есть случайная величина Y имеет распределение Пуассона с параметром λ=3.
Мы рассчитываем вероятности для количества случаев k, поэтому распределение Пуассона дискретно и определено для всех неотрицательных целых чисел. Можно записать это распределение так:
Значения
0
1
2
…
k
…
Вероятность
λ^0/0!⋅e^λ
λ^1/1!⋅e^λ1
λ^2/2!⋅e^λ
…
λ^k/k!⋅e^λ
…
Сумма вероятностей всех значений строго равна единице, хотя их и бесконечное количество. Это работает в том числе потому, что при увеличении kk вероятность такого значения стремится к нулю.
Для примера с северным сиянием получается так:
Количество сияний
0
1
2
…
k
…
Вероятность
1/e^3
3/e^3
9/2!⋅e^3
…
3^k/k!⋅e^3
…
Вероятность, что не будет ни одного сияния за неделю, равна 1/e^3≈4.98 %
Вероятность трёх сияний за неделю равна 3^3/3!⋅e^3≈22.4 %.
При этом мы не знаем, в какие дни они случатся, — но знаем, с какой вероятностью за неделю их окажется именно столько.
Интересно, что в этом случае вероятности двух и трёх сияний за неделю одинаковы. Чтобы убедиться в этом, преобразуем расчёт вероятности трёх сияний:
Сравните с таблицей выше — получилась в точности вероятность двух сияний!
На сервисе стриминга музыки в среднем регистрируется 2 музыкальные группы в день. Какова вероятность, что завтра на этом сервисе зарегистрируется 3 группы?
Ответ запишите в процентах с двумя цифрами после точки в формате X.XX%.
Ваш ответ правильный0.18
Решение
Это процесс, который имеет среднюю интенсивность. Его удобно описывать распределением Пуассона.
M∼Pois(2)⇒P(M=3)=2^3/(3!⋅e^2)≈0.180447≈18.04 %
Ответ: 18.04 %
График распределения Пуассона
Построим график распределения вероятностей увидеть kk сияний за неделю для первых 20 значений:
import matplotlib.pyplot as plt
from math import factorial, exp
# параметр лямбда (используем lmbd, так как lambda зарезервировано в Python):
lmbd = 3
distr = []
# для всех чисел от 0 до 19
for k in range(20):
# рассчитаем вероятности по формуле распределения Пуассона:
p = (lmbd ** k) / (factorial(k) * exp(lmbd))
distr.append(p)
# зададим график из полученных значений с о-образными точками синего цвета
plt.plot(range(20), distr, 'bo')
# используем числа от 0 до 19 как подписи для горизонтальной оси:
plt.xticks(range(20))
# отобразим график:
plt.show()
На графике вероятности значений 2 и 3 тоже оказались равны.
Видно, что для значений с 11 и более вероятность очень близка к нулю. Действительно, наблюдать такое количество сияний уже маловероятно.
Чтобы получить вероятности распределения Пуассона, вместо расчёта непосредственно по формуле можно использовать метод poisson.pmf() из модуля scipy.stats.
Аббревиатуру pmf вы уже встречали в уроке про биномиальное распределение. Напомним, она расшифровывается как probability mass function — функция для дискретных распределений, показывающая, какое значение какой вероятностью обладает.
Изменим код: импортируем from scipy.stats import poisson и заменим p = (lmbd ** t) / (factorial(t) * exp(lmbd)) на p = poisson.pmf(t, lmbd). Получится тот же график.
import matplotlib.pyplot as plt
from scipy.stats import poisson
# параметр лямбда:
lmbd = 3
distr = []
# для всех чисел от 0 до 19
for k in range(20):
# рассчитаем вероятности этого значения с помощью метода pmf():
p = poisson.pmf(k, lmbd)
distr.append(p)
# зададим график из полученных значений с о-образными точками синего цвета
plt.plot(range(20), distr, 'bo')
# используем числа от 0 до 19 как подписи для горизонтальной оси:
plt.xticks(range(20))
# отобразим график:
plt.show()
Вернёмся к примеру с футболистами. Выше мы говорили, что биномиальное распределение переходит в Пуассона, если испытания Бернулли происходят с небольшой вероятностью успеха много раз подряд в равные промежутки времени. Может показаться, что мы предположили одинаковую частоту ударов по мячу в течение матча. Скорее всего, это не совсем так. Однако эта неточность некритична. Исследования показывают, что распределение голов по матчам отлично описывается распределением Пуассона. Это подтверждает сравнение реального и прогнозируемого количества голов.
Например, аналитики сравнили реальное и прогнозируемое количество голов команды «Манчестер Юнайтед» в английской Премьер-лиге. Исследование охватило период с открытия лиги в сезоне 1992–93 до 2018 года. На графике ниже показаны реальное количество голов, которые забивала за один матч эта команда, и прогноз этого количества распределением Пуассона:
Функция распределения Пуассона
В модуле scipy.stats есть ещё один метод: poisson.cdf(). Он выдаёт значения функции распределения для распределения Пуассона, то есть суммарную вероятность значений от 0 до заданного. Построим с его помощью график функции вероятности для того же распределения с параметром λ=3. Отобразим значения функции вероятности для первых 20 целых значений, на которых определено распределение Пуассона.
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import poisson
# параметр лямбда:
lmbd = 3
distr = []
# для значений от 0 до 19
for x in range(20):
Получим следующий график:
Кумулятивная вероятность помогает находить «хвосты» распределения. Для распределения Пуассона это ответы на вопросы типа «какова вероятность, что за промежуток времени произойдёт меньше (или больше) заданного числа событий?»
Решим такую задачу, но сначала отметим важное свойство распределения Пуассона.
Поскольку параметр λ задаёт интенсивность за определённый период времени, его легко масштабировать на другие временные отрезки. Если в среднем за неделю бывает 3 северных сияния, то за две недели — 6, а за четыре — 12. Значит, рассчитать вероятности количества сияний для промежутка в две недели поможет распределение Пуассона с параметром λ=6. Очень удобно!
Сотрудники пляжа в среднем находят в неделю 4 потерянных солнцезащитных очков, владельца которых так и не удаётся найти. Местная экологическая компания готова взять на переработку партию от 50 солнечных очков. Какова вероятность, что за календарное лето сотрудники пляжа найдут достаточно очков, чтобы сдать их в переработку?
В задаче дана интенсивность в неделю, а нужно рассчитать вероятность за календарное лето — это другой временной отрезок. Чтобы решить эту задачу, используем свойство распределения Пуассона, которое позволяет масштабировать интенсивность.
План решения такой:
Рассчитаем количество недель в календарном лете.
Умножим количество недель на интенсивность событий в неделю. Так мы получим параметр, который задаёт нужное распределение.
Найдём вероятность с помощью метода cdf:
В задаче нужно найти вероятность правого «хвоста». Метод cdf помогает получить вероятность левого. Поэтому найдём вероятность левого и вычтем её из единицы — так получим нужную вероятность правого «хвоста».
В метод cdf передадим минимальное количество найденных очков, уменьшенное на единицу: чтобы получить суммарную вероятность значений от 5050 и выше, из единицы нужно вычесть суммарную вероятность значений до 4949 включительно.
Получаем код:
from scipy.stats import poisson
# минимальное необходимое количество:
min_num = 50
# количество дней в июне, июле и августе:
days = 30 + 31 + 31
# рассчитаем параметр лямбда для этого количества дней:
weeks = days / 7
lmbd = 4 * weeks
# параметр лямбда может получиться нецелым, это допустимо
print(f'Вероятность правого "хвоста" распределения Пуассона от {min_num}',
f'при lambda={round(lmbd,1)} равна {1 - poisson.cdf(min_num - 1, lmbd)}'
)
Результат:
Вероятность правого "хвоста" распределения Пуассона от 50 при lambda=52.6 равна 0.657101690371793
65.71 % — почти две трети, немало. А если добавить к days30 дней сентября, получится больше 99 %. Если что, заботящиеся об экологии сотрудники пляжа могут рассчитывать на бархатный сезон.
Задача 1
Кафе подаёт завтрак с 10 часов. Обычно утром в среднем каждые четыре минуты в кафе заходит посетитель. Если в период с 10 до 10:20 заходит больше 7 посетителей, повар включает дополнительный электрогриль, чтобы успеть всех обслужить.
Помогите менеджеру кафе распланировать расходы на электроэнергию. Рассчитайте вероятность того, что в любой выбранный день повар включит дополнительный электрогриль.
from scipy.stats import poisson
guests_threshold = 7 # укажите лимит посетителей
lmbd = 20/4 # укажите или рассчитайте параметр лямбда
# выведите на экран получившуюся вероятность
print(1-poisson.cdf(guests_threshold, lmbd))
Теперь менеджер знает, что за месяц из 30 дней можно ожидать 4 включения дополнительного электрогриля.
Выводы
Итак, в этом уроке вы узнали главное о распределении Пуассона:
Задаётся одним параметром λ, который интерпретируют как интенсивность процесса: сколько раз событие происходит за конкретный период;
Определено для всех неотрицательных целых чисел, каждое из которых интерпретируют как количество произошедших событий за этот период;
Если случайная величина X распределена по Пуассону с параметром λ, то есть X∼Pois(λ), вероятность того, что за период произойдёт k событий, рассчитывают по формуле P(X=k)=λ^k/(k!⋅e^λ)
Параметр λ можно пересчитывать для других промежутков времени пропорционально соотношению длительности нового и старого периодов.
В модуле scipy.stats есть метод poisson.pmf() для получения вероятностей распределения Пуассона и метод poisson.cdf() для получения значений его функции распределения.
Сравнение распределений
В этой теме вы изучили пять распределений. Посмотрим на их сходства и различия:
Распределение Бернулли
Биномиальное распределение
Равномерное непрерывное распределение
Нормальное распределение
Распределение Пуассона
Какие случайные величины описывает
Дискретные
Дискретные
Непрерывные
Непрерывные
Дискретные
Количество параметров
11
22
22
22
11
Симметрично ли
Только если вероятность успеха равна вероятности неудачи
Бывает симметричным или скошенным влево или вправо
Всегда симметрично
Всегда симметрично
Скошено вправо или симметрично (при λ>10λ>10)
Где вероятность не равна нулю
Только для значений 00 и 11 — ими обозначаются неудача и успех
Вероятности всегда распределены для конечного числа значений — целых чисел от 00 до nn
Функция плотности вероятности не равна нулю только в конечном промежутке
Функция плотности вероятности больше нуля для всех значений от минус до плюс бесконечности
Только для целых неотрицательных чисел
В следующем уроке вы познакомитесь с новой идеей — аппроксимацией распределений и узнаете, как распределением Пуассона приближать биномиальное распределение.
Аппроксимация биномиального распределения распределением Пуассона полезна, когда количество испытаний велико, а вероятность успеха мала. Распределение Пуассона имеет только один параметр - интенсивность, что облегчает масштабирование на разные промежутки времени. Аппроксимация работает лучше, если количество испытаний и вероятность успеха больше, а математическое ожидание обоих распределений одинаково. Сравнение вероятностей для обоих распределений позволяет оценить близость аппроксимации. Аппроксимация не работает хорошо, когда вероятность успеха близка к нулю, но увеличение количества испытаний и уменьшение вероятности успеха улучшает аппроксимацию. Пример с баннерами показывает, как аппроксимация распределением Пуассона может помочь выбрать количество показов и время для показа баннера
Аппроксимация (лат. approximatis — поблизости) — это математический термин для приближения. Аппроксимировать — значит найти значения, близкие к интересующим исследователя.
В этом уроке вы узнаете, когда можно приближать биномиальное распределение с помощью распределения Пуассона и как это сделать.
Правильный ответ
Два у биномиального и один у Пуассона
Биномиальное задаётся количеством экспериментов по схеме Бернулли — nn и вероятностью успеха в каждом из них — pp. Распределение Пуассона задаётся единственным параметром λλ, который интерпретируют как интенсивность процесса.
В уроке о распределении Пуассона вы выяснили, что это — предельный случай биномиального распределения с большим nn и малым p. Но оказывается, можно переходить к распределению Пуассона и не на бесконечности, а раньше — когда количество испытаний относительно велико, а вероятность успеха мала. У распределения Пуассона только один параметр — интенсивность, и это распределение легко масштабировать на разные промежутки времени. Поэтому есть задачи, в которых такая аппроксимация полезна.
Например, показы баннера с небольшой вероятностью клика часто моделируют биномиальным распределением. Если известно, сколько показов баннера в день компания закупила на ближайшие несколько недель, можно рассматривать клики пользователей как события распределения Пуассона.
Разберёмся, когда именно хорошо работает такая аппроксимация. Проанализируем, как работает приближение при разных n и p.
Смоделируем несколько разных ситуаций.
Математическое ожидание биномиального распределения равно n⋅p. Определим параметр λ для распределения равным этому значению: λ=n⋅p. Так мы получим распределения с одинаковыми математическими ожиданиями. Отличие будет только в дисперсиях. Напомним:
дисперсия распределения Пуассона равна его математическому ожиданию;
дисперсия биномиального распределения равна n⋅p⋅(1−p), то есть отличается от дисперсии распределения Пуассона множителем (1−p).
Чтобы оценить, хорошо ли одно распределение приближает другое, сравним вероятности одних и тех же значений для обоих распределений. Если разность этих вероятностей близка к нулю, то они почти совпадают и приближение работает хорошо. Если разность далека от нуля, то аппроксимация плоха. Чтобы оценить близость аппроксимации, найдём модули разности вероятностей по всем значениям, сложим их, а затем усредним, разделив на количество значений.
Возьмём для начала явно далёкое от нуля p и небольшое n, чтобы посмотреть, насколько плохо будет работать аппроксимация.
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom, poisson
# задаем параметры биномиального распределения
n = 10
p = 0.8
# считаем параметр распределения Пуассона для аппроксимации
lmbd = n * p
# задаем диапазон значений k для построения графика
max_value = 10
binom_probs = []
poisson_probs = []
# для всех значений от 0 до 10
for k in range(max_value + 1):
# рассчитываем значения вероятности для биномиального распределения
# и распределения Пуассона
binom_prob = binom.pmf(k, n, p)
poisson_prob = poisson.pmf(k, lmbd)
# добавляем в соответствующие списки
binom_probs.append(binom_prob)
poisson_probs.append(poisson_prob)
# рисуем графики
plt.plot(range(max_value + 1), binom_probs, 'bo',
label=f'Биномиальное распределение с n={n} и p={p}')
plt.plot(range(max_value + 1), poisson_probs, 'rd',
label='Аппроксимация распределением Пуассона')
plt.xlabel(f'k: количество успехов для B{n, p} / событий для Pois({lmbd})')
plt.ylabel('Вероятность k')
plt.legend()
plt.xticks(range(max_value + 1))
plt.show()
# найдем суммарную ошибку аппроксимации для соответствующих значений:
error_values = []
for i in range(max_value + 1):
error = abs(binom_probs[i] - poisson_probs[i])
error_values.append(error)
print('Средняя разница вероятностей на значение:', sum(error_values) / len(error_values))
print('Максимальная разница вероятностей:', max(error_values))
Мы построили график для k от 0 до 10 — именно для этих значений определено биномиальное распределение.
Такое приближение работает не очень хорошо. Это заметно и по графику, и численно: в среднем для каждого значения разница составила больше 5 %, а максимальная — аж больше 16 %.
Увеличим n и уменьшим p:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import binom, poisson
# задаём параметры биномиального распределения
n = 500
p = 0.1
# считаем параметр распределения Пуассона лямбда для аппроксимации
lmbd = n * p
# задаём диапазон значений k для построения графика:
# добавим к мат.ожиданию биномиального распределения 4 стандартных отклонения
std_binom = np.sqrt(n * p * (1 - p))
max_value = int(n * p + 4 * std_binom)
binom_probs = []
poisson_probs = []
# для всех значений от 0 до max_value
for k in range(max_value + 1):
# рассчитываем значения вероятности для биномиального распределения и распределения Пуассона
binom_prob = binom.pmf(k, n, p)
poisson_prob = poisson.pmf(k, lmbd)
# добавляем значения в соответствующие списки
binom_probs.append(binom_prob)
poisson_probs.append(poisson_prob)
# рисуем графики
plt.plot(range(max_value + 1), binom_probs, 'bo', label=f'Биномиальное распределение с n={n} и p={p}')
plt.plot(range(max_value + 1), poisson_probs, 'rd', label='Аппроксимация распределением Пуассона')
plt.xlabel(f'k: количество успехов для B{n,p} / событий для Pois({lmbd})')
plt.ylabel('Вероятность k')
plt.legend()
plt.show()
# найдём суммарную ошибку аппроксимации:
error_values = []
for i in range(max_value + 1):
error = abs(binom_probs[i] - poisson_probs[i])
error_values.append(error)
print('Средняя разница вероятностей на значение:', sum(error_values) / len(error_values))
Запустите код выше с n в несколько сотен и p в единицы процентов и убедитесь, что средняя ошибка станет совсем незначительной, а графики почти совпадут.
Вернёмся к примеру про баннеры. Пусть на баннер обычно кликает 1.2 % тех, кто его увидел. Компания заказала по 1000 показов баннера в час. Какова вероятность, что за несколько часов компания получит 70 кликов или больше?
Количество кликов на баннер в час можно смоделировать биномиальным распределением с n=1000 и p=0.012. Это достаточно маленькая вероятность успеха, так что можно аппроксимировать его распределением Пуассона. Вычислим параметр: λ=1000⋅0.012=12
12 кликов в час — интенсивность для распределения Пуассона. Такая аппроксимация поможет рассчитать интересующую нас вероятность получить 70 кликов или больше для разного количества часов. Например, количество кликов за пять часов можно смоделировать распределением Пуассона с λ=12⋅5=60, а за 88 часов — с λ=12⋅8=96.
Найдём вероятность того, что за пять и за восемь часов произойдёт 70 кликов или больше:
from scipy.stats import poisson
threshold = 70
lmbd_5 = 60
lmbd_8 = 96
print('Вероятность для пяти часов:', 1 - poisson.cdf(threshold - 1, lmbd_5))
print('Вероятность для восьми часов:', 1 - poisson.cdf(threshold - 1, lmbd_8))
Вероятность, что за пять часов пользователи кликнут на баннер 70 раз или больше, примерно 11.2 %. Вероятность, что компания получит это количество кликов за восемь часов, существенно выше — примерно 99.77 %.
Аппроксимация распределением Пуассона в этой задаче поможет, например, выбрать, сколько показов баннера и на какое время закупать, если компания знает, сколько кликов хочет получить.
В этом уроке вы узнали, когда и как аппроксимировать биномиальное распределение с помощью распределения Пуассона, и рассмотрели задачу, в которой такая аппроксимация полезна. В следующем уроке вы познакомитесь с другой аппроксимацией.
Биномиальное распределение описывает множество переменных и часто возникает задача найти вероятность "хвоста" распределения.
Нормальная аппроксимация удобна и быстра для вычислений.
Аппроксимация выполняется, если условие выполнено: математическое ожидание биномиального распределения в пределах ± три стандартных отклонения.
Чем ближе p к 0,5, тем меньше должно быть n для выполнения условия аппроксимации.
Чем ближе p к 0,5, тем меньше ошибки аппроксимации.
Аппроксимация нормальным распределением подходит для поиска вероятности "хвоста" биномиального распределения
В этом уроке разберём, в каких случаях для биномиального распределения можно найти близкую к нему аппроксимацию нормальным распределением.
Биномиальным распределением описывается множество переменных, и часто возникает задача найти вероятность «хвоста» распределения. Например, вы заказали полтора миллиона показов баннера и знаете, что на него кликает 2.9 % тех, кто его просмотрел. Рассчитать вероятность того, что вы получите менее 43000 кликов, можно и с помощью биномиального распределения. Но удобнее и быстрее с точки зрения вычислений использовать нормальную аппроксимацию.
В предыдущем уроке нас интересовали клики за промежуток времени. А теперь мы проанализируем общее число кликов в зависимости от показов баннера.
Напомним: биномиальное распределение задаётся двумя параметрами: n — количеством испытаний по схеме Бернулли и p — вероятностью успеха в каждом из них. Вспомните, как выглядят графики биномиального распределения для разных n и p.
Для n=25 и p=0.5:
Для n=30 и p=0.07:
Вы уже строили графики биномиального распределения для разных n и p. Предположите, что влияет на их скошенность или, наоборот, симметричность.
При p, близком к 0 или 1, и при относительно малом n
Если p близко к нулю или единице, а n не слишком велико, биномиальное распределение будет скошено вправо или влево соответственно. Ниже мы разберём подробнее, какое n можно считать относительно большим, а какое нет.
Насколько p должно быть далеко от 0.5, чтобы появилась скошенность? Это зависит от n: чем больше n, тем ближе p должно быть к 0 или 1, чтобы биномиальное распределение оказалось несимметричным.
Разберёмся поподробнее и посмотрим, в каких случаях скошенности нет, а в каких — есть.
Если n достаточно велико, а p близко к 0.5, форма графика биномиального распределения симметрична и похожа на колокол нормального распределения. При этом условии аппроксимация получится хорошей. Но какими точно должны быть «достаточно большое» n и «близкое к 0.5» p? Чтобы ответить на этот вопрос, нам понадобятся математическое ожидание и стандартное отклонение биномиального распределения.
Ожидаемое число успехов — это число испытаний, умноженное на вероятность успеха. Если домножить результат ещё на вероятность неудачи, получится дисперсия биномиального распределения, а стандартное отклонение — это квадратный корень из неё.
Условие хорошей аппроксимации
Теперь сформулируем условие хорошей аппроксимации:
Нужно взять промежуток от математического ожидания биномиального распределения плюс-минус три его стандартных отклонения. Если он лежит в пределах [0,n] (то есть там, где биномиальное распределение определено), то его форма будет симметрична и близка к нормальному распределению.
И наоборот: если промежуток от мат.ожидания биномиального распределения плюс-минус три его стандартных отклонения выходит за пределы [0,n], график биномиального распределения будет скошенным. Значит, симметричная кривая нормального распределения не даст хорошей аппроксимации.
Чем дальше pp от 0,5 — то есть чем ближе к 0 или 1, — тем ближе мат.ожидание n⋅p будет к краям промежутка [0,n]. Поэтому условием аппроксимации часто считают p, близкое к 0.5. Мы покажем, почему эта формулировка неудачна. Сформулированное выше условие работает лучше: если n достаточно велико, p может быть равно и 0.2 и 0.9, и даже 0.99 — аппроксимация всё равно будет хорошей.
Проверяем на графиках
Построим несколько графиков и убедимся, что условие работает.
Математическое ожидание и стандартное отклонение нормального распределения, которым аппроксимируют биномиальное, просто берутся равными мат.ожиданию и стандартному отклонению этого биномиального распределения.
from math import sqrt
import matplotlib.pyplot as plt
from scipy.stats import binom, norm
# зададим функцию, которая выдаёт <num> чисел,
# равномерно распределённых от <start> до <stop>
# (понадобится для визуализации нормального распределения)
def linspace(start, stop, num):
step = (stop - start) / (num - 1)
result = []
for i in range(num):
result.append(start + step * i)
return result
# задаём параметры биномиального распределения
n = 50
p = 0.22
# границы промежутка, в котором будем строить аппроксимацию -
# от n*p минус 4 ст.отклонения бином.распределения
# до n*p плюс 4 ст.отклонения бином.распределения
# (там, где вероятности значений почти не равны нулю)
left = int(n * p - 4 * sqrt(n * p * (1 - p)))
right = int(n * p + 4 * sqrt(n * p * (1 - p)))
# зададим набор значений биномиальной величины на выбранном промежутке:
# все неотрицательные целые числа от left до right
x = list(range(max(0, left), right))
# рисуем график биномиального распределения
ax = plt.subplot()
# используем синие о-образные маркеры и размер маркера 5
ax.plot(x, binom.pmf(x, n, p), 'bo', ms=5,
label='вероятности биномиального распределения')
# зададим мат.ожидание и ст.отклонение нормального распределения равными
# мат.ожиданию и ст.отклонению биномиального распределения
mu = n * p
sigma = sqrt(n * p * (1 - p))
# рисуем график нормального распределения:
# получим список из 100 чисел от left до right
x = linspace(left, right, 100)
# используем красную линию ширины 3 и прозрачности 0.3
ax.plot(x, norm.pdf(x, mu, sigma), 'r-', lw=3, alpha=0.3, label='плотность вероятности нормального распределения')
# зададим подписи по оси x в пределах ± 3 ст.отклонений от мат.ожидания
# (последний аргумент в методе range - интервал между подписями)
x_ticks = list(range(int(mu - 3 * sigma), int(mu + 3 * sigma), 1))
ax.set_xticks(x_ticks)
# настраиваем оптимальное расположение легенды и выводим график
ax.legend(loc='best')
plt.show()
# выводим, выполняется ли наше условие аппроксимации:
# лежит ли mu ± 3 sigma в промежутке от 0 до n:
if (mu - (3 * sigma) >= 0) and ((mu + (3 * sigma) <= n)):
print('Условие выполняется')
else:
print('Условие не выполняется')
Для n=50 и p=0.22 левая граница μ−3σ довольно близка к нулю по сравнению с промежутком [0,50], на котором определено биномиальное распределение:
Хотя μ−3σ и близко к нулю, промежуток μ±3σ (математическое ожидание ± три стандартных отклонения) лежит в пределах [0,n] — а значит, аппроксимация должна работать хорошо. Это видно и на графике.
Вот несколько результатов, которые выдаёт тот же код, но для разных n и p.
n=20, p=0.5:
Условие выполняется
При p, равном 0.5, аппроксимация практически идеальна, даже при небольшом n.
n=50, p=0.03:
Условие не выполняется
0.03 — слишком маленькая вероятность успеха для n=50, чтобы промежуток μ±3σ поместился в [0,n]. Биномиальное распределение получается скошенным и поэтому не описывается нормальным достаточно близко.
Если оставить ту же вероятность p=0.03, но увеличить nn в десять раз, условие уже будет выполняться и аппроксимация будет хорошей. n=500, p=0.03:
Условие выполняется
☝🏼 Не стоит считать любую вероятность успеха p слишком далёкой от 0.5 в отрыве от n. Лучше ориентируйтесь на условие аппроксимации.
Несколько примеров с разными nn при p=0.99.
n=100, p=0.99:
Условие не выполняется
При таких n и p график биномиального распределения скошен влево. Условие не выполняется, и аппроксимация нормальным распределением не подходит.
Однако даже при таком pp достаточно взять nn побольше и условие выполнится.
n=10000, p=0.99:
Условие выполняется
Выберите условие, которое позволит определить, что биномиальное распределение достаточно симметрично, чтобы аппроксимировать его нормальным. Условие должно охватить все возможные случаи.
Правильный ответ
Нужно найти промежуток, в котором лежат практически все отличные от нуля вероятности биномиального распределения — то есть n⋅p±3⋅(n⋅p⋅(1−p))**0,5. Он должен лежать внутри промежутка значений, на которых определено биномиальное распределение: [0,n].
Именно при таком условии график биномиального распределения будет достаточно симметричным, чтобы хорошо аппроксимироваться нормальным распределением.
Как рассчитывать вероятности с помощью аппроксимации
Когда мы говорили о непрерывных распределениях, например о нормальном, мы утверждали, что вероятность любого конкретного значения непрерывной переменной равна нулю. Значит, нужно отвечать на вопрос, какова вероятность для непрерывной переменной попасть в какой-либо промежуток. Напомним: эта вероятность равна площади под графиком плотности вероятности над этим промежутком.
Как же тогда использовать непрерывную аппроксимацию для дискретного распределения? Это делают так: чтобы найти приблизительную вероятность значения биномиальной величины, берут вероятность того, что аппроксимирующая её нормальная величина попадёт в соответствующий этому значению промежуток. Например, для значения 16 это будет промежуток [15.5,16.5].
Возьмём биномиально распределённую случайную величину X∼B(45,0.4). Построим для неё аппроксимацию нормальным распределением:
n⋅p=45⋅0.4=18
n⋅p⋅(1−p)=45⋅0.4⋅0.6=10.8
Значит, нормально распределённая случайная величина, аппроксимирующая X, имеет распределение Y∼N(18,10.8).
Вот графики X и Y:
Найдём точную вероятность P(X=16) и её аппроксимацию.
Аппроксимация будет равна площади под графиком плотности вероятности Y над промежутком [15.5,16.5]:
Найдём эту площадь с помощью знакомого вам метода cdf():
from math import sqrt
from scipy import stats as st
# задаём параметры биномиального распределения
n = 45
p = 0.4
# зададим мат.ожидание и ст.отклонение нормального распределения равными
# мат.ожиданию и ст.отклонению биномиального распределения
mu = n * p
sigma = sqrt(n * p * (1 - p))
# задаём нормальное распределение с математическим ожиданием 18
# и стандартным отклонением ~3.29
distr = st.norm(mu, sigma)
# границы интервала
y_1 = 15.5
y_2 = 16.5
# считаем вероятность получить значение от y1 до y2
result = distr.cdf(y_2) - distr.cdf(y_1)
print(result)
Получили 0.100628 — хорошее приближение к истинному значению.
Рассчитаем среднюю и максимальную ошибку аппроксимации по всем 46 значениям, для которых определена случайная величина X:
from math import sqrt
from scipy import stats as st
# задаём параметры биномиального распределения
n = 45
p = 0.4
# зададим мат.ожидание и ст.отклонение нормального распределения равными
# мат.ожиданию и ст.отклонению биномиального распределения
mu = n * p
sigma = sqrt(n * p * (1 - p))
# задаём нормальное распределение с математическим ожиданием 18
# и стандартным отклонением ~3.29
distr = st.norm(mu, sigma)
# найдём суммарную ошибку аппроксимации:
error_values = []
for i in range(n + 1):
error = abs(st.binom.pmf(i, n, p) - (distr.cdf(i + 0.5) - distr.cdf(i - 0.5)))
error_values.append(error)
print('Средняя разница вероятностей на значение:', sum(error_values) / len(error_values))
print('Максимальная разница вероятностей:', max(error_values))
В среднем для X∼B(45,0.4) вероятность, рассчитанная с помощью нормальной аппроксимации, отклоняется от истинной на 0.034 %. Максимальная разница — 0.19 %. Отличный результат для такого небольшого n.
Как мы уже сказали, в реальных задачах часто ищут вероятность не конкретного значения, а «хвоста» распределения. Аппроксимация нормальным распределением и применение метода cdf() для этого подходят как нельзя лучше.
Вернёмся к задаче из начала урока. Если заказано полтора миллиона показов баннера и на этот баннер обычно кликает 2.9 % от увидевших его, какова вероятность получить менее 43000 кликов?
Аппроксимируем биномиальное распределение нормальным и посчитаем:
from math import sqrt
from scipy import stats as st
# задаём параметры биномиального распределения
n = 1500000
p = 0.029
# зададим мат.ожидание и ст.отклонение нормального распределения равными
# мат.ожиданию и ст.отклонению биномиального распределения
mu = n * p
sigma = sqrt(n * p * (1 - p))
# задаём нормальное распределение
distr = st.norm(mu, sigma)
# считаем вероятность хвоста слева от 43 тысяч
result = distr.cdf(43000)
print(result)
Менее 0.75 % — на 43 тысячи кликов можно рассчитывать наверняка!
Задача 1
Новые посетители, которые заходят на сайт социальной сети, заводят аккаунт с вероятностью 11.4 %. Менеджмент соцсети прогнозирует, что в следующем месяце удастся привлечь на сайт 550 тысяч новых посетителей. Если прогноз окажется верным, какова вероятность того, что в следующем месяце в соцсети появится больше 63 тысяч новых аккаунтов?
from math import sqrt
from scipy import stats as st
n = 550000 # задайте параметры
p = 0.114 # биномиального распределения
mu = n * p # рассчитайте параметры
sigma = sqrt(n * p * (1-p)) # нормального распределения
distr = st.norm(mu, sigma) # задайте нормальное распределение
result = 1- distr.cdf(63000) # найдите вероятность
print(result)
Это был непростой урок. Но, может, у вас найдётся минутка поговорить о том, как сделать аппроксимацию биномиального распределения нормальным точнее. Это связано с параметрами биномиального распределения. Если хотите глубже погрузиться в тему, изучите дополнительный материал ниже, или переходите к следующему уроку.
Как средняя и максимальная ошибки аппроксимации зависят от n и p
Покажем ошибку аппроксимации для разных n и p. Мы составили таблицу (она ниже) и в ней указали случаи, при которых условие аппроксимации не выполняется.
Принятые обозначения:
ae (от англ. average error): средняя разница между вероятностями значений XX и того, что аппроксимирующая нормально распределённая случайная величина окажется в промежутке ±0.5 от этих значений. Чтобы посчитать ae, усредним такие разницы для всех возможных значений X: от 0 до n.
me (от англ. maximum error): максимальная разница между вероятностями значений X и их аппроксимациями. Максимум выбрали среди всех таких разностей для всех возможных значений X.
Для параметров pp, одинаково отстоящих от 0.5, скошенность биномиального распределения будет одинаковая, — только с разным знаком.
Например, для p=0.1 и p=0.9 ошибки аппроксимации будут одинаковыми при одном и том же n. Поэтому в таблицу мы включили p, которые отстоят от 0.5 на разное расстояние.
Зелёным цветом отмечены ячейки с такими nn и pp, при которых описанное выше условие аппроксимации выполняется. Красным — при которых не выполняется.
Проценты могут сбить с толку, поэтому отметим, что речь идёт об абсолютных разницах между вероятностями значений для биномиальной случайной величины и аппроксимирующими их вероятностями. Представьте, что вам увеличили зарплату на 1.8112 % — это совсем немного. Но когда это разница между вероятностями, каждая из которых равна нескольким процентам, — это существенно.
Из таблицы видно:
чем ближе pp к 0.5, тем меньше должно быть n, чтобы условие аппроксимации выполнялось;
чем ближе pp к 0.5, тем меньше ошибки аппроксимации, — и средняя, и максимальная;
чем больше n, тем меньше ошибки аппроксимации для одного и того же p.
Заключение
Кратко:
Основные типы распределений вероятностей на практике.
Аппроксимация одних распределений другими.
Знания о распределениях необходимы для темы «Проверка гипотез».
Шпаргалка темы для сохранения знаний
Вы познакомились с основными типами распределений вероятностей, которые часто встречаются на практике, и узнали, как одни распределения можно аппроксимировать другими. Знания о распределениях вам понадобится в следующей теме «Проверка гипотез».
Чтобы пройти тест нужно правильно ответить на 6 вопросов из 10. Время на прохождение: 23 минуты
Задание 1 из 10
Сколько исходов у случайной величины с распределением Бернулли?
Правильный ответ
22
Распределение Бернулли описывает случайную величину с двумя исходами — один принято называть успехом, а другой неудачей.
Распределение Бернулли описывает случайную величину с двумя исходами — один принято называть успехом, а другой неудачей.
Задание 2 из 10
Какую формулу из комбинаторики используют при расчёте вероятностей для биномиального распределения?
Правильный ответ
Число сочетаний
Число сочетаний — Cnk — это количество способов выбрать k успехов из nn экспериментов. На это число домножается вероятность получить k успехов и n−k неудач.
Число сочетаний — Cnk — это количество способов выбрать kk успехов из nn экспериментов. На это число домножается вероятность получить kk успехов и n−kn−k неудач.
Задание 3 из 10
Какое будет самое вероятное значение для биномиального распределения с n=10,p=0.27?
2.7
Задание 4 из 10
Выберите распределения, которые описывают непрерывные случайные величины.
Правильный ответ
Нормальное распределение
Правильный ответ
Равномерное непрерывное распределение
Только нормальное и равномерное непрерывное распределения из этого списка описывают непрерывные случайные величины. Остальные — для дискретных случайных величин.
Задание 5 из 10
Непрерывная случайная величина X распределена равномерно на промежутке [4,10]. Чему равна вероятность того, что X окажется меньше 5 или больше 8?
Правильный ответ
1/2
Суммарная длина промежутков [4,5] и [8,10] равна 3. Общая длина промежутка от 4 до 10 равна 6. Поскольку случайная величина X равномерно распределена на промежутке [4,10], площадь над интересующими нас отрезками равна соотношению их длин. То есть длину промежутков, входящих в событие, нужно поделить на общую длину. Получается 3/6=1/2.
Суммарная длина промежутков [4,5] и [8,10] равна 3. Общая длина промежутка от 4 до 10 равна 6. Поскольку случайная величина X равномерно распределена на промежутке [4,10], площадь над интересующими нас отрезками равна соотношению их длин. То есть длину промежутков, входящих в событие, нужно поделить на общую длину. Получается 3/6=1/2.
Задание 6 из 10
Что нужно сделать, чтобы привести нормальное распределение N(μ,σ^2) к стандартному?
Правильный ответ
Вычесть μ и разделить результат на σ
Отняв мат.ожидание, вы получите нормальное распределение с тем же стандартным отклонением σ и центром в нуле. Разделив на σ, получите N(0,1).
Задание 7 из 10
Как называется функция, которая определяет вероятность того, что случайная величина примет значение, меньшее или равное её аргументу? Выберите все подходящие варианты.
Правильный ответ
Функция распределения
Это синонимы для функции, которая показывает накопленную вероятность для любого значения некоторой случайной величины. То есть вероятность левого «хвоста» от этого значения.
Правильный ответ
Кумулятивная функция
Это синонимы для функции, которая показывает накопленную вероятность для любого значения некоторой случайной величины. То есть вероятность левого «хвоста» от этого значения.
Задание 8 из 10
Как соотносятся между собой функции CDF и PPF? Выберите все подходящие варианты.
Правильный ответ
Они обратны друг другу.
Правильный ответ
Одна определена на множестве значений случайной величины и выдаёт вероятность функции распределения для любого значения, а другая — наоборот.
Обе определены на множестве значений случайной величины, а выдают вероятность.
Они обратны друг другу: CDF считает функцию распределения для любого значения случайной величины, а PPF — наоборот. Этим и определяются их множества определения и области значений: где они определены и что могут выдать.
Задание 9 из 10
Какое условие должно быть выполнено, чтобы аппроксимировать биномиальное распределение распределением Пуассона?
Правильный ответ
Малое p и достаточно большое n
Большое число попыток nn и, главное, маленькая вероятность успеха p — то есть редкость происходящих успехов — позволяют приближать вероятности результатов такого эксперимента распределением Пуассона.
Большое число попыток n и, главное, маленькая вероятность успеха p — то есть редкость происходящих успехов — позволяют приближать вероятности результатов такого эксперимента распределением Пуассона.
Задание 10 из 10
Возможна ли близкая аппроксимация биномиального распределения нормальным, если параметр pp биномиального распределения равен 0.0001?
Правильный ответ
Да, если n достаточно велико
Если n таково, что промежуток шириной шесть стандартных отклонений биномиального распределения и центром в его мат.ожидании лежит в пределах [0,n], то аппроксимация будет достаточно точной. При увеличении nn можно достигнуть практически любой точности аппроксимации, каким бы разумным способом она ни была рассчитана.
Если n таково, что промежуток шириной шесть стандартных отклонений биномиального распределения и центром в его мат.ожидании лежит в пределах [0,n], то аппроксимация будет достаточно точной. При увеличении nn можно достигнуть практически любой точности аппроксимации, каким бы разумным способом она ни была рассчитана.