Source code for streamad.evaluate.series_aware_metrics

from streamad.base import BaseMetrics
from streamad.evaluate.ts_metrics import TSMetric
import numpy as np


[docs]class SeriesAwareMetircs(BaseMetrics):
[docs] def __init__( self, anomaly_threshold: float = 0.8, beta: float = 1.0, bias_p: str = "flat", bias_r: str = "flat", ): """Time series aware metrics :cite:`DBLP:conf/nips/TatbulLZAG18` Args: anomaly_threshold (float, optional): A threshold to determine the anomalies, it can covert the anomaly scores to binary (0/1) indicators. Defaults to 0.8. beta (float, optional): F-beta score, like a F1-score. Defaults to 1.0. bias_p (str, optional): Bias for precision. Optionals are "flat", "front", "middle", "back". Defaults to "flat". bias_r (str, optional): Bias for recall. Optionals are "flat", "front", "middle", "back". Defaults to "flat". """ super().__init__() self.threshold = anomaly_threshold self.beta = beta self.bias_p = bias_p self.bias_r = bias_r self.precision = None self.recall = None self.Fbeta = None
def evaluate(self, y_true: np.ndarray, y_pred: np.ndarray) -> tuple: super().evaluate(y_true, y_pred) select = self.y_pred > self.threshold self.y_pred[select] = 1 self.y_pred[~select] = 0 metric = TSMetric( metric_option="time-series", beta=self.beta, alpha_r=0.0, cardinality="reciprocal", bias_p=self.bias_p, bias_r=self.bias_r, ) self.precision, self.recall, self.Fbeta = metric.score( self.y_true, self.y_pred ) return self.precision, self.recall, self.Fbeta