Парадокс Монти Холла простыми словами

Карьерник — квиз-тренажёр в 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 дверей, просто менее очевидно.

Ключевое условие

Парадокс работает только если:

  1. Ведущий знает, где машина
  2. Ведущий всегда открывает дверь с козой
  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+ вопросами для собесов.