01 — Cognitive Biases

Confirmation Bias#

Statistical1 min read
◆ The PatternThe tendency to search for, interpret, and remember information that confirms your existing beliefs — while ignoring contradictory evidence.

Confirmation bias is the tendency to search for, interpret, and recall information that confirms existing beliefs.

In trading: You believe Tesla will go up → you read only bullish analyses → ignore bearish data → feel increasingly "certain" → but your certainty is built on a filtered dataset.

Mitigation: Actively seek the strongest opposing argument. Write down what would make me wrong before every trade. Track whether your "confirming" sources were actually predictive.

Worked example

You start 60% sure of a bullish thesis and then meet six pieces of evidence: three for it and three just as strong against. Weighed fairly they cancel, and you should end where you began: 60%. Give the contrary evidence half its weight and the same pile leaves you at 73%. Five rounds of the same balanced news later you are 97% sure — certainty built entirely from the filter, not from the evidence.

Where it misleads
  • Not every strong prior is a bias. Discounting a weak or unreliable source is correct; the bias is discounting evidence because it disagrees.
  • Searching for confirming cases can be an efficient test when the hypothesis is rare (Klayman & Ha 1987); the trouble is treating the search as proof.
  • Knowing about the bias does not remove it. A written “what would make me wrong” before the trade works better than good intentions.
In code
prior = 0.60                                    # how sure you are the bullish thesis is right
lr = [1.5, 1.5, 1.5, 1 / 1.5, 1 / 1.5, 1 / 1.5]  # three pieces of evidence for it, three equally strong against

def update(p, lrs, w_against=1.0):               # Bayes in log-odds; w_against < 1 discounts contrary evidence
    logit = np.log(p / (1 - p))
    for x in lrs:
        logit += np.log(x) * (w_against if x < 1 else 1)
    return 1 / (1 + np.exp(-logit))

fair = update(prior, lr)
biased = update(prior, lr, w_against=0.5)
biased_after_5_rounds = update(prior, lr * 5, w_against=0.5)
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
  • R. S. Nickerson, “Confirmation Bias: A Ubiquitous Phenomenon in Many Guises”, Review of General Psychology 2(2), 1998
  • P. C. Wason, “On the Failure to Eliminate Hypotheses in a Conceptual Task”, Quarterly Journal of Experimental Psychology 12(3), 1960 — the 2-4-6 task
  • J. Klayman & Y.-W. Ha, “Confirmation, Disconfirmation, and Information in Hypothesis Testing”, Psychological Review 94(2), 1987
  • J. Park, P. Konana, B. Gu, A. Kumar & R. Raghunathan, “Information Valuation and Confirmation Bias in Virtual Communities: Evidence from Stock Message Boards”, Information Systems Research 24(4), 2013

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

Pattern bridge: Seeing what you expect to see is high bias in ML — the model only fits its prior assumption.
Linked from 1
Open in the full reader, with the topic sidebar