Source code for incerto.conformal.metrics
"""
incerto.conformal.metrics
-------------------------
Evaluation utilities for conformal predictors.
"""
from __future__ import annotations
import torch
from typing import Sequence
[docs]
def empirical_coverage(y: torch.Tensor, sets: Sequence[torch.Tensor]) -> float:
"""Fraction of test examples where y_i ∈ Ŝ_i."""
hits = [(yi in Si) for yi, Si in zip(y.cpu(), sets)]
return float(torch.tensor(hits).float().mean())
[docs]
def average_set_size(sets: Sequence[torch.Tensor]) -> float:
return float(torch.tensor([len(Si) for Si in sets]).float().mean())
[docs]
def conditional_coverage(
y: torch.Tensor,
sets: Sequence[torch.Tensor],
groups: torch.Tensor,
) -> dict[int, float]:
"""
Coverage conditioned on *groups* (e.g., class labels).
Returns a mapping group → coverage.
"""
cover = {}
for g in torch.unique(groups):
mask = groups == g
cover[int(g)] = empirical_coverage(
y[mask], [s for m, s in zip(mask, sets) if m]
)
return cover