Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2014-07-10

Anomaly Detection, Recommender Systems


А потом начались нейросети — Neural Networks.
Потом нас учили правильно применять изученные алгоритмы (Advice for Applying Machine Learning).
А потом нам рассказали про Support Vector Machines (SVMs) и Kernels.
А потом была неделя посвященная темам Clustering (K-Means) и Dimensionality Reduction (PCA).
А после были рассмотрены алгоритмы систем Anomaly Detection и, отдельно, Recommender Systems.

Сегодня посмотрим на Детектор Аномалий.

Детектор аномалий — Anomaly Detection, это довольно просто. К примеру, испытывая авиадвигатели и снимая с датчиков разные показатели (температура, вибрация, …) мы получаем массив данных. Задача детектора аномалий заключается в том, чтобы, обучившись на данных испытаний заведомо исправных двигателей, переваривать результаты испытаний новых двигателей и определять — данные в норме или найдена аномалия, суть — возможный дефект.

Или, к примеру, детектор аномалий может питаться данными о активности клиентов банка. После стадии обучения на массиве сведений о заведомо законопослушных и лояльных клиентов, детектор будет нам показывать клиентов, выходящих за пределы нормы — возможных мошенников.

Еще пример: мониторинг нагрузки на компьютеры датацентра, состояние компьютеров. Температура, ввод/вывод, нагрузка на процессор, сетевой трафик, … Обучаем детектор и оставляем его следить за порядком в датацентре. если что — он пришлет СМС-ку.

Модель, применяемая в детекторе аномалий, довольно простая. Вычисляется вероятность наличия аномалии путем оценки плотности. Эту мудрость лучше всего постигать глядя на картинку.

На графике точки замеров распределяются по некоторой области. В центре области плотность точек наивысшая, ближе к краям плотность снижается. Чем ближе к краю области точка интересующего нас события, тем больше вероятность аномалии.
Установив пороговое значение эпсилон, мы отсекаем аномалии от нормальных значений.

Многие уже догадались, что в основе вычислений здесь находится Нормальное aka Гауссово распределение со средним значением мю и распределением сигма^2.
Соответственно, мю и сигма это параметры модели. Их надо вычислять для каждой фичи тренировочного датасета.

И весь алгоритм детектора аномалий тогда выглядит так: выбрать фичи наиболее явно отражающие аномалии; для каждой фичи обработать записи и найти параметры распределения — мю и сигма; вычислить произведение (продукт) вероятностей по каждой фиче интересующей записи. Если результат меньше порога эпсилон — мы имеем аномалию.

Как уже было неоднократно замечено, для оценки успешности алгоритма нам нужны числовые метрики.
Чтобы получить такие метрики, мы разделим тренировочные данные на три датасета — трен.набор, набор кросс-валидации и тестовый набор.
В трен.наборе будут только нормальные записи, в наборах кросс-валидации и тестовом будут и нормальные и аномальные записи.
Используя разные фичи, разные пороговые значения эпсилон мы тестируем разные модели используя технику кросс-валидации и применяя метрики типа F1-score.

Возникает вопрос, если мы используем labeled данные для обучения машины, почему бы нам не использовать техники Supervised Learning? Ответ: детектор аномалий применяется там, где в наборах данных слишком мало записей о ненормальностях. При этом ненормальности бывают разных типов. Короче — недостаточно данных для четкого различения нормы от аномалии. Skewed classes.

Про правильный выбор фич для скармливания детектору аномалий.
Очевидно, значения выбранных фич должны укладываться в нормальное распределение, раз уж в основе модели лежит Гауссово распределение.

Другой случай — значения фич могут коррелировать между собой. Например загрузка процессора и сетевой трафик. Тогда аномалия может детектироваться, если привнести в модель синтетическую фичу = CPU load / Network traffic.

Multivariate Gaussian Distribution.
В рассмотренном выше решении есть одна проблема. Распределения фич получаются сфероидными, грубо говоря. Вот иллюстрация проблемы

Чтобы сузить области нормального распределения придумали Multivariate Gaussian Distribution.

В этой модели используется вектор мю и матрица Сигма. С их помощью можно отражать корреляцию между фичами:

Учитывая такую математическую модель, алгоритм детектора аномалий получается такой

В принципе, оригинальная модель это просто частный случай мультивариативной модели

Значит ли это, что нужно всегда использовать мультивариативную модель? Нет. Если надо экономить вычислительльные ресурсы, или если количество фич больше чем количество записей трен.сета — необходимо использовать оригинальную модель детектора.


Вот и вся история про Anomaly Detection. По известным «правильным» записям данных мы вычисляем параметры гауссовых распределений. Потом смотрим, в какое место гауссового «колокола» попадают новые данные. Если выходят за пределы пороговых значений — имеем аномалию. Великое искусство заключается в том, чтобы выбрать и собрать нужные показания — фичи. Они должны быть способны отражать наличие аномалий. 

P.S.
А на практических занятиях мы писали программу, определяющую аномалии в состоянии серверов в датацентре.
Звучит, конечно, круто, но на практике все несколько проще, чем кажется. Всего-то реализовали модель и прогнали через нее заранее заготовленные данные


original post http://vasnake.blogspot.com/2014/07/anomaly-detection-recommender-systems.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)