Skip to content

kolena._experimental.workflow.ThresholdedMetrics#

Experimental Feature

This pre-built workflow is an experimental feature. Experimental features are under active development and may occasionally undergo API-breaking changes.

Thresholded Metrics play a crucial role in specific contexts of model evaluation, particularly when the performance of models is assessed based on varying threshold values. In such scenarios, these metrics are vital for accurately interpreting the effectiveness of the models, as different thresholds can lead to markedly different performance outcomes.

ThresholdedMetrics(threshold) dataclass #

Bases: TypedDataObject[_MetricsType]

Represents metrics tied to a specific threshold.

List[ThresholdedMetrics] should be used as a field type within MetricsTestSample from the kolena.workflow module. This list is meant to hold metric values associated with distinct thresholds. These metrics are expected to be uniform across TestSample instances within a single test execution.

ThresholdedMetrics prohibits the use of dictionary objects as field values and guarantees that the threshold values remain immutable once set. For application within a particular workflow, subclassing is required to define relevant metrics fields.

Usage example:

from kolena.workflow import MetricsTestSample
from kolena._experimental.workflow import ThresholdedMetrics

@dataclass(frozen=True)
class ClassThresholdedMetrics(ThresholdedMetrics):
    precision: float
    recall: float
    f1: float

@dataclass(frozen=True)
class TestSampleMetrics(MetricsTestSample):
    car: List[ClassThresholdedMetrics]
    pedestrian: List[ClassThresholdedMetrics]

# Creating an instance of metrics
metric = TestSampleMetrics(
    car=[
        ClassThresholdedMetrics(threshold=0.3, precision=0.5, recall=0.8, f1=0.615),
        ClassThresholdedMetrics(threshold=0.4, precision=0.6, recall=0.6, f1=0.6),
        ClassThresholdedMetrics(threshold=0.5, precision=0.8, recall=0.4, f1=0.533),
        # ...
    ],
    pedestrian=[
        ClassThresholdedMetrics(threshold=0.3, precision=0.6, recall=0.9, f1=0.72),
        ClassThresholdedMetrics(threshold=0.4, precision=0.7, recall=0.7, f1=0.7),
        ClassThresholdedMetrics(threshold=0.5, precision=0.8, recall=0.6, f1=0.686),
        # ...
    ],
)

Raises: TypeError: If any of the field values is a dictionary.