이상탐지

2024. 2. 1. 16:39TIL

이상탐지와 Isolation Forest

 이상 탐지(Anomaly Detection)는 데이터에서 비정상적인 패턴, 이상치, 또는 예외적인 사례를 탐지하는 과정이다. 전통적인 이상 탐지 방법은 IQR(Interquartile Range): 1사분위수(Q1)와 3사분위수(Q3)간의 차이로 Q1-1.5IQR 미만 혹은 Q3+1.5IQR 초과 데이터를 이상치로 간주하는 방법이나 Z-Score: 데이터 포인트가 평균으로부터 표준 편차의 몇 배만큼 떨어져 있는지를 나타내는 수치로 이 수치가 3 이상인 데이터를 이상치로 간주하는 방법이 있다. 계산이 복잡하지 않고 해석이 직관적이지만 모든 데이터에 적용해 의미 있는 결과를 얻기에는 어렵고 데이터가 대칭이 아니거나 복잡한 분포를 갖고 있다면 오인식이 늘어났다.

 

 고차원, 대량의 데이터는 그 내부의 패턴을 갖고 있어 머신 러닝 모델로 데이터의 패턴을 익히고 그 패턴에서 벗어난 데이터를 이상치로 취급한다. 따라서 복잡한 데이터의 패턴에 적응적이며 지속적인 학습과 개선이 가능하다. 하지만 처리할 모델이 복잡할 수 있고 오히려 사람이 해석하기 어려움 패턴이 존재할 수 있으며 양질의 데이터가 다수 필요하다. 

 

 정상 데이터는 그와 비슷한 특성 패턴을 갖는 비슷한 데이터와 밀도 있게 모여있으나 이상치 데이터는 밀도가 낮은 공간에 존재할 것이다. 이때, 하나의 데이터를 고립하도록 어떤 특성과 그것의 분할 값을 기준으로 나눈다. 정상 데이터는 밀도가 높은 구역에 있으니 많은 분할 과정이 지나야 고립되며 이상치 데이터는 밀도가 낮은 지역에 있어서 낮은 수준의 분할 과정으로도 쉽게 고립시킬 수 있다. 아래의 과정을 통해 Isolation Forest 알고리즘이 작동 된다. 

  1. 데이터 준비 : 전체 데이터에서 무작위로 서브 데이터셋을 선택
    • 어떤 데이터는 여러 서브 데이터셋에 속할 수 있음
  2. 트리 생성 : 하나의 서브 데이터셋 마다 개별 Isolation Tree(고립 트리)를 준비
  3. 고립 시작 : 각 트리에 소속된 데이터셋을 하나씩 고립
    • 임의의 특성과 임의의 특성 분할 값을 선택
    • 데이터셋이 리프 노드에 도달할 때까지 반복
    • 각 데이터 포인트는 리프 노드까지 도달한 깊이를 저장하고 있음
  4. 고립 완료 : 하나의 트리에 소속된 모든 데이터셋을 전부 고립
  5. 트리들 계산 완료 : 모든 트리에서 고립 과정 완료
    • 여러 트리에 소속된 어떤 데이터 포인트는 서로 다른 트리에서 계산된 깊이가 저장됨
  6. 이상치 점수 계산 : 평균 깊이를 바탕으로 각 데이터 포인트의 이상치 점수를 계산
  7. 이상치 추출 : 이상치 점수와 특정 임계값을 비교해 이상치 추출
  • n_estimatores
    • Isolation Forest를 구성하는 고립 트리의 수
    • 서브 데이터셋의 수와 같음
    • 더 많은 트리를 사용할수록 이상치 탐지의 안정성과 정확성이 향상
    • 하지만, 트리 수가 많을수록 계산 시간과 메모리 사용량도 증가
  • max_samples
    • 서브 데이터셋에 포함될 최대 데이터 포인트의 수
    • 너무 적은 샘플은 모델의 성능을 저하시킬 수 있음
    • 너무 많은 샘플은 계산 비용을 증가시킴
  • contamination
    • 전체 데이터셋에서 이상치 데이터가 차지할 비율
    • 이 비율을 바탕으로 정상 데이터와 이상치 데이터 사이의 이상치 점수 임계값을 설정할 수 있음
    • 단, 이는 데이터 내의 이상치가 어느 정도 있음을 알고 있는 상황에서 유용함
    • 만약 이상치의 정확한 비율을 모르거나 데이터가 복잡하다면 ʻautoʼ를 사용: 데이터 분포 특성에 따라 합리적 비율을 자동 추출

 이상치 데이터 정답을 알고 있다면 이상 데이터를 양성으로 놓고 분류 형태의 문제로 평가 가능하다. 분류 문제에서 흔히 사용하는 수치들인 정확도(Accuracy), 정밀도(Precision), 재현율(Recall), F1 값을 사용한다. 만약 정답이 없다면 시각화를 통한 전문가 검토를 진행한다.

 

이상탐지 실습

 Credit Card Fraud Detection 데이터셋(https://www.kaggle.com/datasets/mlg-ulb/creditcardfraud)으로 실습을 진행할 것이고 데이터 크기가 너무 커서 랜덤 샘플링한 데이터를 사용하였다. 샘플 데이터는 전체 19,936건, 사기 34건(0.171%) 데이터를 포함한다. 변수는 Time : 첫 거래 후 각 거래 사이 경과 시간(초). Amount : 거래 금액, V1~V28 : PCA로 얻은 수치형 입력 변수, Class : 정상 거래(0)와 비정상 거래(1)가 있다. 풀어야 하는 문제는 주어진 거래 관련 데이터를 바탕으로 이상 거래 데이터를 탐지하는 것이다. 머신 러닝 모델의 입력은 Time, Amount, V1~V28이고 출력은 각 데이터 포인트마다 할당된 이상치 점수이다. 

 

 Class는 범주형 데이터로 매우 심한 치우침이 있고 이상치를 탐지해야 한다. Time은 거래 시작 이후의 경과 시간을 나타내므로 기준 시간 정보가 있다면 주기성을 갖고 있을 수 있다. 큰 outlier가 없어 보이므로 Min-Max Scaling을 사용하였다. Amount는 치우침이 있지만 신용 카드 거래 금액으로 의미가 없는 데이터는 아니다. 이를 처리하기 위해 Log 스케일링을 하였더니 데이터 분포가 정규 모형으로 변형되었다. Log(0)의 값을 피하기 위해 +1 값을 추가하였다. V1 ~ V28는 수치형 데이터로 차원 축소의 결과물 데이터로 의미를 알기 쉽지 않아 수치적으로 어떠한 특성과 분포를 갖고 있는지 확인해야 한다. 전반적으로 정규 분포를 보이며 평균이 0에 근접한다. 추가적인 스케일링도 필요하지 않고 큰 이상치도 보이지 않는다. 상관관계를 보았을 때에도 제외 변수는 보이지 않는다. 

 

 입력 매개 변수인 contamination의 값은 원본 데이터에서의 이상치 비율을 알고 있으므로 해당 값을 사용하였다. 이상치 데이터의 레이블이 되어있으므로 양성 데이터를 예측하는 방식으로 평가를 진행하였다. 이상치 데이터는 전체 데이터에서 극 소수이므로 정밀도, 재현율, F1 값이 그렇게 좋지는 않다. 

'TIL' 카테고리의 다른 글

성능 평가  (0) 2024.02.02
딥러닝  (0) 2024.02.02
K-means Clustering  (0) 2024.02.01
비지도학습 알아보기  (1) 2024.01.31
SVD와 Decision Tree  (0) 2024.01.31