Фото від Simon Wilkes на Unsplash
У швидко зростаючій галузі машинного навчання виявлення аномалій — точок даних, що значно відрізняються від більшості — стало критично важливим завданням. Від виявлення шахрайських транзакцій до ідентифікації аномалій у промислових датчиках, виявлення аномалій застосовується в багатьох сферах. Серед безлічі алгоритмів для цієї мети Isolation Forest (iForest) виділяється як простий, але потужний метод без нагляду.
Представлений як новий підхід до виявлення аномалій, алгоритм Isolation Forest використовує принципи випадковості та ізоляції для ефективного виявлення аномалій у багатовимірних даних. На відміну від традиційних методів кластеризації або методів на основі відстані, які часто залежать від обчислювально дорогих метрик, Isolation Forest ізолює аномалії шляхом рекурсивного поділу даних за допомогою випадково вибраних ознак і значень поділу. Основна ідея інтуїтивно зрозуміла: аномалії є «рідкісними і відмінними», тобто для їх ізоляції потрібно менше поділів порівняно з нормальними спостереженнями.
Математично алгоритм будує колекцію дерев ізоляції (бінарні дерева), де довжина шляху від кореня до певної точки даних кількісно визначає, наскільки ця точка ізольована. Коротші довжини шляху вказують на більшу ймовірність того, що точка є аномалією. Це робить Isolation Forest високопродуктивним і обчислювально ефективним, особливо для великих наборів даних. Оцінка аномалії для кожної точки даних обчислюється як:
Де:
- ( {E}[h(x)] ): середня довжина шляху ( x ) через всі дерева.
- ( c(n) ): середня довжина шляху успішного бінарного дерева розміру ( n ), наближена як:
- ( H(i) ): гармонійне число, визначене як:
Коротші довжини шляху h(x) відповідають вищим оцінкам аномалії s(x), що полегшує відокремлення викидів від нормальних даних.
Однією з визначних рис Isolation Forest є його метод без нагляду, що означає, що він не потребує мічених даних. Натомість алгоритм покладається на параметр, який називається рівень забруднення — пропорція аномалій, яку очікується в наборі даних. Цей параметр можна тонко налаштувати, використовуючи класичні статистичні методи, такі як визначення аномалій на основі z-оцінок або міжквартильного діапазону (IQR):
Аномалія, якщо x < Q1 − 1.5 × IQR або x > Q3 + 1.5 × IQR
Flask-базоване веб-застосування для виявлення аномалій
Цей проект є веб-застосуванням для виявлення аномалій з використанням Flask, легковажного веб-фреймворку для Python. Застосунок дозволяє користувачам завантажувати CSV-файли, вибирати стовпці для аналізу та виконувати виявлення аномалій за допомогою алгоритму Isolation Forest з бібліотеки scikit-learn.
Ось короткий огляд основних компонентів:
- Налаштування Flask
Застосунок побудовано з використанням Flask, з увімкненим CORS для міждоменних запитів.
2. Маршрути
/
: Відображає HTML-шаблон (index.html
) з порожнім результатом виявлення аномалій./get_columns
: Обробляє POST-запити для завантаження CSV-файла і повертає назви стовпців після перевірки файлу./upload
: Обробляє завантаження файлів, перевіряє стовпці та типи даних і застосовує алгоритм Isolation Forest для виявлення аномалій./plot
: Генерує інтерактивний графік гістограми, що інтегрує розподіл аномалій для вибраної змінної.
3. Виявлення аномалій
Алгоритм Isolation Forest визначає аномалії в обраних стовпцях завантаженого набору даних. Результати включають:
- Мітки аномалій для кожної точки даних.
- Підсумки даних.
- Відсоток виявлених аномалій.
4.
Обробка помилок
Забезпечена надійна обробка помилок для невірних форматів файлів, відсутніх файлів та інших виключень.
- Інформація для налагодження
Застосунок надає журнали для налагодження, включаючи вибрані дані та передбачення аномалій, для забезпечення прозорості.
Особливості застосунку
- Завантаження файлів: Підтримка CSV-файлів для введення даних.
- Динамічний вибір стовпців: Дозволяє користувачам вибирати конкретні стовпці для аналізу.
- Налаштовувані параметри: Користувачі можуть налаштовувати рівень забруднення для виявлення аномалій.
- Візуалізація: Результати можуть бути візуалізовані для полегшення інтерпретації.
Параметр забруднення можна налаштувати відповідно до ваших вимог.
Фронтенд: Чому Alpine.js?
Для фронтенду використано Alpine.js, щоб підвищити інтерактивність без значного навантаження. Порівняно з такими фреймворками, як Vue.js або React, Alpine.js є легким, не вимагаючи інструментів для побудови або складних налаштувань. Ось чому Alpine.js є ідеальним для цього проєкту:
- Мінімальний розмір: При розмірі ~200кБ в стиснутому вигляді, Alpine.js зберігає застосунок легким і швидким.
- Легкість інтеграції: Його можна додати за допомогою простого коду `
Обробка результатів
Застосунок надає детальний огляд результатів виявлення аномалій, проведеного за допомогою алгоритму Isolation Forest (iForest).
Огляд статистики
Розділ статистики надає детальні зведені метрики для різних стовпців у наборі даних, таких як:
- Метрики центральної тенденції: середнє значення та стандартне відхилення.
- Метрики розподілу: мінімум, максимум, квартилі (25%, 75%).
Ці статистики надають загальний огляд характеристик даних, дозволяючи користувачам зрозуміти їхній розподіл та варіативність.
Результати виявлення аномалій
- Процент аномалій: 5,19% даних були класифіковані як аномалії. Це означає, що близько 11 з 212 даних значно відхиляються від нормальної поведінки в наборі даних.
- Мітки аномалій:
1
означає нормальну точку даних.
-1
позначає аномалію.
Список аномалій показує послідовність точок даних, класифікованих як нормальні або аномальні. Застосунок використовує попередньо вибраний алгоритм для виявлення аномалій (наприклад, Isolation Forest), який визначає викиди на основі властивих патернів даних.
Приклад результатів застосунку (процент аномалій та список аномалій).
Інтерактивний графік
Після завантаження CSV файлу (знайдіть CSV файл, використаний у Github репозиторії), користувачі можуть вибрати конкретну змінну з випадаючого меню для виявлення аномалій.
Графік аномалій підкреслює:
- Нормальні точки даних в одному кольорі.
- Аномальні точки даних в контрастному кольорі (червоний).
Гістограма змінної stdev з аномаліями, що інтегруються червоним кольором, і нормальними точками в синьому.
Ця візуалізація дозволяє користувачам побачити, як вибрана змінна корелює з виявленими аномаліями, що полегшує виявлення патернів або тенденцій, які можуть пояснити, чому певні точки були позначені як аномальні.
Гістограма змінної stdev візуально представляє розподіл значень стандартного відхилення в наборі даних.
- Сині стовпці представляють нормальні точки даних, які алгоритм Isolation Forest визначив як ненормальні. Ці точки знаходяться в очікуваному діапазоні значень стандартного відхилення на основі структури набору даних.
- Червоні стовпці вказують на аномалії або точки даних, що значно відхиляються від нормального розподілу. Ці точки визначаються як викиди на основі їх незвичних значень стандартного відхилення.
Тлумачення:
- Якщо сині стовпці переважають, це свідчить про те, що більшість точок даних знаходяться в нормальному діапазоні, що вказує на набір даних із послідовним патерном або низькою варіативністю.
- Червоні стовпці підкреслюють регіони, де виникають аномалії. Якщо ці червоні стовпці зосереджені на крайнощах (наприклад, дуже високі або дуже низькі значення stdev), це вказує на те, що аномалії пов'язані з незвично великими або малими значеннями стандартного відхилення.
Ця візуалізація допомагає зрозуміти, як аномалії співвідносяться з розподілом змінної та визначити потенційні пороги, де дані переходять від нормальної до аномальної поведінки.
Наступні кроки: Покращення застосунку
Щоб ще більше покращити застосунок, настійно рекомендується реалізувати функціональність маршруту /plot
безпосередньо на фронтенді. Замість того, щоб покладатися на сервер для відображення графіків, отримувати оброблені дані з серверу та маніпулювати ними за допомогою JavaScript бібліотек, таких як D3.js або Plotly.js. Такий підхід покращить продуктивність, зменшить навантаження на сервер і надасть більш інтерактивний та динамічний досвід користувачів.
Дякуємо за увагу!
Якщо вам сподобалася ця стаття або ви знайшли її корисною, не соромтеся підписатися на мене тут на Medium для отримання більше корисної інформації, навчальних посібників та історій. Ваша підтримка дуже важлива для мене! 🌟
Клікніть тут, щоб підписатися на мене і слідкуйте за моїм останнім контентом. Давайте разом продовжувати навчання та розвиток!
Перекладено з: Building a Lightweight Web Application for Anomaly Detection with Isolation Forest