Changelog
0.12.0 (Jan 2022)
- CausalML surpassed 637K downloads on PyPI and 2K stars on Github!
- We have 4 new community contributors, Luis (@lgmoneda), Ravi (@raviksharma), Louis (@LouisHernandez17) and JackRab (@JackRab). Thanks for the contribution!
- We refactored and speeded up UpliftTreeClassifier/UpliftRandomForestClassifier by 5x with Cython (#422 #440 by @jeongyoonlee)
- We revamped our API documentation, it now includes the latest methodology, references, installation, notebook examples, and graphs! (#413 by @huigangchen @t-tte @zhenyuz0500 @jeongyoonlee @paullo0106)
- Our team gave talks at 2021 Conference on Digital Experimentation @ MIT (CODE@MIT), Causal Data Science Meeting 2021, and KDD 2021 Tutorials on CausalML introduction and applications. Please take a look if you missed them! Full list of publications and talks can be found here.
Updates
- 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 contributing.md 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 setup.py 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 setup.py 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 BaseRRegressor.fit() 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 propensity.py 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 setup.py 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 :cite:`athey2017efficient`
- Add the CausalTreeRegressor estimator based on Athey and Imbens 2016 :cite:`athey2016recursive` (experimental)
- Add missing imports in features.py 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.