Observational Treatment Effect Estimation in Python
Use Causalis for observational treatment effect estimation in Python when treatment was not randomized but the important confounders are observed and overlap is plausible. The Causalis workflow uses CausalData, IRM, and diagnostics for overlap, score behavior, balance, and sensitivity.
The causal claim depends on assumptions. For observational data, state SUTVA/consistency, unconfoundedness given observed covariates, and overlap/positivity.
Minimal Observational Example
Data Shape
The dataframe should include:
- a treatment column;
- an outcome column;
- pre-treatment confounders that affect treatment assignment and outcome;
- optional user or unit identifier;
- no post-treatment variables in the confounder list.
Diagnostics
When Not to Use This Workflow
- Key confounders are unobserved and no credible instrument or panel design is available.
- Treatment and control groups have little or no overlap.
- Confounders include post-treatment variables.
- The data are better described as a randomized experiment, DiD panel, synthetic-control panel, or IV design.
Common Mistakes
- Saying the estimate is causal without explaining identification assumptions.
- Keeping post-treatment variables in
confounders. - Ignoring extreme propensities or weak overlap.
- Treating a flexible ML model as a substitute for study design.
Canonical Links
- Causalis observational scenario: Unconfoundedness
- IRM model guide: UnconfoundednessModel
- Causalis API reference: IRM API
- Refutation flow: Refutation flow
- Causalis PyPI: pypi.org/project/causalis
- Causalis GitHub: github.com/causalis-causalcraft/Causalis