""" Модуль вычисления признака аномальной важности """ import numpy as np def compute_anomaly(features_matrix: np.ndarray, L: int = 2, eps: float = 1e-6) -> np.ndarray: """ Вычисление аномальной важности A(S_i) на основе отклонения от локального контекста. Args: features_matrix: матрица признаков N x 4 L: радиус локальной окрестности eps: малая константа для избежания деления на ноль Returns: массив аномалий A(S_i) в диапазоне [0, 1) """ N = features_matrix.shape[0] anomalies = [] for i in range(N): neighbor_indices = [] for k in range(max(0, i - L), min(N, i + L + 1)): if k != i: neighbor_indices.append(k) if len(neighbor_indices) < 2: anomalies.append(0.0) continue a_j = [] for j in range(4): values = features_matrix[neighbor_indices, j] median_val = np.median(values) mad = np.median(np.abs(values - median_val)) if mad < eps: a_j.append(0.0) else: dev = abs(features_matrix[i, j] - median_val) a_j.append(dev / (mad + eps)) raw_anomaly = np.mean(a_j) compressed = np.tanh(raw_anomaly / 3.0) anomalies.append(compressed) return np.array(anomalies)