클래스 불균형이 심한 Anomaly Detection에서는 다수 클래스(i.e. 정상)에 해당하는 데이터만 잘 예측하는 경향이 있다.
정확도(Accuracy)는 클래스 비율을 고려하지 않기 때문에, 소수 클래스를 잘 예측하지 못하더라도 다수 클래스만 잘 예측하면 높은 성능을 보이는 것처럼 나타날 수 있다.
반면, AUC (Area Under the Curve)를 이용하면 클래스 비율과 관계없이 모델의 두 클래스 간 분포를 평가할 수 있어(분포가 얼마나 잘 분리되는지 평가할 수 있어) 더 정확한 평가가 가능하다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-17-1024x268.png)
따라서 AUC는 Anomaly Detection의 평가 지표로 채택되고 있다.
Video Anomaly Detection에서 Anomaly Score가 다음과 같이 나왔다고 생각해보자.
0~3번째 프레임은 정상이고, 4~7번째 프레임은 비정상일 때, 모델은 정상은 0으로, 비정상은 1로 올바르게 판단하고 있다.
이 때 정상 클래스(0)와 비정상 클래스(1)의 Anomaly Score 분포를 그려보면 다음과 같다.
정상과 비정상 분포가 완전히 분리되어 있으며, 이 때 AUC는 1이 나온다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-4.png)
이번에는 정상에서 비정상 프레임으로 갈수록 Anomaly Score가 높아지는 상황을 생각해보자.
앞의 그래프보다는 이 그래프가 좀 더 현실적인 그래프일 것이다. 왜냐하면, 비정상 프레임의 시작 부분은 정상과 모호하여 사람도 판단하기 힘들기 때문이다.
따라서 이 그래프도 모델이 예측을 잘 했다고 평가를 하는 것이 옳다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-2.png)
마찬가지로 분포를 그려보면 아래와 같으며, 분포가 겹치지 않기 때문에 AUC는 1이 나온다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-3.png)
이번에는 모델이 이상 탐지를 잘하지 못한 그래프이다.
정상에 해당하는 1번 프레임과 비정상에 해당하는 4번 프레임이 같은 Score 값을 도출하는 것을 확인할 수 있다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-6.png)
분포는 다음과 같이 겹쳐지며 AUC는 0.75로 낮은 성능을 보인다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-7.png)
그렇다면 분포가 잘 분리되었는지 평가하기 위해서 AUC는 어떤 방식으로 계산될까?
바로, score의 threshold를 바꿔가며 TPR(Positive를 얼마나 잘 맞췄는지)와 FPR(Negative를 얼마나 틀렸는지)를 계산하는 것이다.
예를 들어, 아래의 그래프는 score로 0과 1 값을 가지므로, threshold는 [0과 1, 1+a]가 선정된다.
이 때, threshold가 1이면, score가 1 이상인 frame은 positive로 판단되고, 1미만인 frame은 negative로 판단되어 TPR과 FPR이 계산된다.
해당 그래프는 완벽하기 때문에, threshold에 따라 TPR과 FPR을 표시한 ROC-Curve의 아랫면적(AUC)은 1로 계산된다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-11.png)
그리고 아래와 같이 모델이 잘 예측을 하지 못했다면, TPR이나 FPR이 낮아져서 AUC는 낮아지게 된다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-10.png)
즉 AUC는 여러 threshold를 선정한 다음, 각각의 성능이 우수한지 평가하는 것이다. 만약 모든 threshold에 대해 성능이 좋다면 두 클래스는 잘 분리되었다는 의미이다.
그런데 threshold를 자세히 살펴보면 (최솟값, 최댓값, 최댓값+1)은 default로 선정되는데, 나머지 값들은 어떻게 선정되는 것일까?
만약 score의 랜덤 값이 선정된다면, 아래의 그래프에서 threshold가 0.6일 때 TPR이 3/4가 되고 AUC가 1이 나오지 않는다. 따라서 threshold도 적절하게 선정하는 것이 중요하다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-2.png)
그래서 현재 이용되는 방법은 Grid Search이며, AUC를 최대화하는 최적의 threholds를 찾게 된다.
예를 들어, 위 그래프는 threshold가 0.5(TPR:1, FPR:0)만 선정될 때 AUC가 1이 된다.
![](https://shacoding.com/wp-content/uploads/2024/06/image-16-1024x445.png)
지금까지 AUC를 사용하는 이유와 계산되는 방식에 대해 간단하게 알아보았다.
Anomaly Detection을 처음 공부하는 분들에게 도움이 되길 바란다.