K-nearest neighbor-based anomaly detection
- 이상치 데이터는 거리상으로 멀리 떨어져있을 것이라는 가정
- 이때엔 거리만으로 이상치 여부를 판단하고, normal class에 대해서 어떠한 사전분포도 가정하지 않는다.
k-nearest neighbor
- parzen window density estimation 에서
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2F9d4e5bce-dbfa-41d5-9b9d-20e027108598%2F%E1%84%89%E1%85%B3%E1%84%8F%E1%85%B3%E1%84%85%E1%85%B5%E1%86%AB%E1%84%89%E1%85%A3%E1%86%BA%202022-01-23%20%E1%84%8B%E1%85%A9%E1%84%92%E1%85%AE%207.43.51.png)
p(x)=k/(N*V) (k=영역에 존재하는 데이터의 수 , N=객체의 수, V=영역 R의 volumn) 에서 V를 고정시킨게 parzen window density estimation 이라면 k-nearest neighbor는 k를 고정시킨 것 (k를 커버하는 V를 추정하는 것)
- k번째까지의 거리를 어떻게 측정할 것인가에 따라서 변종들이 있음
- max distance, average(개별적 거리를 먼저 계산 후 average), 평균까지의 거리(무게중심하나 놓고, 무게중심까지의 거리를 측정)
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2Fca602f15-fe01-4142-99e6-3d62a9ef1e55%2Fimage.png)
- 아래 그림에서처럼 측정 방법에 따라서 이상치 스코어가 달라진다.
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2F43f96434-ddce-421a-9fa5-ed44486035ef%2Fimage.png)
knn 기반 anonaly detection 에서의 반례
- knn 기반의 기법들이 찾아내지 못하는 반례들이 존재한다.
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2F8bbaf293-0015-47b5-a33f-000ffe5db663%2Fimage.png)
- 위 그림에서처럼 B에서의 세모는 polygon 내부에 있기때문에, 다른 어떤 점들 보다도 이상치 스코어가 더 낮아야한다. 또한 A, B에서 동그라미는 polygon 바깥에 있으므로 더 높은 이상치 스코어를 나타내야한다.
-> 그런데 그렇지 않음!
반례 보완
- A hybrid novelty score and its use in keystroke dynamics-based user authentication (PilsungKang, SungzoonCho, 2009)
- 보정 하는 factor 만듦
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2F47e1d0c5-2844-4f43-865c-5462b82b3121%2Fimage.png)
- 현재 알아보고자 하는 객체가 이웃들로 만들어지는 convex 안에 위치하는지 확인하는 것
- 객체(x)와 이웃(z(x))가 있을때, 이웃들을 x와 가장 유사하게 변형시키는 w를 찾아낸다.
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2Faa2a5aef-cc70-46b2-be88-8779b16e4342%2Fimage.png)
- polygon 밖에 있다면(convex hull distance가 0이 아니라면) 분모가 커지면서 average distance 에 대한 penelty 부분이 증폭되게 된다.
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2F6f76a9ab-3e04-4eb2-9989-47b9b4ff68bb%2Fimage.png)
위의 그림상에서 보자면 원이 세모보다 더 큰 이상치 스코어를 갖게 되었다.
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2F35dfc6d1-8968-4b4e-ab5f-3f57500131d8%2Fimage.png)
제안하는 score 를 이용했을때에(f) 밀도가 낮은 영역에 구멍이 뚫리는 현상도 사라지고, 밀도가 높은 영역 중간영역 또한 잘 구분해 내는걸 알 수 있었다.
총 21개의 데이터에 대해서 14개 알고리즘을 30회 반복 실험을 했을때(21*14*30)에 더 좋은 결과를 보여주었다.
Clustering-based approach
- DBSCAN 같은 알고리즘은 군집에 속하지 않은 객체들은 전부 이상치로 취급한다
- 이 외에 일반적인 clustering algorithm을 이용해서도 이상치 판단이 가능함.
-가장 가까운 군집과의 거리가 멀 경우 이상치로 판단하는 것이 그 방법이다.
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2Ff9ce3d4e-f0f0-4f39-9792-7bb84da7c8e7%2Fimage.png)
- k means clustering을 진행한 후, 이상치를 판단하는데, 그 판단에는 아래의 두 방식이 존재한다.
- absolute distance to the nearest centroid
- 가장 가까운 centroid 까지의 거리를 구한다
- relative distance to the neariest centeroid
- 군집의 지름을 계산해서, 군집 지름대비 얼마나 더 멀리떨어져있는지로 계산
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2F8d07209c-5bb6-4c54-92d5-7f32d3597e20%2Fimage.png)
- kmeans based anomaly score 를 sklearn 에서 제공하고 있는데 그걸 이용하면 아래와 같이 나타난다.
![](https://velog.velcdn.com/images%2Fstella_y%2Fpost%2F8571b738-6a65-40d3-9d5f-66dee838a27d%2Fimage.png)