Releases: uber/causalml
Release list
v0.17.0
This release adds scikit-learn 1.9 support (fixing an import causalml.dataset failure present on the 0.16.0 wheel, #926), native Polars support across all meta-learners, a JAX/flax.nnx backend for DragonNet, and makes the meta-learners scikit-learn compliant (BaseEstimator, so clone() and get_params() work). It also adds the RATE evaluation metric and post-fit confidence intervals for BaseTLearner, plus numerous bug fixes.
New Features
- Add native Polars DataFrame, Series, and LazyFrame support for all meta-learners by @aman-coder03 in #901
- Polish Polars support and add bootstrap CI test coverage by @aman-coder03 in #921
- Add JAX/flax.nnx backend for DragonNet by @xrhd in #918
- docs: document JAX backend for DragonNet by @xrhd in #919
- Make meta-learners scikit-learn compliant via BaseEstimator by @aman-coder03 in #912
- Add Rank-weighted Average Treatment Effect (RATE) metric by @aman-coder03 in #887
- Add
rate_score()with bootstrap confidence intervals and p-values by @aman-coder03 in #890 - Add AIPW docstring warning to
get_toc()andrate_score()by @jeongyoonlee in #891 - Add post-fit confidence intervals to
BaseTLearnerviastore_bootstrapsandreturn_ciby @aman-coder03 in #886 - Support NaN values in UpliftTree and UpliftRandomForest by @aman-coder03 in #860
scikit-learn 1.9 Support
- Fix for compatibility with sklearn v1.9.0 by @jakevdp in #903
- Fix CausalRandomForestRegressor.fit() on scikit-learn 1.9 by @jeongyoonlee in #907
- Support CausalRandomForestRegressor.calculate_error() on scikit-learn >= 1.9 by @jeongyoonlee in #909
Bug Fixes
- Fix #904: Prevent deepcopy of fitted templates in bootstrap and correct predict validation ordering by @Saurav-Gupta-9741 in #910
- Optimised training, inference and memory for metalearners in multitreatment settings by @Ic3fr0g in #896
- Fix UpliftRandomForest predict shape mismatch with multiple treatments by @jeongyoonlee in #884
- Fix uplift tree p-value NaN from division by zero by @jeongyoonlee in #882
- Fix CausalRandomForestRegressor predicting inf from division by zero by @jeongyoonlee in #883
- Fix SensitivityPlaceboTreatment ignoring actual treatment groups by @jeongyoonlee in #880
- Fix seed parameter TypeError in BaseDRLearner bootstrap CI by @mohsinm-dev in #879
- Fix ValueError on read-only arrays in BaseSLearner.predict() by @mohsinm-dev in #878
- Add input validation to auuc_score for missing model columns by @jeongyoonlee in #881
- Make xgboost optional in synthetic dataset generation by @Si-ra-kri in #872
- Bug Fix: use iloc to index pd.Series by @bekojuniranjan in #877
Build / CI
- Make Cython line tracing opt-in to keep release wheels fast by @HSJung93 in #914
- Remove the PyPI token from GitHub Actions in favor of the Trusted Publishing by @jeongyoonlee in #871
- Upgrade GitHub Actions for Node 24 compatibility by @salmanmkc in #874
- Upgrade GitHub Actions to latest versions by @salmanmkc in #875
- ci: declare workflow-level
contents: readon 4 workflows by @arpitjain099 in #900
⚠️ Breaking Changes
- Meta-learner
__init__signatures (#912): to become scikit-learnBaseEstimators, each learner now stores its constructor arguments verbatim and builds models infit(). Most visibly,XGBRRegressorno longer accepts arbitrary**kwargs— pass XGBoost parameters via the explicitxgb_kwargs=<dict>argument.
Full Changelog: v0.16.0...v0.17.0
v0.16.0
This release primarily focuses on adding support for scipy>=1.16.0, numpy>=1.25.2, statsmodels>=0.14.5, and Python>=3.11, addressing Cython binary interface compatibility issues with updated dependencies.
What's Changed
- Add BaseDRClassifier for binary classification with probabilities by @jeongyoonlee in #844
- add ability to benchmark via synth validation by @IyarLin in #847
- Bug Fix: Update uplift.pyx with isinstance(v, Numbers.number)) by @00helloworld in #849
- Fix #848: Pass estimation_sample_size parameter to individual trees in UpliftRandomForestClassifier by @mohsinm-dev in #850
- #775: Support multiple treatments in CausalTreeRegressor and CausalRandomForestRegressor by @alexander-pv in #852
- fix: support scipy>=1.16.0 by removing sklearn internal dependency by @jeongyoonlee in #861
- Fix Ubuntu packaging failure - scipy manylinux compatibility by @jeongyoonlee in #865
- Upgrade cibuildwheel to v3.3.1 and remove deprecated macos-13 runner by @jeongyoonlee in #867
- Release v0.16.0: Upgrade to manylinux_2_28 and remove scipy version constraints by @jeongyoonlee in #869
New Contributors
- @IyarLin made their first contribution in #847
- @00helloworld made their first contribution in #849
- @mohsinm-dev made their first contribution in #850
Full Changelog: v0.15.5...v0.16.0
v0.15.5
What's Changed
- Fix runtime dependencies by @pavelzw in #831
- Fix build errors by @jeongyoonlee in #832
- Remove failing test-conda-forge-install.yml by @jeongyoonlee in #827
- Install via
uvby @aaelony and @emilioMaddalena in #834 and #836 - Move calibrate() inside the PropensityModel class by @jeongyoonlee in #839
- v0.15.5 release by @jeongyoonlee in #842
New Contributors
- @pavelzw made their first contribution in #831
- @aaelony made their first contribution in #834
- @emilioMaddalena made their first contribution in #836
Full Changelog: v0.15.4...v0.15.5
v0.15.4
What's Changed
- add calibration example by @ras44 in #816
- resolves #811, update propensity.py by @ras44 in #817
- docs(validation): fixes some typos by @javiergarea in #822
- remove description of unused argument by @ras44 in #821
- #820: Update Jupyter Notebook with causal trees interpretation examples by @alexander-pv in #823
- Fix incorrect bootstrap mean calculation in meta-learners by @jeongyoonlee in #829
New Contributors
- @javiergarea made their first contribution in #822
Full Changelog: v0.15.3...v0.15.4
v0.15.3
- This release allows users to use the latest versions of Cython, numpy, scipy, and scikit-learn by updating dependencies.
- Pre-built wheels for Python 3.12, in addition to Python 3.9-3.11, are now available on PyPI for easy installation.
What's Changed
- Control to Treatment Matching by @spohngellert-o in #797
- Update uplift and Qini curve plots with a fixed random line by @jeongyoonlee in #799
- Precommit by @spohngellert-o in #800
- Remove Python 3.7 and 3.8 from and add Python 3.12 to the build tests by @jeongyoonlee in #807
- Pin scikit-learn<1.6 until xgboost fix gets released by @jeongyoonlee in #809
- Update CausalTree's base _tree module with sklearn 1.5.2 by @jeongyoonlee in #806
- resolves #796 remove dep on pygam, use IsotonicRegression by @ras44 in #803
- Remove the pygam dependency and allow the latest versions of Cython, numpy, scipy, and scikit-learn by @jeongyoonlee in #812
- Add the Python 3.12 test and wheel back by @jeongyoonlee in #814
- v0.15.3 release by @jeongyoonlee in #815
Full Changelog: v0.15.2...v0.15.3
v0.15.2
What's Changed
- fix typo in MAINTAINERS.md by @jeongyoonlee in #761
- Update python-publish GHA to build multi-platform wheels by @jeongyoonlee in #762
- Remove build for 32-bit systems that are failing by @jeongyoonlee in #763
- Remove musllinux build by @jeongyoonlee in #765
- Fix issue 764 to handle edge case in one hot encoding transformation by @paullo0106 in #766
- fix #771 and add a test for get/plot_tmlegain() by @jeongyoonlee in #773
- Add an explicit treatment input argument to causaltree/forest by @jeongyoonlee in #776
- Dev/install issues #767 #769 by @ras44 in #778
- Dev/ras44 remove envs 780 by @ras44 in #782
- Many to one propensity matching without replacement by @spohngellert-o in #786
- Update input arguments of XGBoost to be compatible with the latest APIs by @jeongyoonlee in #788
- Make torch optional. Update DragonNet w/ latest TF APIs by @jeongyoonlee in #790
- Update example references by @emmanuel-ferdman in #793
- Up the version to 0.15.2 by @jeongyoonlee in #792
- Update the cibuildwheel version to 2.21 by @jeongyoonlee in #794
- Pin the numpy version to be <2 by @jeongyoonlee in #795
New Contributors
- @spohngellert-o made their first contribution in #786
- @emmanuel-ferdman made their first contribution in #793
Full Changelog: v0.15.1...v0.15.2
v0.15.1
- This release fixes the build failure on macOS and a few bugs in
UpliftTreeClassifier. - We have two new contributors, @lee-junseok and @IanDelbridge. Thanks for your contributions!
What's Changed
- Relax
pandasversion requirement by @jeongyoonlee in #743 - Remove undefined variables in
match.__main__()by @jeongyoonlee in #749 - Fix
distr_plot_single_sim()by @jeongyoonlee in #750 - Add
with_std,with_countstocreate_table_oneby @lee-junseok in #748 - fix stratified sampling call by @IanDelbridge in #756
- 20240207 honest leaf size by @IanDelbridge in #753
- 757: add
return_ci=Truein sensitivity by @lee-junseok in #758 - Update sensitivity tests with more meta-learners by @jeongyoonlee in #759
- manually specify
multiprocessinguse fork insetup.pyby @IanDelbridge in #754 - v0.15.1 release by @jeongyoonlee in #760
New Contributors
- @lee-junseok made their first contribution in #748
- @IanDelbridge made their first contribution in #756
Full Changelog: v0.15.0...v0.15.1
v0.15.0
- In this release, we revamped documentation, cleaned up dependencies, and improved installation - in addition to the long list of bug fixes.
- We have four new contributors, @peterloleungyau, @SuperBo, @ZiJiaW, and @erikcs who submitted their first PRs to CausalML. Thanks for your contributions!
Updates
- Update python-publish.yml by @jeongyoonlee in #673
- Add build.[os, tools.python] to .readthedocs.yml by @jeongyoonlee in #676
- Update notebook example with causal trees interpretation by @alexander-pv in #683
- Remove the numpy and pandas version restriction in pyproject.toml by @jeongyoonlee in #681
- Add governance documents by @jeongyoonlee in #688
- Update GOVERNANCE.md by @ras44 in #691
- Dev/governance docs to snake-case by @ras44 in #693
- Reduce sklearn dependency in causalml by @alexander-pv in #686
- Update MAINTAINERS.md by @jeongyoonlee in #696
- Modified to speed up UpliftTreeClassifier.growDecisionTreeFrom. by @peterloleungyau in #695
- Update README.md by @ras44 in #698
- Add notebook examples to docs by @jeongyoonlee in #697
- resolves change requests in #166 by @ras44 in #701
- Fix the readthedocs build error by @jeongyoonlee in #702
- Replace Stack and PriorityHeap with cpp stack/heap methods in trees by @SuperBo in #700
- Hotfix for #701 by @jeongyoonlee in #705
- Dev/699 win build fix by @ras44 in #710
- expose n_jobs for rlearner by @ZiJiaW in #714
- minimal fix to resolve #707 by @ras44 in #720
- Add Python 3.10, 3.11, 3.12 to the testing by @cclauss in #454
- Remove Python 3.12 from the build tests in python-test.yaml by @jeongyoonlee in #726
- fix plot_std_diffs, add bal_tol, condense to one plot by @ras44 in #723
- Dev/677 documentation by @ras44 in #725
- documentation updates by @ras44 in #728
- resolves #730, docs clean conda install by @ras44 in #731
- minimal wrapper of MAQ #662 by @ras44 in #729
- Temporary fix for causal trees missing values support #733 by @alexander-pv in #734
- resolves #639, credit due to Dong Liu by @ras44 in #722
- v0.15.0 release by @jeongyoonlee in #737
- Remove maq git+pip dependency by @erikcs in #739
New Contributors
- @peterloleungyau made their first contribution in #695
- @SuperBo made their first contribution in #700
- @ZiJiaW made their first contribution in #714
- @erikcs made their first contribution in #739
Full Changelog: v0.14.1...v0.15.0
v0.14.1
- This release mainly addressed installation issues and updated documentation accordingly.
- We have 4 new contributors. @bsaunders27, @xhulianoThe1, @zpppy, and @bsaunders23. Thanks for your contributions!
What's Changed
- Update the python-publish workflow file to fix the package publish Gi… by @jeongyoonlee in #633
- Update Cython dependency by @alexander-pv in #640
- Fix for builds on Mac M1 infrastructure by @bsaunders27 in #641
- code cleanups by @xhulianoThe1 in #634
- support valid error early stopping by @zpppy in #614
- Revert "support valid error early stopping" by @jeongyoonlee in #645
- "support valid error early stopping" by @zpppy in #648
- fix: update to
envs/conda build for precompiled M1 installs by @bsaunders27 in #646 - Installation updates to README and .github/workflows by @ras44 in #637
- fix: simulate_randomized_trial by @bsaunders23 in #656
- issue 252 by @vincewu51 in #660
- ras44/651 graph viz, resolves #651 by @ras44 in #661
- linted with black by @ras44 in #663
- Fix issue 650 by @vincewu51 in #659
- Install graphviz in the workflow builds by @jeongyoonlee in #668
- Update docs/installation.rst by @jeongyoonlee in #667
- Schedule monthly PyPI install tests by @jeongyoonlee in #670
- v0.14.1 release by @jeongyoonlee in #672
New Contributors
- @bsaunders27 made their first contribution in #641
- @xhulianoThe1 made their first contribution in #634
- @zpppy made their first contribution in #614
- @bsaunders23 made their first contribution in #656
Full Changelog: v0.14.0...v0.14.1
v0.14.0
- CausalML surpassed 2MM downloads on PyPI and 4,100 stars on GitHub. Thanks for choosing CausalML and supporting us on GitHub.
- We have 7 new contributors: @darthtrevino, @ras44, @AbhishekVermaDH, @joel-mcmurry, @AlxClt, @kklein, and @volico. Welcome to the CausalML development team, and thanks for your contributions!
What's Changed
- Fix the readthedocs build failure by @jeongyoonlee in #545
- Add pyproject.toml with basic build dependencies for PEP518 compliance by @darthtrevino in #553
- bump numpy==1.23.2 in environment-py38.yml #338 by @ras44 in #550
- CausalTree split criterions fix and fit optimization by @alexander-pv in #557
- fixing math notations for proper rendering by @AbhishekVermaDH in #558
- Update methodology.rst by @joel-mcmurry in #568
- Causal trees bootstrapping and
max_leaf_nodesfixes with minor update by @alexander-pv in #583 - Fix #596 by @AlxClt in #597
- Add **kwargs to Explainer.plot_shap_values() by @jeongyoonlee in #603
- Make the Adam optimization optional and learning rate/epochs configurable in DragonNet by @jeongyoonlee in #604
- Fix bug in variance calculation in drivlearner. by @huigangchen in #606
- Bug Fix in Dragonnet: Adam parameter name lr depreciation by @huigangchen in #617
- Fix AttributeError in builds with numpy>=1.24 and pandas>=2.0 by @jeongyoonlee in #631
- Pass on **kwargs in
plot_shap_valuesof base meta leaner by @kklein in #627 - Bump scipy from 1.4.1 to 1.10.0 by @dependabot in #629
- Feature/ttest criterion by @volico in #570
- Added Interaction Tree (IT), Causal Inference Tree (CIT), and Invariant DDP (IDDP) by @jroessler in #562
- Causal trees option to return counterfactual outcomes by @alexander-pv in #623
- Up the version to 0.14 by @jeongyoonlee in #632
New Contributors
- @darthtrevino made their first contribution in #553
- @ras44 made their first contribution in #550
- @AbhishekVermaDH made their first contribution in #558
- @joel-mcmurry made their first contribution in #568
- @AlxClt made their first contribution in #597
- @kklein made their first contribution in #627
- @volico made their first contribution in #570
Full Changelog: v0.13.0...v0.14.0