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

    Пусть будет некий абстрактный эксперимент в процессе которого может происходить некое событие. Этот эксперимент провели пять раз, и в четырех из них происходило то самое событие. Какие выводы можно сделать из этих 4/5?



    Есть формула Бернулли, которая дает ответ, с какой вероятностью происходит 4 из 5 при известной исходной вероятности. Но она не дает ответ, какая была исходная вероятность, если событий получилось 4 из 5. Оставим пока в стороне формулу Бернулли.

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

    void test1() {
        uint sz_ar_events = 50; // замеряемых точек графика
        uint ar_events[sz_ar_events]; // в этом массиве сбор данных для графика
        for (uint i = 0; i < sz_ar_events; ++i) ar_events[i] = 0;
        uint cnt_events = 0; // сколько уже событий в точках графика
    
        uint k = 4; // k событий из n экспериментов
        uint n = 5;
    
        // НАКОПЛЕНИЕ СТАТИСТИКИ
        while (cnt_events < 1000000) {
            // случайный выбор предполагаемой вероятности
            // эксперимента, из диапазона 0..1
            double probability = get_random_real_0_1();
    
            uint c_true = 0;
            for (uint i = 0; i < n; ++i) {
                // вероятность события в эксперименте probability,
                // и n-раз взяли истина или ложь с выбранной этой вероятностью
                bool v = get_true_with_probability(probability);
                if (v) ++c_true;
            }
    
            // если из n-раз получили k-раз истину, значит это тот самый случай
            if (c_true == k) {
                uint idx = lrint(floor(probability*sz_ar_events));
                assert( idx < sz_ar_events ); // проверка, что с округлением не напутал
                ++cnt_events; // всего событий
                ++ar_events[idx]; // событий в этой точке графика
            }
        }
    
        // ВЫВОД РЕЗУЛЬТАТА
        for (uint i = 0; i < sz_ar_events; ++i) {
            double p0 = DD(i)/sz_ar_events;
            // плотность вероятности:
            // вероятность на отрезке деленное на протяженность отрезка
            double v = DD(ar_events[i])/cnt_events / (1.0/sz_ar_events);
            printf("%4.2f %f\n", p0, v);
        }
    }

    Код этой программы можно найти здесь, рядом же вспомогательные функции.

    Полученный расчет закинул в эксель и сделал график.

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

    Для полноты картины упомяну, что этот график соответствует графику по формуле Бернулли от параметра вероятность и умноженный на N+1 количества экспериментов.

    Далее по тексту, там где в статье употребляю дробь вида k/n, то это не деление, это k событий из n экспериментов, чтобы каждый раз не писать k из n.

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

    На графике ниже изображены распределения для величин 4/5, 7/9, 11/14 и 24/30. Чем уже область, тем выше холмик, площадь которого неизменная единица. Эти соотношения выбраны, потому что они все около 0.8, а не потому что именно такие могут возникнут при 0.8 исходной вероятности. Выбраны, чтобы продемонстрировать, какая область возможных значений остается даже при 30 проведенных экспериментах.

    Код программы для этого графика здесь.


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

    Сколько бы экспериментов не провели, всегда остается вероятность, что исходная вероятность может оказаться и 0.0001 и 0.9999. Для упрощения крайние маловероятные значения отбрасываются. И берется, скажем, например 95% от основной площади графика распределения.

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

    В моей программе расчет границ доверительного интервала осуществляется здесь.

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

    Теперь, про более реальный эксперимент.


    Пусть будет всем надоевшая монетка, подбрасываем эту монетку, и получаем 4 из 5 выпадений решкой — очень реальный случай. В действительности это не совсем то же самое, что описал чуть выше. Чем это отличается от предыдущего эксперимента?

    Предыдущий эксперимент описывался из предположения, что вероятность события может быть равнораспределена на интервале от 0 до 1. В программе это задается строкой double probability = get_random_real_0_1();. Но не бывает монеток с вероятностью выпадения, скажем, 0.1 или 0.9 всегда одной стороной.

    Если взять тысячу самых разных монет от обычных до самых кривых, и для каждой произвести замер выпадения путем подбрасывания их по тысяче и более раз, то это покажет, что реально они выпадают одной стороной в диапазоне от 0.4 до 0.6 (это числа навскидку, не буду же я выискивать 1000 монет и каждую подбрасывать 1000 раз).

    Как этот факт меняет программу для симуляции вероятностей одной конкретной монеты, для которой получили 4 из 5 выпадения решкой?

    Допустим, что распределение выпадения одной стороной для монет описывается как приближение к графику нормального распределения взятого с параметрами средняя = 0.5, стандартное отклонение = 0.1. (на графике ниже он изображен черным цветом).

    Когда в программе меняю генерацию исходной вероятности с равнораспределенной на распределенную по указанному правилу, то получаю следующие графики:


    Код этого варианта здесь.

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

    В итоге, 4/5 это ни о чем не говорит и даже 50 проведенных экспериментов не очень информативны. Это очень мало информации, чтобы определить, что за вероятность все же лежит в основе эксперимента.

    == Update ==

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

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

    Как получить в формулах описанный частный случай с монетой, смотрите комментарии от jzha.
    Поделиться публикацией

    Комментарии 29

      0
      Когда в прогнозе пишут «вероятность дождя 50%», как это понимать? «Мы сами не знаем, будет дождь или нет»?
      И как проверить достоверность этого прогноза? У нас ведь не будет серии экспериментов, а только один.
        0

        Это понимать в смысле количества информации. В таком контексте "вероятность" — мера нашего незнания, т.е. величина, связанная с информацией и энтропией. Вероятность 50% означает, что узнавание факта, пошел дождь или нет, даст нам ровно 1 бит информации. Если же вероятность дождя была оценена иной, то мы получим больше или меньше 1 бита.

          0
          Я думаю вопрос вероятности дождя лучше спрашивать у синоптиков, по крайней мере про ихние вероятности. Разные типы данных по разному могут считаться. Единственное что наверняка, это то что для любого прогноза должны быть распределение результата прогноза и доверительные интревалы.
            +3

            Есть два подхода к пониманию вероятности: фреквентистский (вероятность — это предел частоты при увеличении числа экспериментов) и байесовский (вероятность — это уверенность в том, что событие произойдёт). Вот вероятность дождя — это пример байесовской вероятности.

              0
              Не подскажете, в каком учебнике есть об этих двух подходах?
              Ок, а как проверить достоверность в случае байесовской вероятности? Событие-то одно будет.
                0
                Можно считать, что байесовская вероятность — это простая функция от коэффициента, по которому синоптик готов сделать ставку на то, что его прогноз сбудется. Например, если он говорит, что вероятность дождя 25%, значит, он готов заключить пари, что дождя не будет, поставив 3 против 1.
                  0
                  Тут происходит небольшая путаница в понимании. Следует различать следующие две постановки вопросов: вероятность дождя/события при таких то условиях — это то что я описал, но это не прогноз погоды на сейчас. И другой вопрос, прогноз произойдет ли это событие сейчас. Этот вопрос в статье я не описывал.
                    0
                    Не подскажете, в каком учебнике есть об этих двух подходах?

                    Можно просто про байесовский подход почитать. Например, можно начать с наглядного объяснения теоремы Байеса


                    Ок, а как проверить достоверность в случае байесовской вероятности? Событие-то одно будет.

                    А как проверить фреквентистскую вероятность? Ведь вероятность равна частоте при большом числе испытаний только с некоторой вероятностью. То есть, мы определяем вероятность через вероятность. О чём-то подобном писал Литтлвуд в «Дилемме теории вероятностей».

                      0
                      Есть вероятность равна частоте с вероятностью например 95%, это вполне устроит)
                        +1

                        Та вторая вероятность, которая "с некоторой вероятностью", байесовская.

                        0

                        Байесовская вероятность зависит от наблюдателя. Она показывает, насколько данный наблюдатель будет удивлен, если событие произойдет. Ее можно непосредственно измерить после того, как данное событие (не) произойдет, по тому, как изменятся ожидания наблюдателя относительно других событий, т.е. по количеству информации.
                        Два разных человека могут приписать разные вероятность одному и тому же событию, и оба будут правы.

                    0
                    Здравствуйте.
                    В графике из Excel и следующем графике вы построили функции плотности бета распределения, оно в рассматриваемых вами случаях является сопряженным априорным распределением для параметра биномиального распределения. Параметры этих бета распределений в ваших примерах — (5,2); (8,3); (12, 4) и (25, 7). Например в R первую из этих функций можно построить командой curve(dbeta(x, 5, 2)). Выполнить эту команду и посмотреть результат можно здесь.

                    Доверительный интервал для параметра биномиального распределения по данным наблюдений можно найти используя метод Клоппера-Пирсона (или, как вариант, снова задействовать бета распределение). Так для 24 успехов из 30 испытаний 95% интервал Клоппера-Пирсона в R находится как binom.test(24, 30, conf.level = 0.95)$conf.int. В результате получаем (0.61, 0.92).
                    update: для дов. интервала взял цифры не из того графика автора, исправил.
                      0
                      Это да, но у меня это более простыми методами продемонстрированно как это образуется, возможно будет понятно более широкому кругу людей.
                        0
                        Тогда, на мой взгляд, вам стоило добавить, что помимо сэмплирования можно обойтись формулами. При таком подходе вместо усеченного нормального 0.5, 0.1 распределения органичней смотрится beta распределение с параметрами 12.75, 12.75. Эти распределения почти неразличимы.

                        код в R
                        # 2*pnorm(0, 0.5, 0.1) < 6*e-07, поэтому допустим обычный dnorm(0.5, 0.1)
                        curve(dnorm(x, 0.5, 0.1), lwd = 3, col = "red", ylab = "PDF")
                        curve(dbeta(x, 12.75 , 12.75), lwd = 3, col = "blue", lty = 2, add = T)
                        legend(0, 4, c("Normal(0.5, 0.1)", "Beta(12.75, 12.75)"), lwd = 3,
                        col=c("red", "blue"), lty = 1:2, bty = "n")


                        И мы вновь можем воспользоваться формулами.
                        Ваш график для случая 40/50 строится как curve(dbeta(x, 52.75, 22.75)).
                        А границ дов. интервала находятся как qbeta(0.025, 52.75, 22.75) и qbeta(0.975, 52.75, 22.75).
                          0
                          Вашы посты для меня очень итересны. Но обычно те кто хорошо знает тему, они не очень торопятся объяснять, особенно так что бы было понятно
                          тем кто еще не знает. Можете ли разъяснить, как были получены коэффициенты для бета распределения? И так же интересует, как расчитывать доверительные интервалы для этих распределений без
                          программы R, мне по крайней мере это нужно в c++, и текущий используемый мной вариант несколько ужасен.
                            +1
                            Параметры beta распределения находил в предположении его симметричности и что максимум его функции плотности должен совпадать dnorm(0.5, 0.5, 0.1). То есть, решил уравнение dbeta(0.5, x, x) = dnorm(0.5, 0.5, 0.1). В общем случае надо использовать функцию плотности усеченного нормального распределения — dtruncnorm.

                            Для расчета квантиль функций проще всего использовать с/c++ библиотеки. В частности, бета распределение в GSL и в Boost. Или вы хотите реализовать эти вычисления самостоятельно?
                              0
                              Не, самостоятельно реализовывать это лишне, если уже есть. Там пределы предельных формул, это уже за пределами моих возможностей и дефицита времени).

                              А вот эта dbeta(x, 52.75, 22.75) как образовалась? Исходные это dbeta(x,12.75,12.75) и dbeta(x,41,11). Можно было бы предположить какую-нибудь слагаемость, но получается лишняя единичка.
                                0
                                При априорном равномерном распределении параметры равны (1,1), так как dunif(0,1) = dbeta(1,1).
                                При априорном усеченном нормальном распределении параметры равны (12.75, 12.75).
                                После 40 успехов в 50 испытаниях апостериорные параметры получаются равными (41, 11) при первом предположении и (52.75, 22.75) во втором случае.
                                  0
                                  Вот эта цифра 52.75, это образовалось таким образом 41+12.75-1? Если да, то на основании каких свойств?
                                    0
                                    Нет, 52.75 = 12.75 + 40. Используем число наблюдаемых успехов — 40.
                                      0
                                      Непонятно почему именно здесь именно так, но удостоверюсь итерационно, и буду использовать.

                                      В любом случае спасибо, как раз поставил gsl и посчитал квантили от бета. Давно искал.
                                        +1
                                        Честно говоря, мне непонятно, почему вы в качестве слагаемого хотите использовать 41. Откуда появилась эта дополнительная 1, ведь число успехов 40? Вероятно, мы друг друга недопонимаем.
                                        Посмотрите вывод этой формулы, например, здесь или в википедии.
                                          0
                                          Именно такие отсылки я и хотел увидеть, спасибо, буду осмысливать.
                      0
                      Доверительный интервал часто используют не в процентах, а в сигмах(среднеквадратичных отклонениях).
                      Например, в физике частиц, явление признают, если статистическая значимость не менее 5 сигм (т. е. с вероятностью 1 — 0.0000003)
                        0
                        Это допустимо только для симметричных функций. Значение вероятности распределяется не симметрично, значит одна из сторон области будет кривой и может вообще выйти за границы 0..1.
                        +1
                        Полученный расчет закинул в эксель и сделал график

                        image
                          +2

                          А чем вам ексель не угодил? Я бы лично делал визуализацию в R, ну или Python, просто потому что мне так привычнее, но когда я смотрю на график, мне всё равно, как он сделан, лишь бы был корректным и легко читаемым.

                          0
                          Вероятность можно оценить до опыта из соображений симметрии. Есть правильная игральная кость, вероятность выпадения каждой грани одна шестая. Дальше бросаем эту кость, будет ли частота стремиться к вероятности? Если бросать каждый раз совершенно (идеально) одинаково, то и выпадать должна одна и та же грань. Но мы бросаем не совсем одинаково и разница быстро увеличивается, если кость подпрыгнет пару раз. На эту тему есть наука «эргодическая теория» (частота стремится к вероятности, если выполнено некоторое «свойство перемешивания», то есть первоначальные малые различия быстро растут со временем).
                            0
                            >Вероятность можно оценить до опыта из соображений симметрии.
                            из соображений механических и прочих свойств исследуемого события. Что я и делаю относительно монеты — делаю предпосылку что там более специфичная вероятность. И уже после еще более уточняю первую предпосылку. Для игральной кости разбросы могут быть не в десятые вероятности, а в тысячные или более. Но дальше картина та же.

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

                          Самое читаемое