05 — Cognitive Biases

Hindsight Bias#

Statistical1 min read
◆ The PatternOnce the outcome is known it feels as if it was predictable all along, and memory quietly rewrites the odds

Hindsight bias — "I knew it all along." After an outcome, people believe they predicted it.

The damage:
1. Prevents learning — if you "knew," there's nothing to improve
2. Creates overconfidence in future predictions
3. Makes past decisions look obvious when they weren't
4. Leads to unfair self-criticism ("how could I miss that?")

Fix: Keep a decision journal. Record your reasoning before the outcome. Compare predictions to results. Humbling — and educational.

Worked example

Five forecasts written down beforehand, then recalled after the outcome. On average the remembered forecast moved 22 points toward what happened. Scored honestly the forecasts have a Brier score of 0.35 (0 is perfect, 0.25 is a coin); the remembered ones score 0.14. Memory turned a below-coin forecaster into a good one.

Where it misleads
  • It is invisible from the inside. Only a record made before the outcome can show it, which is why a decision journal works and reflection alone does not.
  • The opposite mistake exists too: judging a good decision by a bad outcome. Some bets are right and still lose.
  • Biais & Weber (2009) found investment bankers with more hindsight bias earned less — it blocks learning, not just pride.
In code
log = pd.DataFrame({
    'event':      ['rate cut', 'earnings beat', 'recession', 'oil above 100', 'index new high'],
    'said':       [0.30, 0.55, 0.20, 0.40, 0.60],      # written down beforehand
    'happened':   [1, 0, 1, 0, 1],
    'remembered': [0.60, 0.35, 0.45, 0.25, 0.80]})     # what you later recall having said
toward_outcome = np.where(log.happened == 1, log.remembered - log.said, log.said - log.remembered)
brier_said = ((log.said - log.happened) ** 2).mean()   # lower is better
brier_remembered = ((log.remembered - log.happened) ** 2).mean()
Python, in your browser — edit the code and run it again

Assumes import numpy as np and import pandas as pd. Each snippet carries its own example numbers; the comments say which are made up.

Sources
  • B. Fischhoff, “Hindsight ≠ Foresight: The Effect of Outcome Knowledge on Judgment under Uncertainty”, Journal of Experimental Psychology: Human Perception and Performance 1(3), 1975
  • N. J. Roese & K. D. Vohs, “Hindsight Bias”, Perspectives on Psychological Science 7(5), 2012
  • B. Biais & M. Weber, “Hindsight Bias, Risk Perception, and Investment Performance”, Management Science 55(6), 2009

Last reviewed October 2026 · How this site checks its content · Report a mistake

Pattern bridge: Believing you knew it all along is overfitting to the training set — perfect past fit, no future predictive power. In statistics, p-hacking manufactures the same false certainty.
Linked from 3
← Previous
Availability Heuristic
Open in the full reader, with the topic sidebar