Парадокс Монти Холла простыми словами
Содержание:
Зачем это знать
Монти Холл — легендарная задача на собесах в ML/DS. На первый взгляд ответ очевиден (не менять выбор), на самом деле правильный ответ противоречит интуиции (менять!). Задача проверяет умение думать в терминах условной вероятности.
Даже если не попадёт прямо на собесе — научит мыслить вероятностно.
Задача
Вы на ТВ-шоу. 3 двери: за одной машина, за двумя — козы. Выбираете дверь (скажем, №1).
Ведущий (который знает, где машина) открывает одну из оставшихся дверей с козой (скажем, №3).
Вопрос: стоит ли менять выбор на №2?
Правильный ответ
Интуиция (неправильная)
«Осталось 2 двери, 50/50, всё равно». Это неверно.
Правильный ответ — менять
Менять стоит! Вероятность выиграть машину:
- Не менять: 1/3
- Менять: 2/3
Менять — 2× больше шансов.
Почему
Вероятность угадать машину с первого раза = 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, менять не важно.
«Практическое применение?» Условная вероятность в ML — обновление оценок после получения новой информации.
Частые ошибки
1. Считать вероятности одинаковыми после действия ведущего
Действие ведущего несёт информацию. Вероятность не «пересчитывается» симметрично на две оставшиеся двери — она остаётся 1/3 для вашей двери и 2/3 для второй.
2. Забыть, что ведущий знает, где машина
Если ведущий открывает случайную дверь (и мог случайно открыть машину) — задача другая, и ответ 50/50. Три условия парадокса не факультативны.
3. Путать с независимыми событиями
Выбор участника и действие ведущего не независимы — ведущий выбирает дверь на основании того, какую выбрал участник. Это ядро парадокса.
4. Экстраполировать на любые задачи с 3 вариантами
Не всякая задача с тремя вариантами — Монти Холл. Нужно конкретно: ведущий знает ответ, всегда открывает пустую дверь, всегда предлагает смену.
Связанные темы
FAQ
Это точно правда?
Да. Симуляции и математика подтверждают.
Почему интуитивно кажется 50/50?
Мозг игнорирует conditional information (действие ведущего).
Monty Fall problem?
Вариант, где ведущий случайно «падает» и открывает дверь. Тогда вероятности другие.