Source code for causeinfer.standard_algorithms.pessimistic

"""
Pessimistic Uplift Transformation
---------------------------------

The Pessimistic Uplift Transformation Approach.

Based on
    Kuchumov, A. pyuplift: Lightweight uplift modeling framework for Python. (2019).
    URL: https://github.com/duketemon/pyuplift.
    License: https://github.com/duketemon/pyuplift/blob/master/LICENSE.

    Shaar, A., Abdessalem, T., and Segard, O. (2016). “Pessimistic Uplift Modeling”. ACM SIGKDD, August 2016, San
    Francisco, California USA, arXiv:1603.09738v1.
    URL:https://pdfs.semanticscholar.org/a67e/401715014c7a9d6a6679df70175be01daf7c.pdf.

Contents
    PessimisticUplift Class
        fit,
        predict (not available at this time),
        predict_proba
"""

from causeinfer.standard_algorithms.base_models import TransformationModel
from causeinfer.standard_algorithms.binary_transformation import BinaryTransformation
from causeinfer.standard_algorithms.reflective import ReflectiveUplift


[docs]class PessimisticUplift(TransformationModel): def __init__(self, model=None): try: model.__getattribute__("fit") model.__getattribute__("predict") except AttributeError: raise ValueError( "The passed model should contain both fit and predict methods." ) self.w_binary_trans = BinaryTransformation(model, regularize=False) self.w_reflective = ReflectiveUplift(model)
[docs] def fit(self, X, y, w): """ Trains a model given covariates, responses and assignments. Parameters ---------- X : numpy.ndarray : (num_units, num_features) : int, float Matrix of covariates. y : numpy.ndarray : (num_units,) : int, float Vector of unit responses. w : numpy.ndarray : (num_units,) : int, float Vector of original treatment allocations across units. Returns ------- self : causeinfer.standard_algorithms.PessimisticUplift A trained model. """ self.w_binary_trans.fit(X, y, w) self.w_reflective.fit(X, y, w) return self
# def predict(self, X): # """ # Predicts a causal effect given covariates. # Parameters # ---------- # X : numpy.ndarray : (num_units, num_features) : int, float # New data on which to make predictions. # Returns # ------- # predictions : numpy.ndarray : (num_units, 2) : float # """ # return predictions
[docs] def predict_proba(self, X): """ Predicts the probability that a subject will be a given class given covariates. Parameters ---------- X : numpy.ndarray : (num_units, num_features) : int, float New data on which to make predictions. Returns ------- probas : numpy.ndarray : (num_units, 2) : float Predicted probabilities for being a favorable class and an unfavorable class. """ w_binary_trans = self.w_binary_trans.predict_proba(X) w_reflective_uplift = self.w_reflective.predict_proba(X) return (w_binary_trans + w_reflective_uplift) / 2