0.15.1 (Apr 2024)

  • 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!


New contributors

0.15.0 (Feb 2024)

  • In this release, we revamped documentation, cleaned up dependencies, and improved installation - in addition to the long list of bug fixes.

  • We have three new contributors, @peterloleungyau, @SuperBo, and @ZiJiaW, who submitted their first PRs to CausalML. @erikcs also contributed to @ras44’s PR #729 to add the wrapper for his MAQ implementation to CausalML. Thanks for your contributions!


New contributors

0.14.1 (Aug 2023)

  • This release mainly addressed installation issues and updated documentation accordingly.

  • We have 4 new contributors. @bsaunders27, @xhulianoThe1, @zpppy, and @bsaunders23. Thanks for your contributions!


New contributors

0.14.0 (July 2023)

  • 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. Thanks for your contributions!


New contributors

0.13.0 (Sep 2022)

  • CausalML surpassed 1MM downloads on PyPI and 3,200 stars on GitHub. Thanks for choosing CausalML and supporting us on GitHub.

  • We have 7 new contributors @saiwing-yeung, @lixuan12315, @aldenrogers, @vincewu51, @AlkanSte, @enzoliao, and @alexander-pv. Thanks for your contributions!

  • @alexander-pv revamped CausalTreeRegressor and added CausalRandomForestRegressor with more seamless integration with scikit-learn’s Cython tree module. He also added integration with shap for causal tree/ random forest interpretation. Please check out the example notebook.

  • We dropped the support for Python 3.6 and removed its test workflow.


0.12.3 (Feb 2022)

This patch is to release a version without the constraint for Shap to be abled to use for Conda.


  • #483 by @ppstacy: Modify the requirement version of Shap

0.12.2 (Feb 2022)

This patch includes three updates by @tonkolviktor and @heiderich as follows. We also start using black, a Python formatter. Please check out the updated contribution guideline to learn how to use it.


  • #473 by @tonkolviktor: Open up the scipy dependency version

  • #476 by @heiderich: Use preferred backend for joblib instead of hard-coding it

  • #477 by @heiderich: Allow parallel prediction for UpliftRandomForestClassifier and make the joblib’s preferred backend configurable

0.12.1 (Feb 2022)

This patch includes two bug fixes for UpliftRandomForestClassifier as follows:


  • #462 by @paullo0106: Use the correct treatment_idx for fillTree() when applying validation data set

  • #468 by @jeongyoonlee: Switch the joblib backend for UpliftRandomForestClassifier to threading to avoid memory copy across trees

