Abstract
Correlation-based models dominate production data science, but the questions that drive business decisions - does this feature increase retention, does this change in pricing reduce churn - require causal answers. Running randomized controlled trials for every such question is expensive, often ethically constrained, and impossible over historical data. The causal inference tooling ecosystem has matured enough by early 2026 that teams can run doubly robust estimators, instrumental variable models, and difference-in-differences pipelines at the scale of production event logs rather than offline research datasets. This post examines DoWhy, EconML, and CausalML as the primary open-source frameworks, the distributed computation patterns that make them tractable at scale, and the assumptions that practitioners most commonly violate.
Estimand First, Estimator Second
The key methodological shift that separates principled causal inference from ad hoc regression analysis is the explicit separation of the estimand (the causal quantity you want to measure) from the estimator (the statistical method you use to measure it). DoWhy, developed by Microsoft Research and now a standalone PyWhy project, formalizes this with a four-step API: model the causal graph, identify the estimand from the graph, estimate the effect using the chosen estimator, and refute the estimate using sensitivity analysis. The refutation step - testing whether the estimate changes under placebo treatment, random confounder addition, or subset of data - is what distinguishes DoWhy from libraries that compute point estimates without uncertainty characterization. Teams that skip the refutation step produce estimates they cannot defend when assumptions are challenged.
Doubly Robust Estimation and EconML
EconML, also from Microsoft Research, provides implementations of doubly robust estimators - methods that produce consistent estimates if either the outcome model or the treatment model is correctly specified, but not necessarily both. The Double Machine Learning (DML) estimator in EconML is the most widely used: it partitions the estimation problem into two separate ML predictions (treatment assignment and outcome), residualizes both, and then regresses the outcome residuals on the treatment residuals to estimate the causal effect. The appeal of DML for production use is that the two inner models can be any scikit-learn compatible estimator, including gradient boosted trees and neural networks, which relaxes the functional form assumptions that parametric causal models require. For heterogeneous treatment effect estimation - identifying which user segments benefit most from a feature - EconML’s CausalForest implementation follows the Generalized Random Forests approach.
Distributed Execution and Partitioned Estimation
Running causal estimators over event logs with hundreds of millions of rows requires distributing the computation. The inner ML models in DML and similar two-stage estimators are embarrassingly parallelizable by experimental unit (user, session, entity), which maps naturally to Spark and Dask partitioning schemes. The final regression stage is typically small enough to run on a single node. CausalML, developed at Uber and open-sourced in 2019, was built with this pattern in mind - its uplift modeling and meta-learner implementations accept DataFrames and can be parallelized by passing partitioned data through mapPartitions. The practical constraint is that the inner model fitting (a gradient boosted tree on 100M rows) is the bottleneck, and distributed ML training adds coordination overhead that often makes it faster to downsample than to distribute naively.
Common Assumption Violations
The assumptions underlying causal estimators are not statistical guarantees - they are conditions the practitioner asserts about the data generating process. Conditional ignorability (no unmeasured confounders given observed covariates) is the most commonly violated, most difficult to verify, and most consequential. A DoWhy refutation using a placebo treatment - replacing the actual treatment with a random assignment and confirming the estimated effect collapses to zero - tests some aspects of model misspecification but does not detect unmeasured confounding that is correlated with the chosen covariates. The honest position is that causal estimates from observational data are assumptions-conditional: they are valid if the assumptions hold, and the assumptions should be stated explicitly in any report or dashboard that surfaces the estimate.