Takeaway

If the host always opens a goat door and offers a switch, switching doubles your chance of winning: from 1/3 to 2/3.

The problem (before → after)

  • Before: It feels like 50/50 after a goat is revealed—two doors remain.
  • After: Conditioning on the host’s informed action shows your original 1/3 stays on your first pick; the unopened other door aggregates the remaining 2/3.

Mental model first

You pick one door out of three: 1/3 chance it’s the car. Monty, who knows where the car is, removes a wrong option for you. If you picked wrong (2/3 of the time), switching transfers you to the car; if you picked right (1/3), switching loses. Thus, switching wins 2/3 overall.

Just-in-time concepts

  • Conditioning: Update probabilities when someone acts with information.
  • Law of total probability: Sum over cases (car behind your pick vs not).
  • Symmetry: The host’s rule breaks symmetry in your favor.

First-pass solution (case analysis)

Let C be event “car behind first choice.” P© = 1/3. If C, Monty opens a goat door and switching loses. If not C (prob 2/3), Monty is forced to open the only goat door among the other two, and switching wins. Therefore P(win by switch) = 2/3.

Iterative refinement

  1. N-door generalization: With N doors, one pick, host opens N−2 goat doors → switching wins with probability (N−1)/N.
  2. Imperfect host: If the host sometimes opens randomly or can reveal the car, the advantage shrinks; compute with Bayes’ rule.
  3. Simulation validates intuition when assumptions hold.

Code as a byproduct (simulation)

import random

def monty_trial():
    car = random.randrange(3)
    pick = random.randrange(3)
    # Host opens a goat door not equal to car or pick
    doors = {0,1,2}
    open_options = [d for d in doors if d != car and d != pick]
    opened = random.choice(open_options)
    switch_to = (doors - {pick, opened}).pop()
    win_if_switch = (switch_to == car)
    return win_if_switch

def estimate(n=100000):
    return sum(monty_trial() for _ in range(n)) / n

prob = estimate()

Principles, not prescriptions

  • Track information flow: actions taken with knowledge change probabilities.
  • Prefer partitioning into simple cases over gut-feel symmetry.
  • Use simulation to sanity-check conditional reasoning.

Common pitfalls

  • Assuming a random host: If Monty can reveal the car or choose adversarially, results differ.
  • Confusing “two doors remain” with “equal probability.” Conditioning matters.

Connections and contrasts

  • See also: [/blog/simpsons-paradox] (conditioning reversals), [/blog/bayesian] (Bayes’ rule mindset), [/blog/kelly-criterion] (decisions under uncertainty).

Quick checks

  1. Why isn’t it 50/50 after a goat is revealed? — The host’s knowledge keeps 2/3 on the other unopened door.
  2. What if the host opens doors at random? — Advantage depends on the chance of revealing the car; compute with Bayes.
  3. How does it scale to N doors? — Switching wins with probability (N−1)/N under the same host rules.

Further reading

  • American Statistician correspondence on the Monty Hall problem
  • “Fifty Challenging Problems in Probability” (Mosteller)