Gambler's Fallacies, Monty Hall, Probability, and Adventure Design
How understanding probabilities can decrease frustration and help GMs create narrative challenges.
Every now and then I encounter a book that changes the way I think about the world. Sometimes the book has one insight and sometimes it has several. In the case of Daniel Kahneman's Thinking, Fast and Slow, I've lost count of the ways it forced me to re-evaluate my perceptions. This is partly because the book covers a lot of important findings in the field of Psychology and partly because it presents so many interesting observations. One of my many takeaways from the book is how people don't think intuitively about statistics.
Let me restate that in a paraphrase, while our mind is great at seeing patterns in nature (even sometimes when they are not there) our mind is not great at seeing the patterns that underlie probabilities and statistics. We might be able to quickly guess how many people are in a room, but ask us to evaluate a probability on the fly and we are likely to make an error. Ask them to evaluate what Nate Silver means by an 80.9% chance to win an election and they won’t quite make the connection.
This is an important observation for game design and game play. We've all seen the player who has rolled several low scores on to hit rolls in a D&D session who says "the odds are getting better of me rolling a 20" or the player who has rolled 6 "aces" in a row in Savage Worlds who picks up the dice and says "the odds of me acing again are 1/(some huge number)." In both cases, the individual is wrong and is committing the "Gambler’s Fallacy.” While it is true that given a sufficiently large sample (and we are talking thousands of rolls) that the die rolls of a player will tend toward the mean, it is important to remember that prior die rolls have no influence on future die rolls. Dice don’t have memories and actively change their future behavior based on past performance.
As an illustration of that, the player who has already rolled 6 "aces" has exactly a 1/6 chance (assuming a d6 is being rolled) of acing on the 7th roll. The prior rolls have no influence over the initial roll. The answer would be different if the person had stated before rolling at all that there chances of acing 7 times was 1/(some huge number) but it isn't true after the person has successfully aced 6 rolls and is now rolling the seventh roll.
To put it in D&D related terms, let’s assume you roll a d20 approximately 40 times over the course of session for combat rolls and saving throws. If you have a streak of 10 rolls that are 10 are lower that has no effect on the remaining 30 rolls that evening. Each of those rolls will have a 50% chance of being 10 or less (low) or 11 or greater (high). This can be demonstrated via a quick computer modeling using the R code below.
library(tidyverse)
library(purrr)
set.seed(201201) # Sets the seed for replication
die <- seq(1,20) # creates the evenly distributed 20 sided die
n_sequences <- 1000000 # The number of simulations of 40 rolls that will be run.
n_rolls <- 40 # The Number of rolls in the simulation
watching_window <- 1:10 # Creating a variable that has us look at the first ten "rolls" in each sequence
bet_window <- (1:n_rolls)[- watching_window] # A variable representing the remaining numbers
n_low <- 10 # Setting the boundary for what a "low roll" is, in this case 10 or less
sequences <- map(1:n_sequences, ~sample(die, n_rolls, replace = TRUE)) # Rolling 40 d20 1 Million times.
### Creating a list of all the sets where the first 10 rolls are low. In this case 1% or 1006 were low.
lowroll <- sequences[map_lgl(sequences, function(sequence) sum(sequence[watching_window] <= 10) >= n_low)]
### Tallying the rolls that would be considered "high" in order to get a proportion.
high_tally <- map_dbl(lowroll, function(sequence) sum(sequence[bet_window] >= 11 ))
### Get Proportion of the rolls that were high in the remaining 30 rolls
p_high <- high_tally/30
results <- tibble(p_high)
results
prop_high <- mean(p_high)
## Illustrate the Density of High Outcomes showing what percentage were high vs. low
tibble(p_high) %>%
ggplot(aes(x = p_high)) +
geom_density(fill = "lightblue", alpha = 0.8, colour = "lightblue") +
geom_vline(xintercept = 0.5, linetype = 1) +
geom_vline(xintercept =prop_high, linetype = 2) +
annotate("segment", x = prop_high, xend = 0.64, y = 3, yend = 3, linetype = 2) +
annotate("segment", x = 0.5, xend = 0.64, y = 2.7, yend = 2.7, linetype = 1) +
annotate("text", x = 0.67, y = 3, label = prop_high, size = 8, hjust = 0, family = "serif") +
annotate("text", x = 0.67, y = 2.7, label = "p = 0.5", size = 8, hjust = 0, family = "serif") +
theme_minimal() +
theme(
plot.title = element_blank(),
axis.title = element_blank(),
axis.text.y = element_blank(),
axis.text.x = element_text(margin = margin(0.5, 0, 0.5, 0)),
plot.subtitle = element_text(lineheight = 0.3, margin(0,0,0,50), hjust = 0)
) +
scale_x_continuous(breaks = round(seq(5,25,5)/30, 1), labels = round(seq(5,25,5)/30,1))
This code simulates 1 million evenings of play and examines the 1,006 times during those evenings where your first 10 rolls were 10 or lower to see if the later rolls were more likely to be high or low. The Gambler’s fallacy is that a disproportionate number of these 30 rolls should be higher in order to “balance things out” because a “high roll is due.” What do we find?
We find that 49.897% of future rolls are 11 or higher in these 1,006 cases. If the gambler’s fallacy were true, this number should be significantly higher than 50%. It isn’t. Using the same set.seed number, you should get the same results (or at least very similar if there are differences in the way your computer generates random numbers), but you can run the simulation without setting a seed and you will see the same pattern again and again.
No matter how much you want them to, the dice are not going to get better just because they rolled poorly earlier in the evening.
When I was a 21/Craps dealer as an undergraduate student at the University of Nevada (yes, I paid for my undergrad as a 21/Craps dealer), I saw how this kind of flawed logic could have real financial consequences.
"Wow!" The player would say, "there have been a lot of 7's rolled in a row, so it's time to 'buy' the 4 at a 5% vig." Their underlying assumption is that prior rolls affect future outcomes in die rolls. They don't, and in this case it cost them money. In the gamer’s case, it just causes them to put their die in dice jail.
All of which is to say, let the dice fall where they may and have a good time, but remember that it is unlucky to be superstitious.
Interestingly, when players are in situations where prior decisions DO affect future outcomes they are often just as prone to intuitively come to the wrong conclusion and this is something that could potentially be used in a gaming situation. A great example of this phenomenon is the Monty Hall problem where a player is given three choices, shown the results of one of the selections they did not make, and then asked to either switch or keep their original choice. The correct answer to this question - because prior choices DO affect outcomes in this case - is counter intuitive. I'll let the good folks at Khan Academy explain why.
Think about how this dilemma will affect game play in hidden information games that you design and play. And let this be a reminder that understanding how a probabilities work can make you a better player, designer, or game master.
Imagine how you could use an understanding of the Monty Hall problem as the basis for a mimic trap.
GM: “There are three chests. One of them contains wealth beyond measure, the other two are mimics that will attack the party. Which one will you pick?”
Player: “I pick chest #3.”
GM: “Are you sure. I’ll reveal that chest #2 is a mimic and it won’t attack unless the other is activated. Do you want to switch your answer before I tell you whether you are correct or not?”
Player: “No.”
GM: “Are you sure?…”