Библиотека PyOD: сравниваем алгоритмы поиска выбросов

Предлагаем рассмотреть несколько алгоритмов поиска выбросов, проведём первичное сравнение на различных датасетах и определим несколько наиболее оптимальных из них.

Выбросы (или аномалии) в статистике — результаты измерения, выделяющиеся из общей выборки. Обнаружение выбросов важно во многих областях и процессах. В электронике поиск выбросов может помочь при обнаружении неисправных устройств. В банковских операциях поиск выбросов может помочь при обнаружении нетипичных для клиента операций. Давайте рассмотрим, как можно решить задачу поиска выбросов с помощью языка Python и библиотеки PyOD.

Библиотека PyOD включает в себя более 40 алгоритмов обнаружения выбросов, от классических LOF, PCA и kNN до новейших ROD, SUOD и ECOD.

Более подробно ознакомиться со всеми алгоритмами и наборами данных можно по ссылке https://github.com/newtechaudit/pyod.

Давайте сравним скорость и точность нескольких реализованных в этой библиотеке алгоритмов. Возьмём на тестирование 10 алгоритмов из различных категорий.

Для начала необходимо импортировать библиотеки:

import pyod
import scipy

Сравнение проведем на следующих наборах данных:

datasets = [
            'cardio.mat',
            'glass.mat',
            'letter.mat',
            'lympho.mat',
            'pendigits.mat',
            'pima.mat',
            'vertebral.mat',
            'vowels.mat',
]

Файлы .mat представляют собой сохраненную рабочую область MATLAB. Их можно открыть с помощью библиотеки scipy. Чтобы обойти все датасеты, определим цикл, в котором будем загружать каждый с помощью команды.

for dataset in datasets:
    mat = loadmat(os.path.join('/data', dataset))

Далее для каждого набора данных разделим выборку на тренировочную и тестовую в отношении 70/30, а также проведём Z-нормализацию матрицы признаков.

X = mat['X']
y = mat['y'].ravel()

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=random_state)

X_train_norm, X_test_norm = standardizer(X_train, X_test)

Для удобства определим словарь с алгоритмами, которые будем тестировать. Все алгоритмы, реализованные в библиотеке PyOD, можно разделить на несколько групп:

  • вероятностные (в тестировании используем алгоритмы ABOD, SOS)
  • линейные модели (PCA, OCSVM)
  • основанные на близости (LOF, CBLOF, KNN, ROD)
  • ансамбли (IForest, LODA)
  • нейронные сети

У всех алгоритмов, реализованных в библиотеке PyOD, есть параметр contamination. Он задает процентное количество выбросов в датасете. В нашем тестировании не будем задавать этот параметр (по умолчанию contamination=0.1) и сравним все алгоритмы “из коробки”. Для алгоритма ROD установим параметр parallel_execution=True для выполнения вычислений параллельно.

algos ={
        'Principal Component Analysis (PCA)': PCA(),
        'One-Class Support Vector Machines (OCSVM)': OCSVM(),
        'Local Outlier Factor (LOF)': LOF(),
        'Clustering-Based Local Outlier Factor': CBLOF(),
        'k Nearest Neighbors': KNN(),
        'Rotation-based Outlier Detection': ROD(parallel_execution=True),
        'Angle-Based Outlier Detection': ABOD(),
        'Stochastic Outlier Selection': SOS(),
        'Isolation Forest': IForest(),
        'Lightweight On-line Detector of Anomalies': LODA(),
    }

Проведем обучение и измерим время начала и окочания обучения каждого алгоритма. Также предскажем значения для тестовых нормализованных данных.

Библиотека PyOD: сравниваем алгоритмы поиска выбросов

Мы видим, что все алгоритмы выполняются за почти одинаковое время, за исключением алгоритма ROD, время обучения которого даже при применении параллельных вычислений (по умолчанию 2 потока) составляет от 4 секунд до почти 3 минут.

Самым быстрым является алгоритм PCA, время обучения которого составляет от 0,002 до 0,01 секунд.

По результатам точности и использования roc_auc_score получаются следующие результаты:

Библиотека PyOD: сравниваем алгоритмы поиска выбросов

Все алгоритмы показывают примерно одинаковый уровень точности. SOS, который относится к вероятностным алгоритмам, в среднем показывает более низкий уровень точности, однако хорошо справляется с некоторыми наборами данных.

Оценка результатов.

Совокупно по точности и скорости выполнения можно выделить следующих лидеров среди алгоритмов из различных категорий: PCA (линейный), kNN (основанный на близости), IForest (ансамбль). С их применения можно начинать решать задачу поиска выбросов.

https://t.me/machinelearning_interview

источник

+1
0
+1
1
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *