Парадокс Монти Холла простыми словами
Карьерник — квиз-тренажёр в Telegram с 1500+ вопросами для собесов аналитика. SQL, Python, A/B, метрики. Бесплатно.
Зачем это знать
Монти Холл — легендарная задача на собесах в ML/DS. На первый взгляд ответ очевиден (не менять выбор), на самом деле правильный ответ противоречит интуиции (менять!). Задача проверяет умение думать в терминах условной вероятности.
Даже если не попадёт прямо на собесе — научит мыслить вероятностно.
Задача
Вы на ТВ-шоу. 3 двери: за одной машина, за двумя — козы. Выбираете дверь (скажем, №1).
Ведущий (который знает, где машина) открывает одну из оставшихся дверей с козой (скажем, №3).
Вопрос: стоит ли менять выбор на №2?
Интуиция (неправильная)
«Осталось 2 двери, 50/50, всё равно».
Это неверно.
Правильный ответ
Менять стоит! Вероятность выиграть машину:
- Не менять: 1/3
- Менять: 2/3
Менять = 2x больше шансов.
Почему?
Первоначальный выбор
Вероятность угадать машину с первого раза = 1/3. Вероятность козы = 2/3.
После действия ведущего
Ведущий всегда открывает козу (знает, где машина).
Если ваш первый выбор был коза (вероятность 2/3), оставшаяся закрытая дверь — машина.
Если первый выбор был машина (1/3), оставшаяся закрытая дверь — коза.
Менять = выиграть с вероятностью 2/3.
Через Bayes
P(машина за №2 | ведущий открыл №3) =
P(ведущий открыл №3 | машина за №2) × P(машина за №2) / P(ведущий открыл №3)Если машина за №2, ведущий точно открывает №3 (не может №1 — выбор участника, не может №2 — там машина). P(открыл №3 | машина за №2) = 1.
Если машина за №1 (выбор), ведущий мог открыть №2 или №3. P(открыл №3 | машина за №1) = 1/2.
P(машина за №3) = 0 (открыл, там коза).
P(машина за №2 | открыл №3) = (1 × 1/3) / (1/3 × 1 + 1/3 × 1/2 + 0) = 2/3Симуляция в Python
import random
def monty_hall(switch):
prize = random.randint(1, 3)
choice = random.randint(1, 3)
# Ведущий открывает дверь с козой (не выбранную)
hosts_options = [d for d in [1,2,3] if d != choice and d != prize]
host_opens = random.choice(hosts_options)
if switch:
choice = [d for d in [1,2,3] if d != choice and d != host_opens][0]
return choice == prize
# 10 000 симуляций
wins_switch = sum(monty_hall(True) for _ in range(10000))
wins_stay = sum(monty_hall(False) for _ in range(10000))
print(f"Switch: {wins_switch/10000:.2%}") # ~66%
print(f"Stay: {wins_stay/10000:.2%}") # ~33%Интуиция через N дверей
Представьте 100 дверей, машина за одной.
Вы выбираете №1 (вероятность машины 1%).
Ведущий открывает 98 дверей с козами, оставляет вашу и ещё одну.
Менять? Очевидно да: ваши 1% vs оставшиеся 99%.
Та же логика в случае 3 дверей, просто менее очевидно.
Ключевое условие
Парадокс работает только если:
- Ведущий знает, где машина
- Ведущий всегда открывает дверь с козой
- Ведущий всегда предлагает сменить
Если эти условия нарушены — вероятности другие.
Эквивалентные задачи
Три конверта
В одном 100$, в двух — 1$. Выбираете один. Ведущий вскрывает конверт с 1$. Менять?
Да, та же логика.
Три карты
Карты: король, дама, валет. Тянете одну. Другому говорят «это не дама». Менять?
Да, вероятность не-вашей карты — 2/3.
На собесе
«Объясните Монти Холл». Показать интуицию + через Bayes.
«Почему это counter-intuitive?» Brain путает независимую вероятность и conditional.
«Что если ведущий случайно открыл дверь?» Тогда 50/50, менять не важно.
«Практическое применение?» Conditional probability в ML: учёт информации об observation.
Связанные темы
FAQ
Это точно правда?
Да. Симуляции и математика подтверждают.
Почему интуитивно кажется 50/50?
Мозг игнорирует conditional information (действие ведущего).
Monty Fall problem?
Вариант, где ведущий случайно «падает» и открывает дверь. Тогда вероятности другие.
Тренируйте вероятность — откройте тренажёр с 1500+ вопросами для собесов.