RFC: CausalML v1.0 roadmap #938
Replies: 3 comments
|
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:
|
|
hi @jeongyoonlee I've been engaging with review requests but just realized this RFC had been posted. Not sure if it might help to raise visibility to others. Looks like a productive way forward 👍 |
Release schedule, and the answer to open question 2Releases move to a quarterly cadence:
Dates are targets rather than commitments. The ordering is the part to plan against: no signature moves before v1.0. Open question 2 (deprecation window length): three minor releases, roughly nine months. The Nobody asked for a longer window here, so this is a maintainer call rather than a consensus one. If nine months is too tight for your codebase, say so on this thread and it can be revisited — that is easier now than after 0.20.0. What to do about itOne edit, and it is safe in every version: learner.fit(X=X, treatment=treatment, y=y) # order-independent, correct before and after v1.0The migration guide covers the per-family table, the three signatures that are not a plain To list your own call sites, the warning is raised with python -W error::FutureWarning your_script.pyM1 statusThe argument-order work is tracked in #980. The deprecation window is closed — the shim covers every public method whose positional order changes (#975, #981), CausalML's own tests and docs are migrated to keyword calls (#982, #983), and the migration guide and changelog entry are published (#984). #985 is the flip itself and is now schedulable against the v1.0 target. #986 adds scikit-learn metadata routing, which is what actually lets a learner sit inside a Open questions 1, 3, 4 and 5 are still open and feedback on them is welcome. |
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.
Release schedule
Quarterly. Dates are targets rather than commitments; the ordering is fixed.
fit()argument orderfit(X, treatment, y, ...)— deprecation warning addedfit(X, y, treatment, ...)— the flip, shim removedM1 — Foundation & stability
check_estimatorfor all learners); moveblackout of runtime depsfit()argument order (CausalML is not compatible with Scikit-Learn Pipeline #854) — decided, in progress: adopt the scikit-learn conventionfit(X, y, treatment, ...)(the one intentional breaking change). Existingfit(X, treatment, y, ...)calls keep working through the transition behind a deprecation shim that emits aFutureWarning._tree/Cython kernel (v1.0 M1) #945):UpliftTreeClassifier/UpliftRandomForestClassifiernow build on the shared_tree/Cython kernel thatCausalTreeRegressor/CausalRandomForestRegressoruse, via a newUpliftClassificationCriterion; the duplicated node / builder / splitter / bagging code inuplift.pyx(~2.3 KLoC) is deleted and the public classes are now thin subclasses of the kernel, with legacy signatures / defaults / predict-semantics preserved. This unblocks thecheck_estimatorand serialization-hygiene items above.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
Answered — three minor releases, ~9 months: thefit()argument order (CausalML is not compatible with Scikit-Learn Pipeline #854): how long a deprecation window would you need?FutureWarningships in 0.18.0 (Sep 2026) and the flip lands in v1.0 (Jun 2027). See the schedule above and the migration guide. Still open to hearing that this is too tight — say so below.Feedback, disagreement, and additional use cases all welcome. If there's appetite, we'll convert agreed items into tracked issues per milestone.
All reactions