Abstract class for metric.

Metric(metric_fn[, mode, metric_fn_signature])

Base class for all the multi-segment metrics.


Enum for different metric aggregation modes.

MetricFunction(*args, **kwargs)

Protocol for metric_fn parameter.


Enum for different metric function signatures.

class Metric(metric_fn: etna.metrics.base.MetricFunction, mode: str = MetricAggregationMode.per_segment, metric_fn_signature: str = 'array_to_scalar', **kwargs)[source]

Base class for all the multi-segment metrics.

How it works: Metric computes metric_fn value for each segment in given forecast dataset and aggregates it according to mode.

Init Metric.

  • metric_fn (etna.metrics.base.MetricFunction) – functional metric

  • mode (str) –

    “macro” or “per-segment”, way to aggregate metric values over segments:

    • if “macro” computes average value

    • if “per-segment” – does not aggregate metrics

  • metric_fn_signature (str) – type of signature of metric_fn (see MetricFunctionSignature)

  • kwargs – functional metric’s params

  • NotImplementedError: – If non-existent mode is used.

  • NotImplementedError: – If non-existent metric_fn_signature is used.

set_params(**params: dict) etna.core.mixins.TMixin

Return new object instance with modified parameters.

Method also allows to change parameters of nested objects within the current object. For example, it is possible to change parameters of a model in a Pipeline.

Nested parameters are expected to be in a <component_1>.<...>.<parameter> form, where components are separated by a dot.

  • **params – Estimator parameters

  • self (etna.core.mixins.TMixin) –

  • params (dict) –


New instance with changed parameters

Return type



>>> from etna.pipeline import Pipeline
>>> from etna.models import NaiveModel
>>> from etna.transforms import AddConstTransform
>>> model = model=NaiveModel(lag=1)
>>> transforms = [AddConstTransform(in_column="target", value=1)]
>>> pipeline = Pipeline(model, transforms=transforms, horizon=3)
>>> pipeline.set_params(**{"model.lag": 3, "transforms.0.value": 2})
Pipeline(model = NaiveModel(lag = 3, ), transforms = [AddConstTransform(in_column = 'target', value = 2, inplace = True, out_column = None, )], horizon = 3, )

Collect all information about etna object in dict.

abstract property greater_is_better: Optional[bool]

Whether higher metric value is better.

property name: str

Name of the metric for representation.

class MetricAggregationMode(value)[source]

Enum for different metric aggregation modes.