Source code for etna.metrics.metrics

from etna.metrics import mae
from etna.metrics import mape
from etna.metrics import max_deviation
from etna.metrics import medae
from etna.metrics import mse
from etna.metrics import msle
from etna.metrics import r2_score
from etna.metrics import rmse
from etna.metrics import sign
from etna.metrics import smape
from etna.metrics import wape
from etna.metrics.base import Metric
from etna.metrics.base import MetricAggregationMode


[docs]class MAE(Metric): """Mean absolute error metric with multi-segment computation support. .. math:: MAE(y\_true, y\_pred) = \\frac{\\sum_{i=0}^{n-1}{\\mid y\_true_i - y\_pred_i \\mid}}{n} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=mae, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
[docs]class MSE(Metric): """Mean squared error metric with multi-segment computation support. .. math:: MSE(y\_true, y\_pred) = \\frac{\\sum_{i=0}^{n-1}{(y\_true_i - y\_pred_i)^2}}{n} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=mse, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
[docs]class RMSE(Metric): """Root mean squared error metric with multi-segment computation support. .. math:: RMSE(y\_true, y\_pred) = \\sqrt\\frac{\\sum_{i=0}^{n-1}{(y\_true_i - y\_pred_i)^2}}{n} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=rmse, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
[docs]class R2(Metric): """Coefficient of determination metric with multi-segment computation support. .. math:: R^2(y\_true, y\_pred) = 1 - \\frac{\\sum_{i=0}^{n-1}{(y\_true_i - y\_pred_i)^2}}{\\sum_{i=0}^{n-1}{(y\_true_i - \\overline{y\_true})^2}} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=r2_score, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return True
[docs]class MAPE(Metric): """Mean absolute percentage error metric with multi-segment computation support. .. math:: MAPE(y\_true, y\_pred) = \\frac{1}{n}\\cdot\\frac{\\sum_{i=0}^{n-1}{\\mid y\_true_i - y\_pred_i\\mid}}{\\mid y\_true_i \\mid + \epsilon} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=mape, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
[docs]class SMAPE(Metric): """Symmetric mean absolute percentage error metric with multi-segment computation support. .. math:: SMAPE(y\_true, y\_pred) = \\frac{2 \\cdot 100 \\%}{n}\\cdot\\frac{\\sum_{i=0}^{n-1}{\\mid y\_true_i - y\_pred_i\\mid}}{\\mid y\_true_i \\mid + \\mid y\_pred_i \\mid} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=smape, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
[docs]class MedAE(Metric): """Median absolute error metric with multi-segment computation support. .. math:: MedAE(y\_true, y\_pred) = median(\\mid y\_true_1 - y\_pred_1 \\mid, \\cdots, \\mid y\_true_n - y\_pred_n \\mid) Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=medae, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
[docs]class MSLE(Metric): """Mean squared logarithmic error metric with multi-segment computation support. .. math:: MSLE(y\_true, y\_pred) = \\frac{1}{n}\\cdot\\sum_{i=0}^{n - 1}{(ln(1 + y\_true_i) - ln(1 + y\_pred_i))^2} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=msle, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
[docs]class Sign(Metric): """Sign error metric with multi-segment computation support. .. math:: Sign(y\_true, y\_pred) = \\frac{1}{n}\\cdot\\sum_{i=0}^{n - 1}{sign(y\_true_i - y\_pred_i)} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=sign, **kwargs) @property def greater_is_better(self) -> None: """Whether higher metric value is better.""" return None
[docs]class MaxDeviation(Metric): """Max Deviation metric with multi-segment computation support (maximum deviation value of cumulative sums). .. math:: MaxDeviation(y\_true, y\_pred) = \\max_{j} | y_j |, where \\, y_j = \\sum_{i=1}^{j}{y\_pred_i - y\_true_i} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=max_deviation, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
[docs]class WAPE(Metric): """Weighted average percentage Error metric with multi-segment computation support. .. math:: WAPE(y\_true, y\_pred) = \\frac{\\sum_{i=0}^{n} |y\_true_i - y\_pred_i|}{\\sum_{i=0}^{n}|y\\_true_i|} Notes ----- You can read more about logic of multi-segment metrics in Metric docs. """ def __init__(self, mode: str = MetricAggregationMode.per_segment, **kwargs): """Init metric. Parameters ---------- mode: 'macro' or 'per-segment' metrics aggregation mode kwargs: metric's computation arguments """ super().__init__(mode=mode, metric_fn=wape, **kwargs) @property def greater_is_better(self) -> bool: """Whether higher metric value is better.""" return False
__all__ = ["MAE", "MSE", "RMSE", "R2", "MSLE", "MAPE", "SMAPE", "MedAE", "Sign", "MaxDeviation", "WAPE"]