Source code for evalml.objectives.cost_benefit_matrix

"""Cost-benefit matrix objective."""
import numpy as np

import evalml
from evalml.objectives.binary_classification_objective import (
    BinaryClassificationObjective,
)


[docs]class CostBenefitMatrix(BinaryClassificationObjective): """Score using a cost-benefit matrix. Scores quantify the benefits of a given value, so greater numeric scores represents a better score. Costs and scores can be negative, indicating that a value is not beneficial. For example, in the case of monetary profit, a negative cost and/or score represents loss of cash flow. Args: true_positive (float): Cost associated with true positive predictions. true_negative (float): Cost associated with true negative predictions. false_positive (float): Cost associated with false positive predictions. false_negative (float): Cost associated with false negative predictions. """ name = "Cost Benefit Matrix" greater_is_better = True score_needs_proba = False perfect_score = np.inf is_bounded_like_percentage = False # Range (-Inf, Inf) expected_range = [float("-inf"), float("inf")] def __init__(self, true_positive, true_negative, false_positive, false_negative): if None in {true_positive, true_negative, false_positive, false_negative}: raise ValueError( "Parameters to CostBenefitMatrix must all be numeric values.", ) self.true_positive = true_positive self.true_negative = true_negative self.false_positive = false_positive self.false_negative = false_negative
[docs] def objective_function( self, y_true, y_predicted, y_train=None, X=None, sample_weight=None, ): """Calculates cost-benefit of the using the predicted and true values. Args: y_predicted (pd.Series): Predicted labels. y_true (pd.Series): True labels. y_train (pd.Series): Ignored. X (pd.DataFrame): Ignored. sample_weight (pd.DataFrame): Ignored. Returns: float: Cost-benefit matrix score """ conf_matrix = evalml.model_understanding.metrics.confusion_matrix( y_true, y_predicted, normalize_method="all", ) cost_matrix = np.array( [ [self.true_negative, self.false_positive], [self.false_negative, self.true_positive], ], ) total_cost = np.multiply(conf_matrix.values, cost_matrix).sum() return total_cost