Package: upliftml
UpliftML: A Python Package for Scalable Uplift ModelingUpliftMLis a Python package for scalable unconstrained and constrained uplift modeling from experimental data. To accommodate working with big data, the package uses PySpark and H2O models as base learners for the uplift models. Evaluation functions expect a PySpark dataframe as input.Uplift modelingis a family of techniques for estimating the Conditional Average Treatment Effect (CATE) from experimental or observational data using machine learning. In particular, we are interested in estimating the causal effect of a treatment T on the outcome Y of an individual characterized by features X. In experimental data with binary treatments and binary outcomes, this is equivalent to estimating Pr(Y=1 | T=1, X=x) - Pr(Y=1 | T=0, X=x).In many practical use cases the goal is to select which users to target in order to maximize the overall uplift without exceeding a specifiedbudget or ROI constraint. In those cases, estimating uplift alone is not sufficient to make optimal decisions and we need to take into account the costs and monetary benefit incurred by the treatment.Uplift modeling is an emerging tool for various personalization applications. Example use cases include marketing campaigns personalization and optimization, personalized pricing in e-commerce, and clinical treatment personalization.TheUpliftMLlibrary includes PySpark/H2O implementations for the following:6 metalearner approaches for uplift modeling: T-learner[1], S-learner[1], X-learner[1], R-learner[2], class variable transformation[3], transformed outcome approach[4].The Retrospective Estimation[5] technique for uplift modeling under ROI constraints.The Uplift Random Forest [6]; a tree-based algorithm for uplift modeling.Uplift and iROI-based evaluation and plotting functions with bootstrapped confidence intervals. Currently implemented: ATE, ROI, iROI, CATE per category/quantile, CATE lift, Qini/AUUC curves[7], Qini/AUUC score[7], cumulative iROI curves.For detailed information about the package, read theUpliftML documentation.InstallationInstall the latest release from PyPI:$ pip install upliftmlQuick Startfromupliftml.models.pysparkimportTLearnerEstimatorfromupliftml.evaluationimportestimate_and_plot_qinifromupliftml.datasetsimportsimulate_randomized_trialfrompyspark.ml.classificationimportLogisticRegression# Read/generate the dataset and convert it to Spark if neededdf_pd=simulate_randomized_trial(n=2000,p=6,sigma=1.0,binary_outcome=True)df_spark=spark.createDataFrame(df_pd)# Split the data into train, validation, and test setsdf_train,df_val,df_test=df_spark.randomSplit([0.5,0.25,0.25])# Preprocess the datasets (for implementation of get_features_vector, see the full example notebook)num_features=[colforcolindf_spark.columnsifcol.startswith('feature')]cat_features=[]df_train_assembled=get_features_vector(df_train,num_features,cat_features)df_val_assembled=get_features_vector(df_val,num_features,cat_features)df_test_assembled=get_features_vector(df_test,num_features,cat_features)# Build a two-model estimatormodel=TLearnerEstimator(base_model_class=LogisticRegression,base_model_params={'maxIter':15},predictors_colname='features',target_colname='outcome',treatment_colname='treatment',treatment_value=1,control_value=0)model.fit(df_train_assembled,df_val_assembled)# Apply the model to test datadf_test_eval=model.predict(df_test_assembled)# Evaluate performance on the test setqini_values,ax=estimate_and_plot_qini(df_test_eval)For complete examples with more estimators and evaluation functions, see the demo notebooks in theexamplesfolder.ContributingIf interested in contributing to the package, get started by reading ourcontributor guidelines.LicenseThe project is licensed underApache 2.0 LicenseCitationIf you use UpliftML, please cite it as follows:Irene Teinemaa, Javier Albert, Nam Pham.UpliftML: A Python Package for Scalable Uplift Modeling.https://github.com/bookingcom/upliftml, 2021. Version 0.0.1.@misc{upliftml,
  author={Irene Teinemaa, Javier Albert, Nam Pham},
  title={{UpliftML}: {A Python Package for Scalable Uplift Modeling}},
  howpublished={https://github.com/bookingcom/upliftml},
  note={Version 0.0.1},
  year={2021}
}ResourcesDocumentation:UpliftML documentationTutorials and blog posts:Retrospective Estimation (blog post)Uplift modeling tutorial at WebConf'2021Personalization in Practice tutorial at WSDM'2021Related packages:CausalML: a Python package for uplift modeling and causal inference with machine learningEconML: a Python package for estimating heterogeneous treatment effects from observational data via machine learningReferencesSören R. Künzel, Jasjeet S. Sekhon, Peter J. Bickel, and Bin Yu. Metalearners for estimating heterogeneous treatment effects using machine learning. Proceedings of the National Academy of Sciences, 2019.Xinkun Nie and Stefan Wager. Quasi-oracle estimation of heterogeneous treatment effects. arXiv preprint arXiv:1712.04912, 2017.Maciej Jaskowski and Szymon Jaroszewicz. Uplift modeling for clinical trial data. ICML Workshop on Clinical Data Analysis, 2012.Susan Athey and Guido W. Imbens. Machine learning methods for estimating heterogeneous causal effects. stat, 1050(5), 2015.Dmitri Goldenberg, Javier Albert, Lucas Bernardi, Pablo Estevez Castillo. Free Lunch! Retrospective Uplift Modeling for Dynamic Promotions Recommendation within ROI Constraints. In Fourteenth ACM Conference on Recommender Systems (pp. 486-491), 2020.Sołtys, Michał, Szymon Jaroszewicz, and Piotr Rzepakowski. Ensemble methods for uplift modeling. Data mining and knowledge discovery 29.6 (2015): 1531-1559.Nicholas J Radcliffe and Patrick D Surry. Real-world uplift modelling with significance based uplift trees. White Paper tr-2011-1, Stochastic Solutions, 2011.