0.12.0 (Jan 2022)


  • Update documentation on Instrument Variable methods @huigangchen (#447)

  • Add benchmark simulation studies example notebook by @t-tte (#443)

  • Add sample_weight support for R-learner by @paullo0106 (#425)

  • Fix incorrect binning of numeric features in UpliftTreeClassifier by @jeongyoonlee (#420)

  • Update papers, talks, and publication info to README and refs.bib by @zhenyuz0500 (#410 #414 #433)

  • Add instruction for doc by @jeongyoonlee (#408)

  • Fix incorrect feature importance calculation logic by @paullo0106 (#406)

  • Add parallel jobs support for NearestNeighbors search with n_jobs parameter by @paullo0106 (#389)

  • Fix bug in simulate_randomized_trial by @jroessler (#385)

  • Add GA pytest workflow by @ppstacy (#380)

0.11.0 (2021-07-28)

Major Updates

  • Make tensorflow dependency optional and add python 3.9 support by @jeongyoonlee (#343)

  • Add delta-delta-p (ddp) tree inference approach by @jroessler (#327)

  • Add conda env files for Python 3.6, 3.7, and 3.8 by @jeongyoonlee (#324)

Minor Updates

  • Fix inconsistent feature importance calculation in uplift tree by @paullo0106 (#372)

  • Fix filter method failure with NaNs in the data issue by @manojbalaji1 (#367)

  • Add automatic package publish by @jeongyoonlee (#354)

  • Fix typo in unit_selection optimization by @jeongyoonlee (#347)

  • Fix docs build failure by @jeongyoonlee (#335)

  • Convert pandas inputs to numpy in S/T/R Learners by @jeongyoonlee (#333)

  • Require scikit-learn as a dependency of by @ibraaaa (#325)

  • Fix AttributeError when passing in Outcome and Effect learner to R-Learner by @paullo0106 (#320)

  • Fix error when there is no positive class for KL Divergence filter by @lleiou (#311)

  • Add versions to cython and numpy in for requirements.txt accordingly by @maccam912 (#306)

0.10.0 (2021-02-18)

Major Updates

  • Add Policy learner, DR learner, DRIV learner by @huigangchen (#292)

  • Add wrapper for CEVAE, a deep latent-variable and variational autoencoder based model by @ppstacy(#276)

Minor Updates

  • Add propensity_learner to R-learner by @jeongyoonlee (#297)

  • Add BaseLearner class for other meta-learners to inherit from without duplicated code by @jeongyoonlee (#295)

  • Fix installation issue for Shap>=0.38.1 by @paullo0106 (#287)

  • Fix import error for sklearn>= 0.24 by @jeongyoonlee (#283)

  • Fix KeyError issue in Filter method for certain dataset by @surajiyer (#281)

  • Fix inconsistent cumlift score calculation of multiple models by @vaclavbelak (#273)

  • Fix duplicate values handling in feature selection method by @manojbalaji1 (#271)

  • Fix the color spectrum of SHAP summary plot for feature interpretations of meta-learners by @paullo0106 (#269)

  • Add IIA and value optimization related documentation by @t-tte (#264)

  • Fix StratifiedKFold arguments for propensity score estimation by @paullo0106 (#262)

  • Refactor the code with string format argument and is to compare object types, and change methods not using bound instance to static methods by @harshcasper (#256, #260)

0.9.0 (2020-10-23)

  • CausalML won the 1st prize at the poster session in UberML’20

  • DoWhy integrated CausalML starting v0.4 (release note)

  • CausalML team welcomes new project leadership, Mert Bay

  • We have 4 new community contributors, Mario Wijaya (@mwijaya3), Harry Zhao (@deeplaunch), Christophe (@ccrndn) and Georg Walther (@waltherg). Thanks for the contribution!

Major Updates

  • Add feature importance and its visualization to UpliftDecisionTrees and UpliftRF by @yungmsh (#220)

  • Add feature selection example with Filter methods by @paullo0106 (#223)

Minor Updates

  • Implement propensity model abstraction for common interface by @waltherg (#223)

  • Fix bug in BaseSClassifier and BaseXClassifier by @yungmsh and @ppstacy (#217), (#218)

  • Fix parentNodeSummary for UpliftDecisionTrees by @paullo0106 (#238)

  • Add pd.Series for propensity score condition check by @paullo0106 (#242)

  • Fix the uplift random forest prediction output by @ppstacy (#236)

  • Add functions and methods to init for optimization module by @mwijaya3 (#228)

  • Install GitHub Stale App to close inactive issues automatically @jeongyoonlee (#237)

  • Update documentation by @deeplaunch, @ccrndn, @ppstacy(#214, #231, #232)

0.8.0 (2020-07-17)

CausalML surpassed 100,000 downloads! Thanks for the support.

Major Updates

  • Add value optimization to optimize by @t-tte (#183)

  • Add counterfactual unit selection to optimize by @t-tte (#184)

  • Add sensitivity analysis to metrics by @ppstacy (#199, #212)

  • Add the iv estimator submodule and add 2SLS model to it by @huigangchen (#201)

Minor Updates

  • Add GradientBoostedPropensityModel by @yungmsh (#193)

  • Add covariate balance visualization by @yluogit (#200)

  • Fix bug in the X learner propensity model by @ppstacy (#209)

  • Update package dependencies by @jeongyoonlee (#195, #197)

  • Update documentation by @jeongyoonlee, @ppstacy and @yluogit (#181, #202, #205)

0.7.1 (2020-05-07)

Special thanks to our new community contributor, Katherine (@khof312)!

Major Updates

  • Adjust matching distances by a factor of the number of matching columns in propensity score matching by @yungmsh (#157)

  • Add TMLE-based AUUC/Qini/lift calculation and plotting by @ppstacy (#165)

Minor Updates

  • Fix typos and update documents by @paullo0106, @khof312, @jeongyoonlee (#150, #151, #155, #163)

  • Fix error in UpliftTreeClassifier.kl_divergence() for pk == 1 or 0 by @jeongyoonlee (#169)

  • Fix error in without propensity score input by @jeongyoonlee (#170)

0.7.0 (2020-02-28)

Special thanks to our new community contributor, Steve (@steveyang90)!

Major Updates

  • Add a new nn inference submodule with DragonNet implementation by @yungmsh

  • Add a new feature selection submodule with filter feature selection methods by @zhenyuz0500

Minor Updates

  • Make propensity scores optional in all meta-learners by @ppstacy

  • Replace eli5 permutation importance with sklearn’s by @yluogit

  • Replace ElasticNetCV with LogisticRegressionCV in by @yungmsh

  • Fix the normalized uplift curve plot with negative ATE by @jeongyoonlee

  • Fix the TravisCI FOSSA error for PRs from forked repo by @steveyang90

  • Add documentation about tree visualization by @zhenyuz0500

0.6.0 (2019-12-31)

Special thanks to our new community contributors, Fritz (@fritzo), Peter (@peterfoley) and Tomasz (@TomaszZamacinski)!

  • Improve UpliftTreeClassifier’s speed by 4 times by @jeongyoonlee

  • Fix impurity computation in CausalTreeRegressor by @TomaszZamacinski

  • Fix XGBoost related warnings by @peterfoley

  • Fix typos and improve documentation by @peterfoley and @fritzo

0.5.0 (2019-11-26)

Special thanks to our new community contributors, Paul (@paullo0106) and Florian (@FlorianWilhelm)!

  • Add TMLELearner, targeted maximum likelihood estimator to inference.meta by @huigangchen

  • Add an option to DGPs for regression to simulate imbalanced propensity distribution by @huigangchen

  • Fix incorrect edge connections, and add more information in the uplift tree plot by @paullo0106

  • Fix an installation error related to Cython and numpy by @FlorianWilhelm

  • Drop Python 2 support from by @jeongyoonlee

  • Update causaltree.pyx Cython code to be compatible with scikit-learn>=0.21.0 by @jeongyoonlee

0.4.0 (2019-10-21)

  • Add uplift_tree_plot() to inference.tree to visualize UpliftTreeClassifier by @zhenyuz0500

  • Add the Explainer class to inference.meta to provide feature importances using SHAP and eli5’s PermutationImportance by @yungmsh

  • Add bootstrap confidence intervals for the average treatment effect estimates of meta learners by @ppstacy

0.3.0 (2019-09-17)

  • Extend meta-learners to support classification by @t-tte

  • Extend meta-learners to support multiple treatments by @yungmsh

  • Fix a bug in uplift curves and add Qini curves/scores to metrics by @jeongyoonlee

  • Add inference.meta.XGBRRegressor with early stopping and ranking optimization by @yluogit

0.2.0 (2019-08-12)

  • Add optimize.PolicyLearner based on Athey and Wager 2017 [6]

  • Add the CausalTreeRegressor estimator based on Athey and Imbens 2016 [4] (experimental)

  • Add missing imports in to enable label encoding with grouping of rare values in LabelEncoder()

  • Fix a bug that caused the mismatch between training and prediction features in inference.meta.tlearner.predict()

0.1.0 (unreleased)

  • Initial release with the Uplift Random Forest, and S/T/X/R-learners.