RFC: CausalML v1.0 roadmap #938
Replies: 1 comment
-
|
Adding one item to M1 that I missed in the first draft: unifying the underlying tree base for the two tree families. Today Scope of the proposed refactor:
Why M1 and not M2: it's a prerequisite for two M1 bullets already in the RFC — Explicit non-goals: no change to which uplift-splitting criteria are supported; no honesty-semantics change unless separately RFC'd; no new estimator types. Open questions:
|
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
CausalML (0.17.0) is mid-transition to sklearn-idiomatic estimators (
BaseEstimatormeta-learners, save/load, native polars/pandas). We'd like to define the road to v1.0 and get community input before locking it in.What v1.0 is: a stabilize + expand release positioning CausalML as the production-scale library for uplift / CATE estimation. It will ship through intermediate milestones (each released as a 0.x minor); 1.0 GA is the API freeze at the end — not a single big-bang.
Where we see CausalML in the ecosystem: strongest on uplift + policy optimization (Qini/AUUC/RATE, multi-treatment, value optimization) with a clean meta-learner API and SHAP interpretability. Current gaps include: no distributed/out-of-core compute, no standard benchmark-dataset loaders or PEHE/policy-risk metrics, a fragmented neural-net story, and heavy serial bootstrap-CI paths.
M1 — Foundation & stability
check_estimatorfor all learners); moveblackout of runtime depsfit()argument order (CausalML is not compatible with Scikit-Learn Pipeline #854) — the one intentional breaking change, with a deprecation shimUpliftTreeClassifier/UpliftRandomForestClassifieronto the shared_tree/Cython kernel thatCausalTreeRegressor/CausalRandomForestRegressoralready use — introduce anUpliftClassificationCriterionalongside the existing causal criteria, delete the duplicated node / builder / splitter / bagging code inuplift.pyx(~2.3 KLoC), and let both families inheritBaseDecisionTree. Prerequisite for thecheck_estimatorand serialization-hygiene bullets above; public class names andfit/predictsignatures preserved via thin subclasses, with deprecation warnings for any drift.M2 — Scale-out (production headline)
register_ray()(optionalcausalml[ray]extra)M3 — Benchmarks & evaluation
fetch_*loaders (cached) for standard datasets: IHDP, Lalonde, Twins, Jobs, ACIC, Criteo-uplift, Hillstrom (subject to licensing)M4 — Modern NN & uncertainty
1.0 GA
API freeze, deprecation policy + semver commitment, migration guide, and a "choosing an estimator" guide.
Explicit non-goals for v1.0
Open questions we'd love feedback on
fit()argument order (CausalML is not compatible with Scikit-Learn Pipeline #854): keepfit(X, treatment, y)or move to(X, y, treatment)for sklearn alignment — how painful is the break for you?Feedback, disagreement, and additional use cases all welcome. If there's appetite, we'll convert agreed items into tracked issues per milestone.
Beta Was this translation helpful? Give feedback.
All reactions