Causal Inference Explained — Correlation to Causation

Photo: RDNE Stock project / Pexels
"Correlation does not imply causation" is the most repeated sentence in statistics, and the least useful on its own. It tells you what not to conclude but not what to do instead. Causal inference is the set of methods for moving from "X and Y move together" to "changing X would change Y, by about this much." This guide explains the core ideas, the six methods data scientists use most, the assumptions each one quietly depends on, and a worked example you can adapt. The math stays light, but the logic is strict, because the whole field is about being honest on exactly the points where data alone cannot decide.
Why most useful questions are causal
Many data questions sound descriptive but are really causal:
- Did our marketing campaign cause the sales increase, or would sales have risen anyway?
- Does this drug reduce mortality?
- Will this product feature improve retention?
- Does an extra year of education raise income?
Each question asks what would happen under an action. If you cannot answer it, you can describe what happened but cannot responsibly decide what to do next. Predictive questions are different. "Which customers are likely to churn?" needs correlations that hold up out of sample. "Will a discount stop this customer from churning?" needs a causal answer, because the discount changes the situation the prediction was built on.
That distinction is the single most useful filter in applied work. If you will act on the analysis by changing something, you are asking a causal question, and a model that predicts well is not enough.
The fundamental problem: you never see the counterfactual
The standard framework, often called the Rubin causal model or the potential outcomes framework, defines a causal effect with a thought experiment. Each person has two potential outcomes: what happens if they receive the treatment, and what happens if they do not. The causal effect for that person is the difference between the two.
The trouble is that you only ever observe one of them. As the Rubin causal model summary puts it, one of the potential outcomes is always missing (Wikipedia: Rubin causal model). A customer either received the discount or did not. You cannot rewind time and run the other version on the same customer. This is called the fundamental problem of causal inference, and every method in this article is a strategy for estimating the missing outcome with some defensible stand-in.
Think of it like a detective's alibi. You cannot see what the suspect would have done on a night they were not at the scene. You can only build a comparison: similar people, similar nights, and an argument for why the comparison is fair. Causal inference is the discipline of making that argument explicit and checking it.
The average treatment effect (ATE) is the average of those individual effects across a population. Randomized experiments can estimate it directly because random assignment makes the treated and control groups equivalent on average. Everything else is an attempt to approximate that situation.
Confounding: the central obstacle
A confounder is a variable that influences both the treatment and the outcome, creating an association that is not causal.
The textbook illustration is that ice cream sales and drownings rise together across the months of a year. Ice cream does not cause drowning. Hot weather causes both, because people swim more and buy more ice cream when it is warm.
Weather -> Ice cream sales
Weather -> Drownings
Ice cream and drownings correlate because of weather,
not because one causes the other.
The ice cream example is a teaching device, not a study. Real confounders are subtler. In business data, customers who sign up for a premium plan differ from those who do not in size, engagement, and budget, and those same traits drive retention. In medicine, doctors give a drug to the patients they think will benefit, so the treated group differs from the untreated group before any treatment happens.
Simpson's paradox: when pooling reverses the story
Confounding can do more than shrink or inflate an effect. It can reverse its sign. A well-known medical example comes from a 1986 comparison of two kidney stone treatments, summarized on Wikipedia (Simpson's paradox):
| Stone size | Treatment A (open surgery) | Treatment B (closed surgery) |
|---|---|---|
| Small stones | 93% (81 of 87) | 87% (234 of 270) |
| Large stones | 73% (192 of 263) | 69% (55 of 80) |
| Both combined | 78% (273 of 350) | 83% (289 of 350) |
Treatment A did better for small stones and for large stones, yet Treatment B looked better overall. The reason is that stone size drives both which treatment a doctor chose and how likely success was. Large, harder stones were more often given Treatment A, which dragged its pooled rate down.
The 1973 UC Berkeley graduate admissions data show a similar pattern. Overall, men were admitted at a higher rate than women (44% of 8,442 male applicants versus 35% of 4,321 female applicants), but department-level data told a different story, because women applied more often to highly competitive departments. A later analysis found a small but statistically significant bias in favor of women.
The lesson is subtle. Which table is correct, the pooled or the split one, depends on the causal structure behind the numbers, not on the numbers themselves. In the kidney example, splitting by stone size is right because size is a confounder. In other situations, splitting by a variable would be wrong. You need a causal model, even a simple sketch, to know which.
Colliders: the control that makes things worse
Beginners often learn "control for everything you can measure." That rule is wrong. A collider is a variable caused by two other variables. Conditioning on it, through regression, stratification, or selecting a sample based on its values, creates a non-causal association between the variables that feed into it. This is known as collider bias or Berkson's paradox (Wikipedia: Collider).
A hypothetical illustration: suppose a hiring process admits candidates who are either very skilled or very well connected. Among people who were hired, skill and connections can look negatively related, because someone with neither would not have been hired and someone strong on one dimension did not need the other. Neither trait has any effect on the other in the wider population. Selecting on the outcome of the hiring process manufactured the pattern.
This is why causal inference practitioners draw diagrams (directed acyclic graphs, or DAGs) before they run regressions. Confounders should be controlled for. Colliders should not. The data cannot tell you which is which. Your understanding of how the world works has to.
The gold standard: randomized experiments
Random assignment is the simplest way to break the link between confounders and treatment. If a coin flip decides who gets the new version, no characteristic of the user can influence assignment, so any systematic difference in outcomes is attributable to the treatment (with some probability of chance error, which the confidence interval quantifies).
Users -> randomly assigned to:
Control: see the old version (50%)
Treatment: see the new version (50%)
Measure the outcome (clicks, conversion, retention).
Difference in means = estimated causal effect of the new version.
This is why A/B tests are so persuasive in product work. Our guide to A/B testing statistics covers sample sizes, significance, and common pitfalls, and the explainer on why randomized trials are powerful goes deeper on the logic.
The history of medicine shows both the power of this approach and the cost of skipping it. In 2002 the estrogen-plus-progestin arm of the Women's Health Initiative, a randomized trial of 16,608 postmenopausal women aged 50 to 79, was stopped after an average of 5.2 years of follow-up (it had been planned for nine). Interim monitoring showed increased risks of breast cancer (hazard ratio 1.24), stroke (1.31), and pulmonary embolism (2.13), and a small increase in coronary heart disease rather than the protection that earlier observational studies had suggested (Wikipedia: Women's Health Initiative). The trial did find benefits as well, with fewer colorectal cancers and hip fractures, and the finding applied mainly to long-term use for preventing chronic disease. The point for data scientists is the mismatch: the observational comparison and the randomized comparison disagreed, and the randomized one was the more reliable.
Randomization has real limits
Randomized experiments are not always possible or sufficient:
- History cannot be randomized. You cannot go back and assign a recession to half the countries.
- Ethics. You cannot randomly expose people to a suspected harm.
- Practicality. You cannot randomly assign who attends college, who lives in which neighborhood, or who is born in which year.
- Time horizons. Effects that take decades to appear are impractical to track in an experiment.
- Rare outcomes. If the outcome occurs in one in 10,000 people, the required sample is enormous.
- Interference. Standard analysis assumes one unit's treatment does not affect another's outcome, an assumption called SUTVA. In a marketplace or a social network, treating one user can change the experience of another, and the simple comparison breaks down.
When an experiment is not available, you are in observational territory, and the methods below apply.
Six methods for observational data
Each method below tries to build a fair comparison without randomization. They differ in the assumption they lean on, and that assumption is the thing to examine every time.
1. Regression with controls
The most common approach is to include potential confounders as additional variables in a regression.
import statsmodels.formula.api as smf
# outcome modeled on treatment plus measured confounders
model = smf.ols("outcome ~ treatment + age + income + education", data=df).fit()
print(model.summary())
# The coefficient on "treatment" is read as a causal effect
# only if every important confounder is measured and correctly modeled.
Strength: Simple, transparent, and widely understood. Weakness: It only adjusts for confounders you measured, and only in the functional form you specified. An unmeasured confounder biases the result with no warning from the output. The regression table looks equally confident whether the assumption holds or not.
2. Propensity score matching
The propensity score, introduced by Rosenbaum and Rubin in 1983, is the probability that a unit receives the treatment given its observed characteristics. The idea is to compare treated and untreated units that had about the same probability of treatment, which mimics randomization on observed variables. The usual steps are to estimate scores (typically with logistic regression), match treated units to comparison units, check that covariates are balanced after matching, and compare outcomes on the matched sample (Wikipedia: Propensity score matching).
The following simulation builds data with a known true effect of 2.0, in which older and higher-income people are more likely to be treated, so a naive comparison is biased:
import numpy as np
import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.neighbors import NearestNeighbors
rng = np.random.default_rng(42)
n = 5000
age = rng.normal(40, 10, n)
income = rng.normal(60, 15, n)
# Older, higher-income people are more likely to be treated (confounding)
p_treat = 1 / (1 + np.exp(-(0.05 * (age - 40) + 0.03 * (income - 60))))
treated = rng.binomial(1, p_treat)
# The true causal effect of treatment is +2.0
outcome = 0.1 * age + 0.05 * income + 2.0 * treated + rng.normal(0, 1, n)
df = pd.DataFrame({"age": age, "income": income,
"treated": treated, "outcome": outcome})
# Step 1: estimate propensity scores
X = df[["age", "income"]]
df["ps"] = LogisticRegression().fit(X, df["treated"]).predict_proba(X)[:, 1]
# Step 2: match each treated unit to the control with the nearest score
t = df[df["treated"] == 1]
c = df[df["treated"] == 0]
nn = NearestNeighbors(n_neighbors=1).fit(c[["ps"]])
_, idx = nn.kneighbors(t[["ps"]])
matched_controls = c.iloc[idx.ravel()]
# Step 3: average outcome gap among the treated (effect on the treated)
att = (t["outcome"].values - matched_controls["outcome"].values).mean()
naive = t["outcome"].mean() - c["outcome"].mean()
print(f"naive difference: {naive:.2f}, matched estimate: {att:.2f}")
Because treated people in this simulation are older and richer, and age and income raise the outcome independently, the naive difference overstates the true effect of 2.0. The matched estimate should land much closer, because it compares people with similar odds of treatment. The simulation works because every confounder was measured. In real data, that is the assumption you cannot verify.
Strength: Intuitive, and good at handling many measured confounders at once. Weakness: It only controls for observed variables, and it needs substantial overlap between the treated and untreated groups. It is also contested: King and Nielsen argued in 2019 that propensity score matching can increase imbalance, model dependence, and bias compared with other matching methods, while noting that propensity scores remain useful for weighting and doubly robust estimation. Treat it as one tool, not a default.
3. Difference-in-differences
Difference-in-differences (DiD) compares the change over time in a treated group with the change over time in a comparison group. Subtracting the comparison group's change removes anything that affected both groups equally, such as seasonality or a general market trend.
Before After Change
Treated group Y_T_before Y_T_after delta_T
Control group Y_C_before Y_C_after delta_C
DiD estimate = delta_T - delta_C
The most cited example is the 1994 study by David Card and Alan Krueger of New Jersey's minimum wage increase from $4.25 to $5.05 in April 1992. They compared fast-food employment in New Jersey with neighboring Pennsylvania before and after. Employment in New Jersey rose by 0.59 full-time-equivalent workers per store while Pennsylvania's fell by 2.16, a difference of 2.75, which was not the employment drop that standard textbook theory predicted (Wikipedia: Difference in differences). Card later shared the 2021 Nobel Memorial Prize in Economic Sciences, in part for this line of work.
Regression makes the estimate easy to compute with standard errors. The coefficient on the interaction term is the DiD estimate:
import statsmodels.formula.api as smf
# treated = 1 for campaign markets, post = 1 for the after period
did = smf.ols("sales ~ treated * post", data=df).fit()
print(did.params["treated:post"])
The assumption that matters is parallel trends. Without the treatment, the treated and control groups would have changed by the same amount. That cannot be tested for the period after treatment, because you never observe the counterfactual. You can, however, look at several periods before treatment to see whether the two groups were moving in parallel. If they were already diverging, the estimate is unreliable. A violation also occurs when something other than the treatment changes in one group at the same time.
4. Instrumental variables
Sometimes an unmeasured confounder is unavoidable. An instrumental variable offers a way around it. An instrument must satisfy two conditions (Wikipedia: Instrumental variables estimation):
- Relevance: it is correlated with the treatment.
- Exclusion restriction: it affects the outcome only through the treatment.
The standard computational route is two-stage least squares: first predict the treatment from the instrument, then regress the outcome on the predicted treatment. Weak instruments, meaning ones only loosely related to the treatment, give unreliable estimates, and a common rule of thumb is that the first-stage F-statistic should exceed 10.
Two classic examples come from Joshua Angrist's work. Angrist and Krueger (1991) used season of birth as a natural experiment, since children born at different times of year reach school-leaving age at different points in the school year, which affects how much schooling they receive. Angrist also used the Vietnam-era draft lottery as a source of random variation and estimated that service reduced veterans' lifetime earnings by about 15% relative to nonveterans (Wikipedia: Joshua Angrist).
A commonly proposed instrument for the effect of education on income is distance to the nearest college, and it shows the difficulty well. Distance may affect schooling, but families who live near colleges may also differ in income and attitudes, which would break the exclusion restriction. The exclusion restriction cannot be tested directly when the model is exactly identified, so the argument has to rest on knowledge of the setting, not on a statistical test.
There is also a subtlety about who the answer describes. When treatment effects vary across people, an instrumental variable recovers a local average treatment effect (LATE): the effect for people whose treatment actually responds to the instrument. Imbens and Angrist developed this idea, and it is part of why they shared the 2021 Nobel Prize with Card. It means an IV estimate does not automatically apply to everyone.
5. Regression discontinuity
When a rule assigns treatment based on a threshold, units just above and just below the cutoff are almost identical except for the treatment. Thistlethwaite and Campbell first used the design in 1960 to study how scholarship awards affected students' career plans (Wikipedia: Regression discontinuity design). Other typical setups include grade cutoffs for scholarships, age thresholds for programs, and elections decided by narrow margins.
A hypothetical example: a program is offered to everyone who scores 70 or above on a screening test. Compare people who scored 69 with those who scored 71. Their underlying characteristics should be similar, so a jump in outcomes at 70 is attributed to the program.
Two conditions make the design credible. First, other relevant variables should be continuous at the cutoff. Second, people must not be able to precisely manipulate which side they land on. If test-takers can retake until they pass, the people just above the line are no longer comparable to those just below. A density test can reveal bunching on one side of the cutoff.
The limit to remember is locality. The estimate applies to units near the cutoff and does not necessarily generalize to the whole population.
6. Synthetic controls
When only one unit (a state, a country, a market) receives the treatment, finding a single good comparison unit is hard. The synthetic control method builds the comparison as a weighted average of many untreated units, with weights chosen so that the combination tracks the treated unit closely before the intervention. It was developed by Alberto Abadie and coauthors, with applications that include the economic cost of conflict in the Basque Country (2003) and California's tobacco control program (2010) (Wikipedia: Synthetic control method).
Compared with difference-in-differences, it can account for time-varying confounders by matching the pre-intervention path, and it offers a systematic way to choose comparison units instead of picking them by hand. The usual requirement is a reasonably long pre-intervention time series so the weights are well determined.
Choosing among the six
| Method | Best used when | Key assumption | Typical weak point |
|---|---|---|---|
| Regression with controls | Many measured covariates, no better design | All important confounders measured and modeled | Unmeasured confounding |
| Propensity score matching | Many measured covariates, treatment is binary | Unconfoundedness and overlap | Only observed variables; debated |
| Difference-in-differences | Before/after data for treated and comparison groups | Parallel trends | Diverging trends, simultaneous shocks |
| Instrumental variables | An outside source of variation in treatment | Relevance and exclusion | Weak or invalid instruments; LATE only |
| Regression discontinuity | Treatment assigned by a threshold | Continuity at cutoff, no manipulation | Local effect only |
| Synthetic control | One or few treated units, long pre-period | Weighted controls reproduce the counterfactual | Needs long pre-period data |
Natural experiments: nature does the randomizing
Several of these methods depend on natural experiments, where an outside event assigns exposure in a way that resembles randomization. The oldest famous case is John Snow's work during the 1854 cholera epidemic in London. Two water companies served overlapping districts of south London: Southwark and Vauxhall drew water downstream of sewage discharge, and Lambeth drew water upstream. Because the water supply had developed almost haphazardly, Snow described it as an experiment "on the grandest scale," and the districts served by the downstream company had high attack rates while those served by the upstream company had low ones (Wikipedia: Natural experiment). Our article on John Snow and the Broad Street pump tells the story in detail.
Natural experiments carry the same caution as every observational method. The exposure only resembles random assignment, so hidden differences between groups can remain, and the investigator did not control the conditions. They are strongest when the exposure is clearly defined, affects a well-defined group, and has a comparable unexposed group.
A worked example: did the marketing campaign work?
Suppose your company spent $500,000 on a marketing campaign last quarter and sales rose 15% in the campaign markets. Did the campaign cause that increase?
The naive reading
"Sales went up, we ran a campaign, so the campaign caused it." This ignores seasonality, market trends, competitor actions, product launches, and organic growth, any of which could explain some or all of the rise.
Better option 1: randomize, if you can
Randomly assign markets (or audience segments) to see the ads or not. The difference in outcomes between the groups is the causal effect, with a confidence interval attached. Many teams can do this with geographic holdouts or audience splits, and it is the most credible answer available.
Better option 2: difference-in-differences
If randomization is impossible, compare campaign markets to similar markets without the campaign, looking at the change in each. With illustrative numbers:
Pre-campaign Post-campaign Change
Campaign markets $10.0M $11.5M +15%
Other markets $10.0M $10.5M +5%
DiD estimate: 15% - 5% = 10 percentage points
The 5% rise in the comparison markets is the part of the increase that would likely have happened anyway, from seasonality and trends shared by both groups. Only the remaining 10 percentage points are attributed to the campaign, and only if parallel trends holds. To support that, check that the two groups tracked each other in the quarters before the campaign. If you chose the campaign markets because they were already growing faster, the estimate will be too high.
Better option 3: synthetic control
If the campaign ran in one large market, construct a weighted blend of other markets that matched it before the campaign, then compare the real market with the blend afterward.
What to report
A responsible write-up states the estimate, the uncertainty around it, the assumption it rests on, and a check of that assumption. "The campaign raised sales by about 10 percentage points relative to comparable markets, assuming the markets would otherwise have trended in parallel, which the prior four quarters support" is far more useful than a single number.
Common mistakes in causal work
1. Treating correlation as causation. The foundational error, and the one that causes the others.
2. Ignoring reverse causation. If X correlates with Y, Y may be driving X. Do happier employees work harder, or do hard-working employees become happier? Timing data and instruments can help separate the two.
3. Controlling for a collider or a mediator. Adding variables to a regression is not automatically safer. Conditioning on a collider creates bias, and conditioning on a variable that sits on the causal path between treatment and outcome removes part of the effect you are trying to measure.
4. Selection bias. Your sample is not representative of the group you want to describe. Studying productivity by surveying current employees misses those who left.
5. Survivorship bias. You only see the successes. Studying the habits of successful startups says nothing about how many failed startups had the same habits. See our explainer on how survivorship bias hides failures.
6. Multiple comparisons. Test enough hypotheses and some will look significant by chance. With 20 independent tests at a 5% threshold, the chance of at least one false positive is 1 minus 0.95 to the 20th power, about 64%, which is much higher than most people expect. Adjust for the number of tests, and see how p-values are misunderstood for related traps.
7. P-hacking and flexible analysis. Trying many specifications and reporting the one that worked inflates false positives. Writing your analysis plan down before you look at outcomes prevents it.
8. Extrapolating a local estimate. A regression discontinuity effect applies near the cutoff, and an IV estimate applies to people whose treatment responds to the instrument. Both can be real and still not describe the population you care about.
9. Overconfidence in a single method. The best analyses triangulate. If difference-in-differences, matching, and a synthetic control all point in the same direction, the conclusion is sturdier than any one of them. If they disagree, that disagreement is itself information about which assumption is failing.
Prediction versus causation in machine learning
A predictive model asks what Y will be given X. A causal question asks what Y would be if we set X. These can diverge sharply. A model might learn that patients who receive intensive care have worse outcomes, because sicker patients receive intensive care. That correlation is useful for predicting who needs a bed and misleading for judging whether intensive care helps.
Causal machine learning combines the two. Instead of a single average effect, it estimates how the effect varies across customers, patients, or segments, called the conditional average treatment effect (CATE). This is the basis of uplift modeling in marketing, where the goal is to find people who will respond because of the intervention, not people who would have bought anyway. The method still depends on the same identification assumptions. A flexible model does not conjure causal validity out of confounded data. It estimates the effect more flexibly once the assumptions are granted. For the modeling pitfalls that cause trouble here, see common ML mistakes.
Tools for causal inference
| Tool | What it provides |
|---|---|
| statsmodels | Regression, DiD via interaction terms, and 2SLS-style estimators for basic analyses |
| DoWhy | A library built around explicit causal models, assumptions, identification separated from estimation, and robustness checks |
| EconML | Machine-learning estimators of heterogeneous effects (CATE), including double machine learning, forest-based methods, and meta-learners |
| CausalML | Uplift modeling and ML-based CATE estimation; its repository sits under Uber's GitHub organization |
DoWhy's documentation states the philosophy well: identification is the causal problem, and estimation is simply a statistical problem. It makes the assumptions visible, either graphically or as conditional independence statements, and where possible tests them against the observed data and runs sensitivity checks (DoWhy documentation). EconML organizes its estimators around the conditional average treatment effect and also includes instrumental variable estimators, sensitivity analysis, and DoWhy refutation tests (EconML documentation). CausalML describes itself as a suite of uplift modeling and causal inference methods built on machine learning, with a standard interface for estimating the CATE (CausalML documentation).
A typical DoWhy workflow states the model, identifies the estimand, estimates the effect, and then tries to break the result:
from dowhy import CausalModel
model = CausalModel(
data=df,
treatment="treatment",
outcome="outcome",
common_causes=["age", "income"],
)
estimand = model.identify_effect()
estimate = model.estimate_effect(
estimand, method_name="backdoor.propensity_score_matching"
)
# Try to refute the estimate with a placebo treatment
refutation = model.refute_estimate(
estimand, estimate, method_name="placebo_treatment_refuter"
)
print(estimate.value, refutation)
The refutation step matters more than the code suggests. If a made-up placebo treatment also appears to have an effect, your pipeline is picking up bias, not causation.
When to bring in an expert
Causal inference is deep, and subtle mistakes can be costly. For high-stakes analyses, such as public policy, medical treatment decisions, major strategy bets, and litigation involving causation, involve a statistician, econometrician, or causal inference specialist. For internal product analytics, careful DIY work is reasonable, especially with randomized tests. For claims you will publish or defend externally, get independent review of the identification argument, not just the code.
Where these skills pay off
Causal reasoning matters most in:
- Product and tech analytics: designing and interpreting experiments, handling interference between users.
- Health and pharma: estimating treatment effects from trials and real-world data.
- Marketing analytics: measuring incrementality of campaigns.
- Economics and policy: evaluating programs and regulations.
- Finance: attributing results to decisions rather than market conditions.
Even moderate fluency helps in any analytics role, because it changes the questions you ask before touching the data: where did the treatment assignment come from, what else changed at the same time, and what would convince me I am wrong?
Frequently asked questions
Q: Do I need causal inference for every data role? A: No. Pure prediction work such as forecasting or ranking can often rely on predictive accuracy alone. It becomes essential when your analysis will recommend an intervention or when you must explain why something changed.
Q: Is a bigger dataset a substitute for a causal design? A: No. More data shrinks random error but does not remove confounding. A biased comparison on a million rows is a precisely estimated wrong answer.
Q: Can machine learning find causal relationships on its own? A: Not from observational data without assumptions. Methods like double machine learning use flexible models to adjust for many covariates, but they still require that the relevant confounders are measured. Without a causal argument, the output is a correlation with better engineering.
Q: What is the difference between a confounder and a mediator? A: A confounder causes both treatment and outcome, so you adjust for it. A mediator lies on the path from treatment to outcome, so adjusting for it removes part of the effect you want to measure. The data cannot say which is which. Your causal model has to.
Q: What is the best way to learn this? A: Two freely available online books are a good start. "The Effect" by Nick Huntington-Klein covers causal diagrams, difference-in-differences, instrumental variables, and regression discontinuity, and its web version is free (The Effect). Scott Cunningham's "Causal Inference: The Remix" is also hosted online and covers potential outcomes, unconfoundedness, regression discontinuity, instrumental variables, difference-in-differences, and synthetic control, with code in R and Stata (Causal Inference: The Remix).
Q: How long does it take to get competent? A: Understanding the core ideas, such as confounding, counterfactuals, and why randomization works, can happen in weeks. Applying the observational methods rigorously, including checking their assumptions, takes months of practice on real problems. Contributing to methodological research takes much longer.
Q: Why has causal inference become more popular in tech? A: Companies reached the limits of pure prediction. To decide what to change in a product or where to spend a marketing budget, they need effects of actions, not just forecasts. Cheap, large-scale experimentation made causal reasoning practical, and the Nobel Prize awarded in 2021 for methods built on natural experiments raised the field's profile.
The takeaway
Causal inference is not a toolbox of tricks for proving causation. It is a discipline of making assumptions explicit, then arguing and testing whether they are believable. Randomization buys the strongest assumption for free, which is why experiments remain the benchmark. Everything else is a trade: matching assumes you measured the confounders, difference-in-differences assumes parallel trends, instruments assume exclusion, and regression discontinuity assumes nobody gamed the cutoff. The analyst who can say which assumption their result depends on, and show evidence for it, is more valuable than the one with the fanciest model, because they can tell the team whether it is safe to act.
Related Articles
- A/B Testing for Data Scientists
- How Correlation Differs From Causation
- What a Confidence Interval Really Means
- Best Data Science Tools 2026
- Common ML Mistakes
Last verified: October 2026
Follow new articles
Add SciHub101 to your feed reader to see new science and technology stories.
About the Author
SciHub101 is an independent science and technology publication founded and edited by Buğra Sözeri, a software engineer and app developer based in Türkiye. AI tools assist with drafting and research. Source documentation in the existing archive is uneven, and articles are being reviewed and corrected. The Editorial Team byline identifies editorial responsibility; it does not certify specialist or independent human review. Where we compare products, anything built by our own team is labelled as such — see the editorial guidelines and About page for how corrections and disclosures work.
Related Articles

Statistics for Data Scientists 2026 — What You Actually Need
Statistics working data scientists use: descriptive summaries, distributions, hypothesis tests, regression, causal inference, plus worked A/B numbers.



What Is DuckDB? In-Process Analytics SQL
DuckDB is an embedded analytical database — SQLite for analytics. Query Parquet, CSV, and Arrow with SQL, no ETL needed.

Python for Data Science: Complete Guide 2026
Master Python for data science in 2026. Covers essential libraries, workflows, career paths, and learning roadmap with real examples.

NumPy Guide — Python's Foundation for Data Science
Learn NumPy from scratch — arrays, broadcasting, vectorization, indexing, and linear algebra. The bedrock library behind pandas, scikit-learn, and PyTorch.