{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [ "remove_input" ] }, "outputs": [], "source": [ "path_data = '../../data/'\n", "\n", "import numpy as np\n", "import pandas as pd\n", "\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "plt.style.use('fivethirtyeight')\n", "\n", "import warnings\n", "warnings.filterwarnings('ignore')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# The Monty Hall Problem\n", "This [problem](https://en.wikipedia.org/wiki/Monty_Hall_problem) has flummoxed many people over the years, [mathematicians included](https://web.archive.org/web/20140413131827/http://www.decisionsciences.org/DecisionLine/Vol30/30_1/vazs30_1.pdf). Let's see if we can work it out by simulation.\n", "\n", "The setting is derived from a television game show called \"Let's Make a Deal\". Monty Hall hosted this show in the 1960's, and it has since led to a number of spin-offs. An exciting part of the show was that while the contestants had the chance to win great prizes, they might instead end up with \"zonks\" that were less desirable. This is the basis for what is now known as *the Monty Hall problem*.\n", "\n", "The setting is a game show in which the contestant is faced with three closed doors. Behind one of the doors is a fancy car, and behind each of the other two there is a goat. The contestant doesn't know where the car is, and has to attempt to find it under the following rules.\n", "\n", "- The contestant makes an initial choice, but that door isn't opened.\n", "- At least one of the other two doors must have a goat behind it. Monty opens one of these doors to reveal a goat, displayed in all its glory in [Wikipedia](https://en.wikipedia.org/wiki/Monty_Hall_problem):\n", "\n", "![Monty Hall goat](../../images/monty_hall_goat.png) \n", "\n", "\n", "\n", "- There are two doors left, one of which was the contestant's original choice. One of the doors has the car behind it, and the other one has a goat. The contestant now gets to choose which of the two doors to open.\n", "\n", "The contestant has a decision to make. Which door should she choose to open, if she wants the car? Should she stick with her initial choice, or switch to the other door? That is the Monty Hall problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Solution\n", "\n", "In any problem involving chances, the assumptions about randomness are important. It's reasonable to assume that there is a 1/3 chance that the contestant's initial choice is the door that has the car behind it. \n", "\n", "The solution to the problem is quite straightforward under this assumption, though the straightforward solution doesn't convince everyone. Here it is anyway.\n", "\n", "- The chance that the car is behind the originally chosen door is 1/3.\n", "- The car is behind either the originally chosen door or the door that remains. It can't be anywhere else.\n", "- Therefore, the chance that the car is behind the door that remains is 2/3.\n", "- Therefore, the contestant should switch.\n", "\n", "That's it. End of story. \n", "\n", "Not convinced? Then let's simulate the game and see how the results turn out." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simulation\n", "The simulation will be more complex that those we have done so far. Let's break it down.\n", "\n", "### Step 1: What to Simulate\n", "For each play we will simulate what's behind all three doors:\n", "- the one the contestant first picks\n", "- the one that Monty opens\n", "- the remaining door\n", "\n", "So we will be keeping track of three quantitites, not just one." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 2: Simulating One Play\n", "The bulk of our work consists of simulating one play of the game. This involves several pieces.\n", "\n", "#### The Goats\n", "We start by setting up an array `goats` that contains unimaginative names for the two goats." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "goats = np.array(['first goat', 'second goat'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To help Monty conduct the game, we are going to have to identify which goat is selected and which one is revealed behind the open door. The function `other_goat` takes one goat and returns the other." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "def other_goat(x):\n", " if x == 'first goat':\n", " return 'second goat'\n", " elif x == 'second goat':\n", " return 'first goat'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's confirm that the function works." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "('second goat', 'first goat', None)" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "other_goat('first goat'), other_goat('second goat'), other_goat('watermelon')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The string `'watermelon'` is not the name of one of the goats, so when `'watermelon'` is the input then `other_goat` does nothing." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The Options\n", "The array `hidden_behind_doors` contains the set of things that could be behind the doors." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "hidden_behind_doors = np.array(['car', 'first goat', 'second goat'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We are now ready to simulate one play. To do this, we will define a function `monty_hall_game` that takes no arguments. When the function is called, it plays Monty's game once and returns a list consisting of:\n", "\n", "- the contestant's guess\n", "- what Monty reveals when he opens a door\n", "- what remains behind the other door\n", "\n", "The game starts with the contestant choosing one door at random. In doing so, the contestant makes a random choice from among the car, the first goat, and the second goat.\n", "\n", "If the contestant happens to pick one of the goats, then the other goat is revealed and the car is behind the remaining door.\n", "\n", "If the contestant happens to pick the car, then Monty reveals one of the goats and the other goat is behind the remaining door." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def monty_hall_game():\n", " \"\"\"Return \n", " [contestant's guess, what Monty reveals, what remains behind the other door]\"\"\"\n", " \n", " contestant_guess = np.random.choice(hidden_behind_doors)\n", " \n", " if contestant_guess == 'first goat':\n", " return [contestant_guess, 'second goat', 'car']\n", " \n", " if contestant_guess == 'second goat':\n", " return [contestant_guess, 'first goat', 'car']\n", " \n", " if contestant_guess == 'car':\n", " revealed = np.random.choice(goats)\n", " return [contestant_guess, revealed, other_goat(revealed)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's play! Run the cell several times and see how the results change." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "['first goat', 'second goat', 'car']" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "monty_hall_game()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Step 3: Number of Repetitions\n", "To gauge the frequency with which the different results occur, we have to play the game many times and collect the results. Let's run 10,000 repetitions.\n", "\n", "### Step 4: Coding the Simulation\n", "It's time to run the whole simulation. \n", "\n", "We will play the game 10,000 times and collect the results in a table. Each row of the table will contain the result of one play. \n", "\n", "One way to grow a table by adding a new row is to use the `append` method. If `my_table` is a table and `new_row` is a list containing the entries in a new row, then `my_table.append(new_row)` adds the new row to the bottom of `my_table`. \n", "\n", "Note that `append` does not create a new table. It changes `my_table` to have one more row than it did before.\n", "\n", "First let's create a table `games` that has three empty columns. We can do this by just specifying a list of the column labels, as follows." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GuessRevealedRemaining
\n", "
" ], "text/plain": [ "Empty DataFrame\n", "Columns: [Guess, Revealed, Remaining]\n", "Index: []" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "games = pd.DataFrame(columns=['Guess', 'Revealed', 'Remaining'])\n", "\n", "games" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice that we have chosen the order of the columns to be the same as the order in which `monty_hall_game` returns the result of one game.\n", "\n", "Now we can add 10,000 rows to `trials`. Each row will represent the result of one play of Monty's game." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
GuessRevealedRemaining
0second goatfirst goatcar
1first goatsecond goatcar
2carfirst goatsecond goat
3second goatfirst goatcar
4carsecond goatfirst goat
............
9995second goatfirst goatcar
9996first goatsecond goatcar
9997carfirst goatsecond goat
9998first goatsecond goatcar
9999carsecond goatfirst goat
\n", "

10000 rows × 3 columns

\n", "
" ], "text/plain": [ " Guess Revealed Remaining\n", "0 second goat first goat car\n", "1 first goat second goat car\n", "2 car first goat second goat\n", "3 second goat first goat car\n", "4 car second goat first goat\n", "... ... ... ...\n", "9995 second goat first goat car\n", "9996 first goat second goat car\n", "9997 car first goat second goat\n", "9998 first goat second goat car\n", "9999 car second goat first goat\n", "\n", "[10000 rows x 3 columns]" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Play the game 10000 times and \n", "# record the results in the table games\n", "\n", "games = []\n", "for i in np.arange(10000):\n", " games.append(monty_hall_game())\n", " \n", "games = pd.DataFrame(games)\n", "\n", "games = games.rename(columns={0:'Guess', 1:'Revealed', 2:'Remaining'})\n", "\n", "games" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The simulation is done. Notice how short the code is. The majority of the work was done in simulating the outcome of one game." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Visualization\n", "\n", "To see whether the contestant should stick with her original choice or switch, let's see how frequently the car is behind each of her two options." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Guesscount
0car3257
1first goat3431
2second goat3312
\n", "
" ], "text/plain": [ " Guess count\n", "0 car 3257\n", "1 first goat 3431\n", "2 second goat 3312" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "original_choice = games.groupby([\"Guess\"]).agg(\n", " count=pd.NamedAgg(column=\"Guess\", aggfunc=\"count\")\n", ")\n", "\n", "original_choice1 = original_choice.copy()\n", "\n", "original_choice1.reset_index(inplace=True)\n", "\n", "original_choice2 = original_choice1.copy()\n", "\n", "original_choice2" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Remainingcount
0car6743
1first goat1646
2second goat1611
\n", "
" ], "text/plain": [ " Remaining count\n", "0 car 6743\n", "1 first goat 1646\n", "2 second goat 1611" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "remaining_door = games.groupby([\"Remaining\"]).agg(\n", " count=pd.NamedAgg(column=\"Remaining\", aggfunc=\"count\")\n", ")\n", "\n", "remaining_door1 = remaining_door.copy()\n", "\n", "remaining_door1.reset_index(inplace=True)\n", "\n", "remaining_door2 = remaining_door1.copy()\n", "\n", "remaining_door2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As our earlier solution said, the car is behind the remaining door two-thirds of the time, to a pretty good approximation. The contestant is twice as likely to get the car if she switches than if she sticks with her original choice.\n", "\n", "To see this graphically, we can join the two tables above and draw overlaid bar charts." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Original DoorRemaining Door
Item
car32576743
first goat34311646
second goat33121611
\n", "
" ], "text/plain": [ " Original Door Remaining Door\n", "Item \n", "car 3257 6743\n", "first goat 3431 1646\n", "second goat 3312 1611" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "remaining_door3 = remaining_door2.set_index(['Remaining'])\n", "\n", "joined = original_choice2.join(remaining_door3, on='Guess', how='left', lsuffix='_Original', rsuffix='_Remaining')\n", "\n", "combined = joined.rename(columns={'Guess':'Item', \n", " 'count_Original':'Original Door', \n", " 'count_Remaining':'Remaining Door'})\n", "\n", "combined.set_index('Item')" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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cgwDREREIscwQEREJHIMA0RERCLHMEBERCRyDANEREQixzBAREQkcgwDREREIscwQEREJHIMA0RERCLHMEBERCRyDANEREQixzBAREQkcgwDREREIscwQEREJHIMA0RERCLHMEBERCRyDANEREQixzBAREQkcgwDREREIscwQEREJHIMA0RERCLHMEBERCRyDANEREQixzBQQeTm5kIulyu7DCIiUkEMA0okl8sRGhqKFi1aQE9PD1ZWVvD39wcAzJ49Gy1btoS+vj6aNWsGPz8/ZGVlCesGBASgdevWiIqKgo2NDfT09JCZmamsVoiISIVpKrsAMZszZw5WrVqF+fPno23btnj27BkuXLgAANDW1kZYWBgMDAyQlJQEb29vaGlpYcaMGcL6d+7cQXR0NNauXQstLS1UqVJFWa0QEZEKU0tLS+OxZSXIyMiAmZkZAgIC4O7u/snlV69ejdDQUJw9exbA2yMDQUFBuHz5MvT09D66rkTyc0mUTFSqEhNdlV0CUbknk8lKZbs8MqAkSUlJyM7OhpOT03vnb9++HStWrMDNmzeRmZmJvLw85OXlKSxjaGj4ySBApCpK65dcSUlOTi73NRYXe1INZdETxwwoyccG+yUmJsLd3R2dOnXCpk2bEBcXB19fX7x580ZhOR0dndIuk4iIRIBHBpTEwsIClStXxtGjR2FmZqYw7+TJkzAwMMBPP/0kTLt7925Zl0hERCLBMKAk1atXx+jRo+Hv7w8tLS20bdsWz58/x7lz52Bubo6HDx9i8+bNsLe3x+HDhxETE6PskomIqILiaQIlmjVrFry8vLB48WLY29tj6NChePDgAbp3744JEybAx8cHbdu2RWxsLKZPn67scomIqILi1QQiwKsJSBWkpXkpu4SP4sA01cCePg+PDBAREYkcwwAREZHIMQwQERGJHMMAERGRyDEMEBERiRzDABERkcgxDBAREYkcwwAREZHIMQwQERGJHMMAERGRyDEMEBERiRzDABERkcgxDBAREYkcwwAREZHIMQwQERGJHMMAERGRyDEMEBERiRzDABERkcgxDBAREYkcwwAREZHIMQwQERGJHMMAERGRyGkquwAqfWlpXsouocQkJydDJpMpu4wSxZ6ISNl4ZICIiEjkGAaIiIhEjmGAiIhI5BgGiIiIRI5hgIiISOQYBoiIiESOYYCIiEjk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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "combined.plot.barh('Item', width=0.8, color=('navy', 'goldenrod'))\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Notice how the three blue bars are almost equal – the original choice is equally likely to be any of the three available items. But the gold bar corresponding to `Car` is twice as long as the blue. \n", "\n", "The simulation confirms that the contestant is twice as likely to win if she switches." ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.12" } }, "nbformat": 4, "nbformat_minor": 2 }