25 / 27 · Обучение без учителя
Поиск аномалий
Поиск редких точек, которые не вписываются в данные: постановки с учителем, обнаружения новизны и поиска выбросов, оценки по плотности гауссианы или смеси, оценки по расстояниям до ближайших соседей и локальный коэффициент выброса, изолирующий лес и его оценка через длину пути, одноклассовый SVM и как оценивать детектор и выбирать порог, когда аномалии редки.
Смеси распределений и EM-алгоритм · Метод ближайших соседей · Метод опорных векторов · Метрики классификации
На этой странице 12
Предыдущая заметка закончилась моделями, которые являются плотностями: гауссовская смесь или вероятностный PCA говорят не только, где находятся данные, но и насколько вероятна каждая точка. Мошенническая транзакция, неисправный датчик, испорченная запись или вторжение — обычно точка, которую такая модель считает маловероятной. Поиск аномалий (anomaly detection) превращает это наблюдение в метод: приписать каждой точке оценку аномальности, высокую для точек, которые не вписываются, и отметить точки выше порога. Аномалии редки, разнообразны и часто прежде не встречались, поэтому размеченной обучающей выборки для них почти никогда нет, а у понятия «не вписывается» та же свобода, что была у понятия кластера. Эта заметка проходит по основным семействам оценок, у каждого из которых своё определение необычного: низкая плотность, далеко от соседей, быстро изолируется, вне выученной границы. Заканчивается она вопросом, который решает, полезен ли детектор на практике: как оценить его и выбрать порог, когда аномалий лишь горстка.
Обозначения. — обучающие точки, — оценка аномальности (больше — аномальнее), — порог: отмечается, когда . отмечает настоящую аномалию, когда для оценки качества есть разметка. — предполагаемая доля аномалий (загрязнённость, contamination); параметр одноклассового SVM ниже — другая величина. — расстояние от до её -го ближайшего соседа среди обучающих точек.
Три постановки#
Что можно выучить, зависит от того, что размечено.
- С учителем. Размечены и нормальные точки, и аномалии. Это классификация с сильно неравными классами, которую решают инструментами из заметки о метриках классификации: веса классов, повторная выборка (resampling) и метрики, которые не поощряют постоянный ответ «норма». Такой детектор находит аномалии тех видов, которые ему показали, и может пропустить новые.
- С частичным привлечением учителя, или обнаружение новизны (novelty detection). Обучающая выборка содержит только нормальные точки, заведомо чистые. Модель описывает их, и новая точка отмечается, если не подходит под описание. Большинство методов ниже рассчитаны на эту постановку.
- Без учителя, или поиск выбросов (outlier detection). Обучающая выборка не размечена и загрязнена небольшой долей аномалий; задача — найти их в тех же данных. Методы те же, но они должны быть устойчивы к аномалиям, на которых обучаются, а порог часто задаёт .
Большинство методов находят точечные аномалии (point anomalies) — отдельные точки, необычные сами по себе. Контекстная аномалия (contextual anomaly) необычна только в контексте: C — норма в январе и аномалия в июле. Такие случаи сводят к точечным аномалиям, добавляя контекст в признаки или моделируя условное распределение при данном контексте.
Оценки по плотности#
Самое прямое определение: аномалия — точка малой вероятности при модели нормальных данных. Подгоняем плотность методом максимального правдоподобия и используем .
Одна гауссиана. Для минус логарифм плотности с точностью до констант равен половине квадрата расстояния Махаланобиса
— расстояния от среднего, измеренного в стандартных отклонениях вдоль каждой главной оси. Если нормальные данные гауссовские, а среднее и ковариация истинные, имеет распределение хи-квадрат с степенями свободы, что даёт порог с известной долей ложных тревог. При квантиль уровня 99% равен : отмечая точки с , то есть с расстоянием Махаланобиса больше , мы отмечаем 1% нормальных точек. С оценёнными и закон хи-квадрат — лишь приближение, хорошее, когда велико по сравнению с . В моделировании с гауссовскими точками при и обычной оценке ковариации тот же порог отмечает около 0.4% точек, по которым строились оценки, и 2.3% новых нормальных точек. Порог, откалиброванный на независимых нормальных валидационных данных, как в разделе об оценке качества ниже, снимает этот вопрос. Без гауссовского предположения неравенство Чебышёва всё равно ограничивает долю нормальных точек дальше стандартных отклонений в одномерном случае величиной — гораздо более осторожный порог.
Среднее и ковариационную матрицу смещают те самые аномалии, которые нужно обнаружить: несколько далёких точек раздувают и прячут друг друга (маскировка, masking). Робастные оценки подгоняют ковариационную матрицу по самой сконцентрированной части данных, например оценка минимального определителя ковариации (minimum covariance determinant; Rousseeuw and Van Driessen, 1999). Они предполагают один кластер нормальных точек: на данных из двух кластеров из раздела «Код» робастная подгонка описывает только плотный кластер и отмечает весь второй, и её ROC-AUC падает с 0.886 для обычной гауссианы до 0.738.
Смесь. Нормальным данным с несколькими модами нужна гауссовская смесь с ; на тех же данных смесь из двух компонент достигает ROC-AUC 0.911. Другие варианты — ядерные оценки плотности и вероятностный PCA; для PCA ошибка восстановления , расстояние до главного подпространства, — распространённая оценка сама по себе.
У оценок по плотности две слабости. Для оценивания плотности нужно много точек на размерность, что ограничивает непараметрические оценки несколькими размерностями. И в высокой размерности высокая плотность не означает типичности: сэмплы стандартной гауссианы в 100 измерениях лежат в тонком сферическом слое далеко от моды, где плотность наибольшая, поэтому точка в моде была бы крайне необычной и всё же получила бы лучшую оценку. Глубокие генеративные модели показывают тот же эффект на изображениях: модели, обученные на CIFAR-10, приписывают номерам домов из SVHN более высокое правдоподобие, чем тестовым изображениям CIFAR-10, — парадокс правдоподобия, обсуждаемый в заметках о моделях, основанных на энергии, и о нормализующих потоках.
Оценки по расстояниям: ближайшие соседи и LOF#
Определение без плотности: аномалия далека от остальных точек. Оценка по ближайшим соседям — , расстояние до -го ближайшего соседа (Ramaswamy, Rastogi and Shim, 2000), или среднее расстояние до ближайших. Ей не нужна модель, она работает с любым расстоянием и подстраивается под кластеры любой формы. Она наследует слабости ближайших соседей: стоимость поиска соседей, зависимость от масштабирования признаков и расстояния, концентрирующиеся в высокой размерности.
К тому же она использует один глобальный масштаб. Рядом с плотным кластером точка на расстоянии 1 явно аномальна; внутри разреженного кластера расстояние 1 обычно. Единый порог на либо пропускает первую, либо отмечает край разреженного кластера. Локальный коэффициент выброса (local outlier factor, LOF) Breunig et al. (2000) сравнивает плотность каждой точки с плотностью её соседей. Пусть — ближайших соседей :
- Расстояние достижимости (reachability distance) точки от соседа равно : настоящее расстояние, но не меньше собственного -расстояния точки , что сглаживает статистику для точек, очень близких к .
- Локальная плотность достижимости (local reachability density) — величина, обратная среднему расстоянию достижимости от соседей, .
- Локальный коэффициент выброса — отношение плотности соседей к собственной плотности точки:
Глубоко внутри кластера, плотного или разреженного, точка так же плотна, как её соседи, и . У точки рядом с плотным кластером, но в разреженном месте, соседи гораздо плотнее её самой, и её LOF велик, хотя абсолютные расстояния малы.
Разобранный пример. На прямой возьмём и точки . У каждой точки, кроме и , ближайший сосед на расстоянии 1; у и тоже (они соседи друг друга). Все , все расстояния достижимости равны 1, все плотности равны 1, и каждый LOF равен 1: две хорошо разделённые группы одинаковой плотности не содержат локальных выбросов. Добавим точку : её ближайший сосед — на расстоянии 3, поэтому , тогда как , и .
Четыре оценки аномальности на одних данных
Рисунок сопоставляет четыре оценки на данных, построенных так, чтобы их различить: плотный и разреженный кластеры, шесть аномалий вдали от всего и две рядом с плотным кластером. Две локальные аномалии ближе к своим соседям, чем крайние точки разреженного кластера к своим, поэтому расстояние до 10-го соседа ставит крайние точки первыми; LOF, сравнивающий плотности локально, — единственная оценка, которая ставит наверх все восемь аномалий. Сравнение построено, чтобы показать, что добавляет LOF, а не чтобы ранжировать методы в целом: на равномерно распределённых аномалиях из раздела «Код» у LOF наименьший ROC-AUC среди оценок по расстояниям.
Изолирующий лес#
Оценки до сих пор моделировали нормальные данные и измеряли расстояние до них. Изолирующий лес (isolation forest; Liu, Ting and Zhou, 2008) измеряет, насколько легко отделить точку от остальных. Рекурсивно разбиваем данные случайным образом: выбираем случайную координату и порог, равномерно распределённый между минимумом и максимумом текущих точек по этой координате, и продолжаем в каждой части, пока каждая точка не останется одна. Аномалию, немногочисленную и непохожую, обычно отсекают за несколько разрезов; точке в плотной области их нужно много. Число разрезов на пути от корня до листа точки, её длина пути (path length) , и есть оценка, усреднённая по многим случайным деревьям, как в случайных лесах из заметки о бэггинге.
Изоляция случайными разрезами
Длине пути нужен эталонный масштаб, потому что деревья на большем числе точек глубже. Дерево, изолирующее точек, имеет внутренних узлов, как двоичное дерево поиска с ключами, а для случайных двоичных деревьев поиска известна средняя глубина неуспешного поиска, который заканчивается в одном из листьев (Liu et al., раздел 2, со ссылкой на Preiss). Она даёт нормировку
— среднюю длину пути точки в дереве на точках. Поскольку , та же величина равна . Оценка аномальности равна
что даёт , когда средняя длина пути равна , стремится к 1, когда она уменьшается до 0, и стремится к 0, когда она растёт до . Liu et al. читают оценку так: точки с , близкой к 1, — явные аномалии, точки с заметно ниже нормальны, а когда у всех точек , в выборке нет явных аномалий (раздел 2). Это прочтение оценки изоляции, а не откалиброванная вероятность того, что точка аномальна: что означает , зависит от данных, и порог по требует калибровки, как и для любой другой оценки.
Разобранный пример. При имеем , поэтому . Точка, изолируемая в среднем за 3 разреза, получает ; точка, которой нужно 10.249 разреза, — ; точка, которой нужно 15, — . В статье гармоническое число приближается как (постоянная Эйлера), что даёт — пренебрежимая разница. При малых приближение плохое: точно против с логарифмом. Это важно для поправки ниже, которая применяется к листьям с несколькими точками; scikit-learn использует точные значения и и логарифмическое приближение начиная с .
Три конструктивных решения делают метод быстрым и устойчивым (раздел 4). Каждое дерево строится на подвыборке из точек, взятых без возвращения, по умолчанию , при деревьях. Маленькие подвыборки помогают: вокруг аномалий теснится меньше нормальных точек (затопление, swamping), и меньше аномалий заслоняют друг друга (маскировка). Деревья строятся только до ограничения высоты (height limit) , средней глубины, потому что важны только короткие пути; точка, дошедшая до листа, в котором ещё точек, получает — свою глубину плюс среднюю глубину недостроенного поддерева. И оценка использует только сравнения, без расстояний, поэтому обучение стоит , вычисление оценки — на точку, независимо от , а метод нечувствителен к масштабу каждого признака. Его слабость — разрезы вдоль осей: аномалии, которые отличаются от данных только вдоль диагонали или сидят в дыре, окружённой нормальными точками, трудно изолировать разрезами, параллельными осям, а карта оценок показывает артефакты, выровненные по осям. Рисунок сравнения выше показывает и глобальный взгляд: как и расстояние до соседа, изолирующий лес пропускает две локальные аномалии.
Одноклассовый SVM#
Одноклассовый SVM (one-class SVM; Schölkopf et al., 2001) выучивает не оценку, а границу вокруг нормальных данных. В пространстве признаков ядра он отделяет отображённые точки от начала координат с наибольшим отступом (margin), допуская часть точек по неверную сторону:
Решающая функция — , отрицательная для аномалий, и, как у метода опорных векторов, двойственная задача зависит от данных только через ядро: с и . У параметра прямой смысл, ν-свойство (ν-property): это верхняя граница доли обучающих точек вне границы и нижняя граница доли опорных векторов. В разделе «Код» при вне границы оказываются 18.7% обучающих точек, а опорными векторами являются 21.4%. Поэтому — настройка оптимизации, а не истинная доля аномалий: он определяет, сколько обучающих точек граница оставляет снаружи, каким бы ни был их статус, а настоящая загрязнённость может быть больше или меньше. Положить разумно, когда известна, но это выбор, а не тождество. С гауссовским ядром — взвешенная сумма «горбов» вокруг опорных векторов минус порог; при ограничения заставляют все , и становится ядерной оценкой плотности с порогом. Метод описывает границы любой формы, но ширину ядра и приходится выбирать без разметки, стоимость растёт быстрее, чем линейно по , и, как всем ядерным методам, ему нужны масштабированные признаки.
Оценка качества при редкой разметке#
Даже если при обучении разметка не используется, для оценки качества она нужна: набор точек с известным статусом, часто несколько сотен нормальных точек и несколько десятков аномалий, собранных по инцидентам. Три обстоятельства отличают такую оценку от обычной классификации.
Доля правильных ответов бессмысленна. При 1% аномалий детектор, который ничего не отмечает, даёт 99% правильных ответов (accuracy). Детекторы сравнивают по тому, как они ранжируют точки, поскольку порог выбирается позже: по ROC-AUC, вероятности того, что случайная аномалия получит оценку выше случайной нормальной точки, как выведено в заметке о метриках классификации, и по средней точности (average precision, AP) — площади под кривой точности–полноты.
ROC-AUC льстит редким положительным примерам. Доля ложноположительных срабатываний делится на большое число нормальных точек, поэтому у детектора может быть малая доля ложноположительных срабатываний, и всё же его настоящие тревоги будут погребены среди ложных. Точность показывает это прямо, по расчёту с базовой частотой: при 1% аномалий у детектора, который находит 90% из них при доле ложноположительных срабатываний 1%, точность равна
так что половина его тревог ложные. На 513 точках из раздела «Код», среди которых 13 аномалий, значения ROC-AUC методов лежат между 0.74 и 0.92 и выглядят похожими; их значения AP лежат между 0.15 и 0.69 и различают методы гораздо сильнее. Для редких аномалий стоит приводить кривую точности–полноты и AP (Saito and Rehmsmeier, 2015; раздел о кривой точности–полноты заметки о метриках), а при фиксированном бюджете тревог — точность среди первых тревог.
Мало меток — широкие доверительные интервалы. При 13 аномалиях полнота меняется шагами по 7.7%, и разница в одно-два обнаружения между методами — это шум. Насколько велик этот шум, показывает бутстрэп по размеченным точкам, как в заметке о доверительных интервалах.
Выбор порога. Оценка ранжирует; порог решает, сколько точек станут тревогами. Три распространённых способа:
- По загрязнённости. В постановке без учителя отметить долю обучающих точек с наибольшими оценками. Это делает параметр
contaminationв scikit-learn; ему нужна догадка о величине . - По доле ложных тревог. В постановке обнаружения новизны вычислить оценки на чистых валидационных данных и поставить на их квантиль уровня ; тогда будет отмечаться примерно доля будущих нормальных точек. В разделе «Код» квантиль уровня 99% по 10 000 оценок чистых валидационных данных даёт долю ложных тревог 0.9% на свежих нормальных данных при целевом 1%.
- По стоимости или пропускной способности. Если аналитик может проверить 50 тревог в день, порог — оценка 50-й точки; если пропущенная аномалия стоит ста ложных тревог, применимо правило стоимостей из заметки о метриках классификации, но этому правилу нужна откалиброванная вероятность аномальности, а оценки выше вероятностями не являются. Либо сначала откалибруйте оценку на размеченных валидационных данных, либо переберите пороги на таких данных и выберите порог с наименьшей суммарной стоимостью.
Что изменилось#
| Плотность (гауссиана, смесь) | Расстояние kNN | LOF | Изолирующий лес | Одноклассовый SVM | |
|---|---|---|---|---|---|
| Аномалия — это точка | маловероятная при модели | далёкая от соседей | более разреженная, чем соседи | быстро изолируемая | вне выученной границы |
| Масштаб | глобальный | глобальный | локальный | глобальный | глобальный |
| Нужно | семейство плотностей | расстояние | расстояние, | только сравнения | ядро, |
| Стоимость оценки | дёшево | поиск соседей | поиск соседей | сумма ядер по опорным векторам | |
| Порог | квантиль хи-квадрат, правдоподобие | квантиль | LOF заметно больше 1 | около 1 | , долю ограничивает |
| Слабое место | высокая размерность, мультимодальные данные | разная плотность | высокая размерность, стоимость | диагональная структура, локальные аномалии | выбор ядра, большое |
Ограничения#
- Ни одно определение не подходит для всех аномалий. Каждая оценка закладывает одно представление о необычном; аномалии другого рода проходят незамеченными. Практический ответ — комбинировать оценки или выбирать по размеченным инцидентам.
- Высокая размерность. Плотности нельзя оценить, расстояния концентрируются, а нерелевантные признаки прячут релевантные; оценки обычно вычисляют на нескольких главных компонентах или на выученных представлениях.
- Загрязнённые обучающие данные. Модели, обученные на данных с аномалиями, выучивают их как норму, а робастные оценки предполагают структуру (один кластер), которой может не быть.
- Редкая и меняющаяся разметка. Оценка качества опирается на несколько десятков известных аномалий, доверительные интервалы широки, а после внедрения появляются новые виды аномалий. Детектор нуждается в мониторинге, как любая модель, у которой дрейфует распределение входов.
- Оценка — не объяснение. Аналитику нужно знать, почему точка отмечена; LOF и изолирующий лес дают число, а не причину.
Что нужно запомнить#
- Поиск аномалий с учителем — несбалансированная классификация; обнаружение новизны учится на чистых нормальных данных; поиск выбросов находит аномалии в загрязнённых данных без разметки.
- Оценки по плотности используют ; для одной гауссианы это расстояние Махаланобиса с порогом по хи-квадрат, точным при известных параметрах и приближённым при оценённых. В высокой размерности высокая плотность не означает типичности.
- Расстояние до -го ближайшего соседа отмечает точки, далёкие от соседей, в глобальном масштабе; LOF сравнивает локальную плотность точки с плотностью её соседей и находит локальные выбросы.
- Изолирующий лес даёт оценку с ; короткие пути означают аномалии, — средний случай. Подвыборки по 256 точек и ограничение высоты 8 делают его быстрым.
- Одноклассовый SVM отделяет данные от начала координат в пространстве признаков; ограничивает долю обучающих точек вне границы сверху, а долю опорных векторов — снизу.
- При редких аномалиях детекторы сравнивают по средней точности, а не по доле правильных ответов или одному ROC-AUC; точностью управляет базовая частота.
- Порог выбирают по загрязнённости, по целевой доле ложных тревог на чистых данных или по стоимости и пропускной способности проверки тревог.
Код#
Нормировка изолирующего леса, порог по хи-квадрат, семь оценок на загрязнённых данных, ν-свойство, базовая частота и порог по квантилю:
import numpy as np
from scipy import stats
from sklearn.covariance import EmpiricalCovariance, MinCovDet
from sklearn.mixture import GaussianMixture
from sklearn.neighbors import NearestNeighbors, LocalOutlierFactor
from sklearn.ensemble import IsolationForest
from sklearn.svm import OneClassSVM
from sklearn.metrics import roc_auc_score, average_precision_score
# нормировка изолирующего леса c(n) = 2 H(n - 1) - 2 (n - 1) / n, точно и с H(i) ~ ln i + 0.5772
H = lambda m: sum(1 / i for i in range(1, m + 1))
c = lambda n: 2 * H(n - 1) - 2 * (n - 1) / n
c_ln = lambda n: 2 * (np.log(n - 1) + np.euler_gamma) - 2 * (n - 1) / n
print([round(c(n), 4) for n in (3, 256)], [round(float(c_ln(n)), 4) for n in (3, 256)], round(2 * H(256) - 2, 4))
# [1.6667, 10.2487] [1.2074, 10.2448] 10.2487: c(n) = 2 H(n) - 2
# гауссовский порог: квадрат расстояния Махаланобиса против квантиля хи-квадрат, d = 2
print(round(stats.chi2(2).ppf(0.99), 2), round(np.sqrt(stats.chi2(2).ppf(0.99)), 2)) # 9.21 3.03
# загрязнённые данные: плотный и разреженный кластеры, 13 равномерных аномалий (2.5%); метки только для оценки качества
rng = np.random.default_rng(0)
X = np.vstack([rng.normal([0, 0], 0.3, (300, 2)), rng.normal([4, 3], 1.2, (200, 2)), rng.uniform([-4, -4], [9, 8], (13, 2))])
y = np.r_[np.zeros(500), np.ones(13)]
d10 = NearestNeighbors(n_neighbors=11).fit(X).kneighbors(X)[0][:, 10] # расстояние до 10-го соседа
scores = {
'gaussian': EmpiricalCovariance().fit(X).mahalanobis(X),
'robust gaussian': MinCovDet(random_state=0).fit(X).mahalanobis(X),
'gmm, K=2': -GaussianMixture(2, random_state=0).fit(X).score_samples(X),
'10-nn distance': d10,
'lof': -LocalOutlierFactor(n_neighbors=10).fit(X).negative_outlier_factor_,
'isolation forest': -IsolationForest(random_state=0).fit(X).score_samples(X),
'one-class svm': -OneClassSVM(nu=0.05, gamma=0.5).fit(X).decision_function(X),
}
for name, s in scores.items():
print(f'{name:17s} ROC-AUC {roc_auc_score(y, s):.3f} AP {average_precision_score(y, s):.3f}')
# gaussian ROC-AUC 0.886 AP 0.512
# robust gaussian ROC-AUC 0.738 AP 0.145
# gmm, K=2 ROC-AUC 0.911 AP 0.644
# 10-nn distance ROC-AUC 0.915 AP 0.693
# lof ROC-AUC 0.871 AP 0.515
# isolation forest ROC-AUC 0.915 AP 0.636
# one-class svm ROC-AUC 0.893 AP 0.516
# nu-свойство одноклассового SVM при жёстком допуске: доля вне границы <= nu <= доля опорных векторов
for nu in (0.05, 0.2):
oc = OneClassSVM(nu=nu, gamma=0.5, tol=1e-7).fit(X)
print(nu, round((oc.decision_function(X) < -1e-6).mean(), 3), round(len(oc.support_) / len(X), 3))
# 0.05 0.023 0.086 | 0.2 0.187 0.214
# редкие аномалии: точность детектора с полнотой 0.9 и долей ложных тревог 0.01 при базовой частоте 1%
print(round(0.9 * 0.01 / (0.9 * 0.01 + 0.01 * 0.99), 3)) # 0.476
# порог для целевой доли ложных тревог: квантиль уровня 99% оценок на чистых валидационных данных
normal = lambda m: np.vstack([rng.normal([0, 0], 0.3, (m // 2, 2)), rng.normal([4, 3], 1.2, (m // 2, 2))])
iso = IsolationForest(random_state=0).fit(normal(1000))
tau = np.quantile(-iso.score_samples(normal(10000)), 0.99)
print(round((-iso.score_samples(normal(20000)) > tau).mean(), 4)) # 0.0087: доля ложных тревог на свежих нормальных данных
score_samples изолирующего леса в scikit-learn возвращает , поэтому его значение со знаком минус — оценка из статьи.
Дальше#
Каждый детектор в этой заметке заканчивается оценкой для каждой точки, и на практике аналитик читает список точек сверху: важно, чтобы настоящие аномалии шли первыми, а не само значение оценки. Это задача ранжирования, решённая здесь без разметки. Следующая заметка решает её с учителем: поисковые системы, каталоги и поисковые модели учатся упорядочивать объекты по меткам релевантности, с метриками и функциями потерь, построенными для верха списка.
Литература#
- V. Chandola, A. Banerjee, V. Kumar. Anomaly detection: A survey. ACM Computing Surveys, 41(3), 1–58, 2009.
- P. J. Rousseeuw, K. Van Driessen. A Fast Algorithm for the Minimum Covariance Determinant Estimator. Technometrics, 41(3), 212–223, 1999.
- S. Ramaswamy, R. Rastogi, K. Shim. Efficient algorithms for mining outliers from large data sets. SIGMOD, 427–438, 2000.
- M. M. Breunig, H.-P. Kriegel, R. T. Ng, J. Sander. LOF: Identifying Density-Based Local Outliers. SIGMOD, 93–104, 2000.
- F. T. Liu, K. M. Ting, Z.-H. Zhou. Isolation Forest. ICDM, 413–422, 2008. Раздел 2 (длина пути, и оценка), раздел 3 (затопление и маскировка), раздел 4 (обучение и оценка, , , ограничение высоты).
- F. T. Liu, K. M. Ting, Z.-H. Zhou. Isolation-Based Anomaly Detection. ACM Transactions on Knowledge Discovery from Data, 6(1), 1–39, 2012.
- B. Schölkopf, J. C. Platt, J. Shawe-Taylor, A. J. Smola, R. C. Williamson. Estimating the Support of a High-Dimensional Distribution. Neural Computation, 13(7), 1443–1471, 2001.
- E. Nalisnick, A. Matsukawa, Y. W. Teh, D. Gorur, B. Lakshminarayanan. Do Deep Generative Models Know What They Don’t Know? ICLR, 2019.
- T. Saito, M. Rehmsmeier. The Precision-Recall Plot Is More Informative than the ROC Plot When Evaluating Binary Classifiers on Imbalanced Datasets. PLOS ONE, 10(3), e0118432, 2015.
- E. Sokolov et al. Машинное обучение (HSE), конспекты лекций, лекция 16: одноклассовые методы и поиск аномалий (2025).