Skip to content

Proposal: Add ECE to evaluate #784

Description

@itsfernn

Expected Calibration Error (ECE) is a widely-used metric for evaluating how well a classifier's predicted confidence scores align with actual outcomes (Guo et al., 2017). It is a standard diagnostic in modern deep learning pipelines, on par with Brier score (already in evaluate) for calibration assessment, but is not yet available in evaluate.

Happy to implement this myself, just wanted to check on scope and design before I open a PR.

Proposed API

At minimum, this metric requires predictions and references as inputs.

>>> import numpy as np
>>> ece = evaluate.load("ece")
>>> references = np.array([0, 0, 1, 1])
>>> predictions = np.array([0.25, 0.25, 0.75, 0.75])
>>> results = ece.compute(references=references, predictions=predictions,
n_bins=2)
>>> print(results)
{'ece': 0.25, 'mce': 0.25, 'adaptive_ece': 0.25}

Inputs

  • references: array-like of shape (n_samples,), representing the ground truth labels. Can be numeric (0/1 or -1/1) or strings.
  • predictions: numeric array-like of shape (n_samples,), representing the predicted confidence scores (probabilities in [0, 1]) for the positive class.

Optional arguments:

  • n_bins: number of bins (default is 10).
  • strategy: binning strategy "uniform" (equal-width) or "adaptive" (equal-mass) (default is "uniform").
  • pos_label: int or str, default=None. Label of the positive class. pos_label will be inferred as follows:
    • if references in {-1, 1} or {0, 1}, pos_label defaults to 1;
    • else if references contains strings, pos_label must be explicitly specified (an error is raised otherwise);
    • otherwise, pos_label defaults to the greater label, i.e. np.unique(references)[-1].
  • return_detailed: if True, returns per-bin reliability diagram data (default is False).

Output Values

This metric returns a dictionary with the following keys:

  • ece (float): Expected Calibration Error.
  • mce (float): Maximum Calibration Error.
  • adaptive_ece (float): Adaptive ECE using equal-mass binning.
  • reliability_diagram (list[dict], optional): per-bin data when return_detailed=True.

Implementation approach

Brier score uses scikit-learn. ECE is not in scikit-learn, so either:

A. ECE is implemented from scratch using numpy
B. Or a dependency is added and the netcal implementation is used.

References

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions