Data Analyst · #054 · September 23, 2026 · 2 min read
Why is correlation not causation? The r = 0.9 traps, explained
What r actually measures, the three ways a strong correlation lies, the classic confounder examples, how to sanity-check a scatter, and what it takes to claim a cause: one page.
Get the free PDF
One page, print-ready, free to share. No signup needed.
r = 0.91 still proves nothing. Correlation is a screening tool: it tells you where to look, never what to conclude. One page on why, and on what a causal claim actually costs. The print-ready A4 PDF is at the bottom.
What r says
r = corr(x, y): from -1 to +1, linear co-movement only.- r = 0.9 means the two series move together. That is the entire claim.
- r² = 0.81: the share of variance they share. Shared, not caused.
The three ways it lies
- Third variable: z drives both x and y.
- Reverse direction: maybe y drives x.
- Pure chance: test 100 pairs at random and about 5 will look "significant".
The classics
- Ice cream ↔ drownings: the confounder is summer.
- Shoe size ↔ reading skill (in children): the confounder is age.
- Metric ↔ metric on your dashboard: both just grow with time.
Check yourself
df = beach.groupby("month")[["icecream_sales", "drownings"]].sum()
df.corr().iloc[0, 1]
# 0.91
# same pairs, within one season only
df[df.season == "summer"].corr().iloc[0, 1]
# 0.08 <- the "link" was the sun all along
- Plot it first: r misses curves. A parabola scores r = 0.
- One outlier can fake an r of 0.8 on its own. n = 12 with one extreme point is not a finding.
- De-trend before correlating time series, or time links everything to everything.
Toward causation
| You have | You can claim | How |
|---|---|---|
| a randomized test | causation | random assignment kills confounders |
| a natural experiment | causation, carefully | policy change, threshold, lottery |
| observational data | association | control for named confounders |
The trap: what it looks like vs what it is
| Looks like | Is often | So |
|---|---|---|
| feature use ↔ retention | power users do both | run an experiment |
| ad spend ↔ revenue | both rise in Q4 | de-trend, compare YoY |
| r = 0.8, n = 12 | chance plus one outlier | plot it, drop the point |
Interview phrasing worth memorizing: correlation is where the investigation starts, not where it ends. Say "moves with", never "drives", until you have run the experiment.
Frequently asked questions
What does a correlation of 0.9 actually mean?
Only that the two variables move together linearly. r says nothing about direction of influence or mechanism: a third variable can drive both (summer drives ice cream sales and drownings), the causality can run the other way, or with enough pairs tested it can be pure chance. r squared (0.81 here) is the share of variance the two series share, still not a cause.
Can a correlation of zero mean the variables are related?
Yes. Pearson's r only detects linear relationships. A perfect U-shape (a parabola) scores r close to 0 even though y is fully determined by x. That is why you plot the scatter before reading any correlation number: curves, clusters and outliers are invisible in r.
What is a confounder, with a concrete example?
A third variable that drives both of the ones you measured. The classic: ice cream sales correlate with drownings at r near 0.9 across months, because summer drives both. The desk check is to control for it: compare within one season only, and if r collapses (0.91 to 0.08), the confounder owned the correlation.
How do you actually establish causation?
The gold standard is a randomized experiment: random assignment breaks every confounder at once. When you cannot randomize, use a natural experiment or control for the confounders you can name (compare within groups, add covariates to a regression). A p-value below 0.05 on a correlation does not upgrade it to a cause: significance and causality are separate questions.
Get the free PDF
One page, print-ready, free to share. No signup needed.