code: def _tradeoff_curve(
      data,
      sensitive_feature_value,
      flip=False,
      x_metric="false_positive_rate",
      y_metric="true_positive_rate",
  ):
      """Get a convex hull of achievable trade-offs between the two provided metrics.
  
      The metrics are based on considering all possible thresholds of 'score' column of `data` and
      evaluated with respect to 'label' column of `data`.
  
      Parameters
      ----------
      data : pandas.DataFrame
          Data frame with columns 'score' and 'label'.
  
      sensitive_feature_value : str or int
          The sensitive feature value of the samples providing in `data`. Only used
          to generate a description when an exception is thrown.
  
      flip : bool, default=False
          If True, also consider the flipped thresholding (points below the threshold
          classified as positive and above the threshold as negative).
  
      Returns
      -------
      result : pandas.DataFrame
          The convex hull over the achievable trade-off points with columns
          'x', 'y', and 'operation'.
      """
      points_sorted = _calculate_tradeoff_points(
          data,
          sensitive_feature_value,
          flip=flip,
          x_metric=x_metric,
          y_metric=y_metric,
      )
      points_selected = _filter_points_to_get_convex_hull(points_sorted)
      convex_hull = pd.DataFrame(points_selected)[
          ["x", "y", "operation"]
      ]
      return convex_hull
  
file_path: fairlearn/fairlearn/postprocessing/_tradeoff_curve_utilities.py
imports: import numpy
  import pandas
  from sklearn.utils import Bunch
  from ._constants import LABEL_KEY, P0_KEY, P1_KEY, SCORE_KEY
  from ._threshold_operation import ThresholdOperation
label_desc: Use image node_id 2 for calling a global function with example usage: _tradeoff_curve(data, sensitive_feature_value, flip, x_metric, y_metric) and returns: convex_hull