import pandas as pd
from .objective_base import ObjectiveBase
from evalml.problem_types import ProblemTypes
[docs]class LeadScoring(ObjectiveBase):
    """Lead scoring"""
    name = "Lead Scoring"
    problem_types = [ProblemTypes.BINARY]
    needs_fitting = True
    greater_is_better = True
    score_needs_proba = False
    name = "Lead Scoring"
[docs]    def __init__(self, true_positives=1, false_positives=-1, verbose=False):
        """Create instance.
        Arguments:
            label (int) : label to optimize threshold for
            true_positives (int) : reward for a true positive
            false_positives (int) : cost for a false positive. Should be negative.
        """
        self.true_positives = true_positives
        self.false_positives = false_positives
        super().__init__(verbose=verbose) 
[docs]    def decision_function(self, y_predicted, threshold):
        if not isinstance(y_predicted, pd.Series):
            y_predicted = pd.Series(y_predicted)
        return y_predicted > threshold 
[docs]    def objective_function(self, y_predicted, y_true):
        if not isinstance(y_predicted, pd.Series):
            y_predicted = pd.Series(y_predicted)
        if not isinstance(y_true, pd.Series):
            y_true = pd.Series(y_true)
        true_positives = (y_true & y_predicted).sum()
        false_positives = (~y_true & y_predicted).sum()
        profit = self.true_positives * true_positives
        profit += self.false_positives * false_positives
        profit_per_lead = profit / len(y_true)
        return profit_per_lead