* difficulties on detecting anomalies on streams
* Robust Random Cut or Isolation?
* how do they do it on AWS Kinesis
* combining small ideas from papers into our RRCF implementation
2. RRCF is an unsupervised algorithm
for detecting anomalous data points
within a stream of data.
3. Agenda
• Why do we need streaming outlier detection?
• Difficulties on detecting anomalies in data streams
• Chronology of RRCF
• Isolation Forest
• RRCF
• Implementation Details
9. Chronology recap
• 2008 – Isolation Forest published
• 2013 – Survey on outlier detection
• 2016 – RRCF published in JMLR
• 2016 – RRCF available on Amazon Kinesis
• 2018 – RCCF available on Hydroserving
11. Isolation Tree
• Contains all points
• Every leaf contains one distinct point
• Each node separates bounding box of it’s points in two halves
12. Isolation
Forest
1. Create bounding box around
given set of points in which
you would like to make a cut
2. Pick random dimension
3. Calculate random coordinate
in this dimension
4. Divide given set of points
according to calculated cut
5. Repeat 1-4 on this two sets
until every point is isolated
13. Isolation
Forest
1. Create bounding box around
given set of points in which
you would like to make a cut
2. Pick random dimension
3. Calculate random coordinate
in this dimension
4. Divide given set of points
according to calculated cut
5. Repeat 1-4 on this two sets
until every point is isolated
14. Isolation
Forest
1. Create bounding box around
given set of points in which
you would like to make a cut
2. Pick random dimension
3. Calculate random coordinate
in this dimension
4. Divide given set of points
according to calculated cut
5. Repeat 1-4 on this two sets
until every point is isolated
15. Isolation
Forest
1. Create bounding box around
given set of points in which
you would like to make a cut
2. Pick random dimension
3. Calculate random coordinate
in this dimension
4. Divide given set of points
according to calculated cut
5. Repeat 1-4 on this two sets
until every point is isolated
Y = 5.45
16. Isolation
Forest
1. Create bounding box around
given set of points in which
you would like to make a cut
2. Pick random dimension
3. Calculate random coordinate
in this dimension
4. Divide given set of points
according to calculated cut
5. Repeat 1-4 on this two sets
until every point is isolated
Y ≤ 5.45
17. Isolation
Forest
1. Create bounding box around
given set of points in which
you would like to make a cut
2. Pick random dimension
3. Calculate random coordinate
in this dimension
4. Divide given set of points
according to calculated cut
5. Repeat 1-4 on this two sets
until every point is isolated
Y ≤ 5.45
X=8.0
Y=8.
0
X ≤ 3.22 Y ≤ 7.61
v v v
18. Streaming
Algorithms
Issues
1. Data is transient
2. Timestamps are needed
3. Stream size is infinite
4. Arrival rate is important
5. Concept drift
6. Uncertainty
Survey on Outlier Detection in Data Stream ‘16. By Thakkar, Vala, Prajapati
24. CoDisplacement
cba
Point collusive
displacement is average
of maximal
displacement which can
be achieved by deleting
this point and it’s
neighbors divided by
number of points
deletedmax
𝑥∈𝐶
1
𝐶
𝐷𝑖𝑠𝑝(𝐶)
27. Issues after paper analysis
1. What is time decay reservoir and how it is implemented?
2. How to initialize forest?
3. How to implement scoring and insertion efficiently?
Почему возникла такая проблема?
Технологические сервисы и продукты, генерируют огромное количество данных, без анализа которых невозможно достичь успеха.
Умные сети электроснабжения, беспилотные автомобили, беспроводные сенсорные сети, логи, интернет вещей это лишь несколько примеров таких сервисов. Выявление аномалий в данных – один из аспектов такого анализа и бесспорно очень важная тема. Обычно именно алгоритмы для определения аномалий определяют поломки\сбои\нарушения протоколов безопасности. Невыявленные аномалии в любом из перечисленных продуктов могут иметь самые ужасные последствия для бизнеса.
Обычно эти сервисы генерируют настолько много данных, что их хранение не представляется возможным.
К примеру взять вот эту турбину марки Pratt & Whitney’s. Это двигатель нового поколения, он оснащен 5000 сенсорами и может генерировать до 10 гигабайт данных в секунду. Анализ этих данных возможен только поточными алгоритмами. Именно поэтому сегодня мы будем обсуждать поточные алгоритмы для выявления аномалий и, в частности, алгоритм который я имплементировал на своей стажировке в Provectus под названием RRCF
Почему мы сегодня будем обсуждать именно RRCF, а не любой другой алгоритм для поиска аномалий? Для того чтобы понять это, я расскажу его предысторию.
В 2013 году вышла статья, название которой вы можете увидеть на экране. Авторы статьи критикуют отсутствие качественного сравнения алгоритмов для поиска аномалий и представляют результаты своих экспериментов, где они сравнивают несколько популярных моделей: изолирующий лес, несколько вариаций SVM, LOF, EGMM
В 2016 году эту статью увидели ребята из AWS AI Algorithms team и решили модифицировать Изолирующий лес для использования на потоках данных, что у них успешно получилось и с тех пор этот алгоритм используется в AWS. К слову, основная часть алгоритмов для поиска аномалий в потоках появилась примерно в это же время (2016).
С тех пор алгоритм используется в AWS. Раньше он был доступен как микросервис подключаемый к кинезису, теперь он доступен еще и как модель в SageMakere. То что Амазон уже несколько лет использует этот алгоритм и добавляет его как функционал в новые продукты свидетельствует о качестве алгоритма и его нужности.
На самом тебе, мы разговариваем об RRCF потому что я имплементировал этот алгоритм для платформы Hydroserving, которая позволяет запускать и автоматически скэйлить ваши модели
Разобравшись с тем, почему мы говорим об RRCF, просуммируем все предыдущее. Бла – бла. Перед тем как мы перейдем к обсуждению непосредственно RRCF и его особенностям посмотрим сначала на изолирующий лес, для того чтобы понять на чем основывалась работа парней из амазона.
Изолирующий лес это алгоритм цель которого построить лес из изолирующих деревьев.
Бла-бла. Чтобы понять как этот алгоритм находит аномалии надо взглянуть на то как он строит свои деревья.
Это описание алгоритма для постройки одного дерева. Разберем каждый этап
Algorithm, how it works at high level
Algorithm, how it works at high level
Algorithm, how it works at high level
Algorithm, how it works at high level
Если вы уже успели заметить, то вероятность того, что аномальная точка будет изолирована раньше остальных гораздо выше чем у точек которые лежат рядом друг с другом. Поэтому коэффициент аномальности определен так:
Чтобы трансформировать любой алгоритм анализа аномалий для потокового использования обзорная статья по анализу аномалий в потоках предлагают нам задуматься о 6 проблемах:
В потоковых алгоритмах, точки мимолетны. Старые точки теряют свою важность, и их необходимо исключать
В алгоритм необходимо ввести такое понятие как время появления точки: явно или неявно
Необходимо учитывать то, что поток данных бесконечен
Необходимо учитывать скорость прихода данных будь то постоянная или переменная, а также то, что обработать следующую точку возможно, только если мы обработали предыдущую.
Concept drift - смена распределения со временем
Неточность данных заставляет нас задуматься действительно ли нам пришел аутлаер или это ошибка в получении данных
Наконец перейдем к RRCF. Если цель изолирующего леса была создать лес, то цель RRCF поддерживать лес актуальным. Этот лес является скетчем наших данных. Скетч, или набросок, отражает распределение наших данных используя лишь малую их часть. При получении новой точки алгоритм обновляет скетч
Для того чтобы деревья могли оставаться актуальными, их необходимо перестраивать. Для того чтобы перестраивать деревья, авторы изменяют процесс построения дерева – вместо построения дерева целиком за раз - добавляется операция добавления и удаления точки
Поддержка леса происходит вот так: Когда дерево хочет вставить новую точку, то, первым делом оно удаляет из себя одну из старых точек, к примеру вот эту. О том, какая точка будет удалена мы обсудим позже. Если точка удалена, то ее родитель ничего не изолирует, поэтому этот разрез становится не нужен и он тоже удаляется. Это и есть операция удаления точки. Потом дерево добавляет новую точку. Для этого оно пытается сделать изолирующий разрез. Если созданный разрез действительно изолирует эту точку, то создается новая нода в дереве. Если нет, то эта точка спускается на следующий уровень в дереве согласно разрезу и пытается сделать разрез там. Это продолжается до тех пор, пока новая точка не будет изолирована
В отличии от изолирующего леса, RRCF выбирает измерения для разреза не случайно – а пропорционально его длине. Когда одно измерение имеет гораздо большую дисперсию чем другое.
Перед тем как обновить скетч, алгоритм оценивает аномальность точки
Еще пару слов о деталях алгоритма. Для того чтобы наши деревья были различными друг от друга, а это необходимое условие для любого ансамбля моделей, каждое дерево само решает вставлять ему новую точку или нет. Это делается с помощью резервуарного сэмплирования. Резервуарное сэмплирование – это семейство алгоритмов которые позволяют получить случайную подвыборку фиксированного размера из потока данных. Именно резервуар, который есть у каждого дерева, решает вставлять ли ему новую точку и если да, то какую ему точку удалить.
Чтобы алгоритм работал для временных последовательностей, авторы предлагают использовать шинглы (или черепицу). Берется скользящее окно и вектора точек в нем конкатенируются в одно. Именно это позволяет алгоритму определять аномалии во временных потоках
Авторы статьи предлагают использовать резервуарное семплирование или тайм декей, но классическое резервуарное семплирование не подходит для бесконечных поток. Из статьи ясно лишь то, что time decay reservoir это вариация экспоненциального резервуара.
Авторы опускают в своей статье важную часть алгоритма: Проблему холодного старта. Алгоритм не может предсказывать аномальность точек, пока не заполнит все свои резервуары и соответственно не построит все деревья
Статья чисто математическая и не имеет намеков на имплементацию, однако авторы этой статьи давали речь в Стэнфорде, где говорили что основная часть алгоритма – это incremental insertion, который позволяет эффективно считать скоры и делать вставки. Как он реализован тоже не ясно.
Имплементация этого алгоритма похожа на вариацию k-d дерева. Деревья бинарны и двусвязны.
И листок и Нода хранят ограничивающий парраллелепипед, который ограничивает все точки потомки этой ноды. Это необходимо для того что не пересчитывать эту коробку каждый раз когда мы будем решать когда сделать разрез у этой ноды. Также каждая нода имеет количество потомков, это необходимо чтобы измерять кодисплэйсмент.
Как и в кд-дереве нода хранит измерение и координату разреза.
Чтобы эффективно измерять кодисплейсмент нужно иметь операцию которая позволит определить где точка окажется в дерев