Source code for oats.models.rule_based.quantile

"""
Quantile
-----------------
"""


import numpy as np
from numpy.lib.stride_tricks import sliding_window_view

from oats.models._base import Model


[docs]class QuantileModel(Model): """Quantile Model Rule-based model where we label timestep as anomalous if current observation is larger than past `window` onbservations at `quantile`. """ def __init__(self, window: int = 10, quantile: float = 0.98): """ Args: window (int, optional): rolling window size to feed into the predictor. Defaults to 10. quantile (float, optional): threshold level for anomaly labelling. Defaults to 0.98. """ self.window = window self.quantile = quantile pass
[docs] def fit(self, *args, **kwargs): return
[docs] def get_scores(self, data): if data.ndim > 1 and data.shape[1] > 1: return self._handle_multivariate(data, [self] * data.shape[1]) E = np.zeros(len(data)) for i in range(len(data)): if i > self.window - 1: window_threshold = np.percentile( data[i - self.window : i], self.quantile * 100, method="closest_observation", ) E[i] = 1 if data[i] > window_threshold else 0 return E