Мы все слышали вероятностную головоломку для трехдверного игрового шоу. Каждый участник угадывает, что находится за дверью, ведущий показывает одну из трех дверей, на которой не было приза, и дает возможность участнику поменяться дверьми. Гипотезировано и фактически доказано с использованием условной вероятности, что смена дверей увеличивает ваши шансы до удивительных 66%. Но подождите, когда я вошел в игру и понятия не имел, какая дверь с призом, у меня был 33% шанс на победу, и когда ведущий открыл одну из дверей без призов, разве это не означает, что остаются две двери и их шансы на победу 50-50. Почему я должен переключаться? Что ж, если вы относитесь к тому типу людей, которые не верят тому, что вы слышите по телевизору или тому, что читаете в колонке забавных фактов в журнале, но проявляете интерес к математическим доказательствам, вот ваш ответ.

Источник доказательства: https://www3.nd.edu/~jstiver/Exec_Micro/Monty%20Hall.pdf

Ниже приведены начальные вероятности, когда вы приходите на игровое шоу.

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

Первая вероятность (слева) отвечает на вопрос: если вы выбрали дверь 1, а приз был за дверью 1, какова вероятность того, что ведущий откроет дверь 3? Ответ 50%, ведущий может открыть либо дверь 3, либо дверь 2, потому что у обеих нет призов. Но ключевой концепцией здесь является то, что вероятность существует, потому что вы начали с двери 1.

Если вы выбираете дверь 1, а приз находится в двери 2 (посередине), весьма вероятно, что ведущий откроет дверь 3, потому что дверь 1 уже выбрана участником, а дверь 2 имеет приз, поэтому ведущий может открыть только оставшаяся дверь без приза, которая равна 3.

Теперь, если приз был в двери 3, нет никаких шансов, что ведущий откроет дверь 3 после того, как участник выберет дверь 1. Как и в предыдущем сценарии, в этом случае ведущий всегда откроет дверь 2. Таким образом, если мы начинаем с двери 1, вероятность открытия двери 3, если у двери 3 есть приз, равна 0.

Теперь, когда мы поняли ход рассуждений, давайте предположим, что в этом примере ведущий открывает дверь 3. У двери 3 нет приза, как теперь мы можем быть уверены, что у двери 2 есть приз?

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

Мы просто добавляем информацию, которую мы собрали до сих пор. Основное понятие, которое здесь следует понимать, — это вероятностное утверждение в крайнем левом углу. Он вычисляет вероятность успеха для двери 2, учитывая, что дверь 3 не имеет призов, и наш первоначальный выбор был дверью 1. Таким образом, шансы на успех составляют 2/3, когда мы переключаемся! Альтернатива; если бы мы остались с дверью 1 в этом сценарии, шансы на победу были бы следующими.

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

Теперь самое интересное. Давайте посмотрим, так ли это на самом деле!

%matplotlib inline
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
from time import time as TT
from random import choice as ch
import numpy as np
ac = []
tc = []
N = []
st = TT()
for M in range(1,10000): #Outer loop from 1 to 10000
    st1 = TT()
    score = []
    runs = 0
    cards = [1,2,3]
    for K in range(1,M): # sub loop that simulates 1 to M(outerloop) games
        aset = []
        host = cards.copy()
        hbk = ch(host) #Randomly choose as answer which host knows
        aset.append(hbk)
        #print("The host knows the answer",hbk)
        player = cards.copy()
        px = ch(player) # Contestanrs random guess
        aset.append(px)
        #print ("Players first choice",px)
        chance = 0
        for i in host: # The computation....host will eliminate P(X|DOOR) = 0
            if i not in aset:
                chance = i
        #print ("The elimination",chance)
        #print (player)
        player.pop(player.index(chance))
        player.pop(player.index(px))
        #print ("final answe",player)
        if player[0] == hbk:
            score.append(1)
        else:
            score.append(0)
        runs = K
        #print ("\n\n")
    ac.append(np.mean(score))
    N.append(M)
    en1 = TT()
    tc.append(en1-st1)
en = TT()    
print ("Total time for Loop  ", en - st )

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

Основная логика этой программы заключается в том, что после того, как участник выберет первую дверь, ведущий исключит дверь, которую участник не выбрал, или дверь, ответ на которую был правильным. Если первое предположение участников было правильным, дверь, выбранная для открытия, является случайным процессом. Но то, как работают мои вычисления, будет последним элементом списка (1,2,3), если этот элемент не является правильным ответом. После этого в целях моделирования участник всегда будет менять свои ответы после раскрытия информации. Таким образом, пройдя эту симуляцию, мы получим следующие результаты.

Ось X — это количество сыгранных подигр. Ось Y — это среднее количество выигранных подигр. Вы можете видеть, что между 0–100 дополнительными играми существует много различий, но после отметки 2000 и почти 10 000 среднее количество выигранных дополнительных игр сходится к 64–68% (максимум 70). Что подтверждает наши первоначальные рассуждения о том, что они были получены с помощью теоремы Байеса.

Эта теория могла бы масштабироваться по-другому, если бы у нас было более 3 вариантов или меньше.

Код: https://github.com/siddharthapachhai/PythonSamples/blob/master/MontyHall.py