Isolation Forest

빠키·2020년 8월 2일
2

Anomaly Detection

목록 보기
2/3
post-thumbnail
post-custom-banner

Introduction

이번 포스팅에서는 Anomaly Detection의 첫 방법론 소개로 Model-based Methods의 Isolation Forest에 대해 살펴보도록 하겠습니다.

Isolation Forest란?

1. 개념 및 가정

Isolation Forest는 Unsupervised Anomaly Detection 중 하나로 현재 갖고 있는 데이터 중 이상치를 탐지할 때 주로 사용됩니다. 이름에서 볼 수 있듯이 tree 기반으로 구현되는데, 랜덤으로 데이터를 split하여 모든 관측치를 고립시키며 구현됩니다.

특히, 변수가 많은 데이터에서도 효율적으로 작동할 수 있는 장점이 있습니다.

The term isolation means ‘separating an instance from the rest of the instances’.

- Isolation Forest original paper

Isolation Forest의 컨셉은 "각 관측치를 고립(=분리)시키기는 것은 이상치가 정상 데이터보다 쉽다."입니다.

위의 예제는 다음과 같이 해석됩니다.
(1) 정상 데이터를 분리하는 경우, 약 7번의 split 필요
(2) 이상치를 분리하는 경우, 약 3번의 split 필요

2. 학습 방법

  • 정상 데이터는 tree의 terminal node와 근접하며, 경로길이가 큼
  • 이상치는 tree의 root node와 근접하며, 경로길이가 작음

랜덤포레스트가 의사결정나무를 여러번 반복하여 앙상블 하듯이, Isolation Forest는 iTree를 여러번 반복하여 앙상블 합니다.

iTree

  1. Sub-sampling : 비복원 추출로 데이터 중 일부를 샘플링
  2. 변수 선택 : 데이터 XX의 변수 중 qq를 랜덤 선택
  3. split point 설정 : 변수 qq의 범위(max~min) 중 uniform하게 split point를 선택
  4. 1~3번 과정을 모든 관측치가 split 되거나, 임의의 split 횟수까지 반복(=재귀 나무)하며, 경로길이를 모두 저장

Isolation Forest
5. 1~4번 과정(iTree)을 여러번 반복

3. Scoring

s(x,n)=2E(h(x))c(n)\Large\begin{aligned} s(x, n) = 2^{-\frac{E(h(x))}{c(n)}} \end{aligned}
  • h(x)h(x) : 해당 관측치의 경로길이
  • E(h(x))E(h(x)) : 모든 iTree에서 해당 관측치에 대한 평균 경로길이
  • c(n)c(n) : h(x)h(x)를 nomalise하기 위한 값으로, iTreeiTree의 평균 경로 길이. (iTreeBinary Search Tree와 동일한 구조이기 때문에, c(n)c(n)값을 쉽게 구한다고 함.)

E(h(x))E(h(x))에 따른 Score 값을 보면, 아래와 같습니다.

  1. 관측치 x가 전체 경로길이의 평균과 유사(= 정상 데이터) : E(h(x))c(n)E(h(x)) → c(n) , s0.5s → 0.5
  2. 관측치 x가 이상치 : E(h(x))0E(h(x)) → 0, s1s → 1
  3. 관측치 x의 최대 경로길이 : E(h(x))n1E(h(x)) → n-1, s0s → 0

즉, Score는 0 ~ 1 사이에 분포되며, 1에 가까울 수록 이상치일 가능성이 크고 0.5 이하이면 정상데이터로 판단할 수 있습니다.

Summing up

  • Unsupervised Anomaly Detection : Isolation Forest는 데이터에서 이상치를 탐지하기 위한 방법론입니다.
  • Random Forest와 비슷하게 작동하며, 여러개의 iTree로 구성됩니다.
  • 고차원 데이터에서도 작동할 수 있는 강점이 있습니다.

Reference

profile
하고 싶은 것이 많기에, 앞으로 할 수 있는 일들이 더 많은 Data Scientist
post-custom-banner

0개의 댓글