◆ The PatternUsing others' behavior as evidence of the "correct" action (Cialdini).
// Using others' behavior as evidence of the "correct" action (Cialdini).
Social proof (Cialdini, 1984) — using others' behavior as evidence of the correct action.
Market expressions: • "Everyone is buying crypto — it must be good" • Following influencer/expert recommendations blindly • Popularity of a stock = perceived quality • Crowded trades feel safe — until they reverse simultaneously
Social proof works well in stable, familiar environments. It fails catastrophically in uncertain, novel situations — exactly when you need independent thinking most.
Worked example
Ten songs of equal quality and 2,000 listeners, run five times. When each listener picks at random, the top song gets 11–12% of plays every time. When each picks in proportion to plays so far, the top song gets 18–46% — and a different song wins in every run. Popularity says more about who went first than about quality. Salganik, Dodds & Watts (2006) found the same in a real music market.
Where it misleads
Copying others is often a good shortcut: when they know more than you and decide independently, the crowd is informative.
It breaks when the crowd is copying itself, as in the simulation; then the signal is mostly noise amplified.
Asch’s conformity experiments (1956) are often cited for markets, but they were about visible group pressure on simple judgments, not about prices.
In code
rng = np.random.default_rng(1)
def market(social, songs=10, listeners=2000): # ten songs of equal quality
plays = np.ones(songs)
for _ in range(listeners):
p = plays / plays.sum() if social else np.full(songs, 1 / songs) # social: pick in proportion to plays so far
plays[rng.choice(songs, p=p)] += 1
return plays
top_share = lambda w: w.max() / w.sum()
alone = [top_share(market(False)) for _ in range(5)]
seen = [market(True) for _ in range(5)]
together = [top_share(w) for w in seen]
winners = [int(w.argmax()) for w in seen]
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
Influence: The Psychology of Persuasion, R. B. Cialdini, 1984
M. J. Salganik, P. S. Dodds & D. J. Watts, “Experimental Study of Inequality and Unpredictability in an Artificial Cultural Market”, Science 311(5762), 2006
S. E. Asch, “Studies of Independence and Conformity: I. A Minority of One Against a Unanimous Majority”, Psychological Monographs 70(9), 1956
Pattern bridge: Copying others as a decision shortcut is an embedding heuristic — if nearby vectors do it, so should I. In statistics, it’s the law of large numbers misapplied: consensus ≠ correctness.
Social Proof#
// Using others' behavior as evidence of the "correct" action (Cialdini).
Social proof (Cialdini, 1984) — using others' behavior as evidence of the correct action.
• "Everyone is buying crypto — it must be good"
• Following influencer/expert recommendations blindly
• Popularity of a stock = perceived quality
• Crowded trades feel safe — until they reverse simultaneously
Social proof works well in stable, familiar environments. It fails catastrophically in uncertain, novel situations — exactly when you need independent thinking most.
Ten songs of equal quality and 2,000 listeners, run five times. When each listener picks at random, the top song gets 11–12% of plays every time. When each picks in proportion to plays so far, the top song gets 18–46% — and a different song wins in every run. Popularity says more about who went first than about quality. Salganik, Dodds & Watts (2006) found the same in a real music market.
rng = np.random.default_rng(1) def market(social, songs=10, listeners=2000): # ten songs of equal quality plays = np.ones(songs) for _ in range(listeners): p = plays / plays.sum() if social else np.full(songs, 1 / songs) # social: pick in proportion to plays so far plays[rng.choice(songs, p=p)] += 1 return plays top_share = lambda w: w.max() / w.sum() alone = [top_share(market(False)) for _ in range(5)] seen = [market(True) for _ in range(5)] together = [top_share(w) for w in seen] winners = [int(w.argmax()) for w in seen]Assumes
import numpy as npandimport pandas as pd. Each snippet carries its own example numbers; the comments say which are made up.Last reviewed October 2026 · How this site checks its content · Report a mistake