본문 바로가기
개발/Python

IsolationForest Hyper Parameters and Attributes

by 피로물든딸기 2025. 11. 22.
반응형

전체 링크

Isolation Forest 

- 랜덤 분할로 데이터를 고립시키며고립되는 데 걸리는 깊이로 이상치를 판단하는 앙상블 기반 알고리즘

- 이상치가 다른 데이터보다 쉽게 분리될 수 있다는 아이디어

- 단일 Tree의 결과가 불안정(편향 / 분산)하여 Bagging을 응용하여 이상치 여부를 나타내는 점수의 신뢰성을 높임.

- 특이치 탐지보다 이상치 탐지에 적합

 

원리

- 이상치는 정상 데이터보다 쉽게 고립된다. → 고립되는 데 필요한 분기 수(트리 깊이)가 작다.

- 즉, 데이터 공간을 무작위로 분할하면서 특정 데이터 포인트가 얼마나 빨리 고립되는지 측정

 

1. 무작위 분할 기반 Tree(Isolation Tree, iTree) 생성

- 데이터의 특정 Feature 하나를 랜덤 선택

- 해당 Feature에서 임의의 값으로 분할

- 계속 분할하면서 Leaf Node에 한 개의 데이터만 남을 때까지 진행

- 이 과정에서 이상치는 다른 점들과 멀리 떨어져 있으므로 몇 번 나누지 않아도 혼자 분리됨
   → 얕은 깊이에서 고립 = 이상치

- 정상치는 많은 점들과 섞여 있어 여러 번 분할되어야 떨어져 나옴
   → 깊은 노드에 위치 = 정상

 

2. 여러 iTree를 만든다 (앙상블)

- 개별 트리만으로는 랜덤성 때문에 불안정

- n_estimators 개 트리를 만들고 평균 깊이를 사용

 

3. 고립 난이도 평균값으로 Score 계산

- 평균 깊이 E(h(x)) 를 이용해 이상치 점수(Anomaly Score)를 계산

  • 점수가 1에 가까울수록 → 이상치
  • 점수가 0에 가까울수록 → 정상

 

시간 복잡도

- O(T * M * N * logN), T = 트리의 개수

 

공간 복잡도

- 최대 깊이가 ψ인 이진트리의 공간복잡도 = O(ψ)

 

장점

- 데이터의 분포나 밀도에 대한 가정을 하지 않음 (다양한 데이터 유형 적용, 비지도 학습)

- 거리 기반 알고리즘(LOF, k-NN)보다 고차원 데이터에서 성능 저하가 상대적으로 적고 효율적인 알고리즘
- 빠른 속도 시간 복잡도 O(n log n), 데이터가 커도 스케일링 잘 됨
- 앙상블 기반으로 안정성 확보, 랜덤 트리 여러 개로 결과 신뢰성 향상
- 이상치 점수 제공 이진 판단뿐 아니라 "이상치 정도" 평가 가능

 

단점

군집형(Local) 이상치 탐지에 약함 → 군집 내부의 미묘한 이상치 탐지가 어려움

ㄴ 데이터 간 관계가 복잡하거나, 이상치가 정상치와 유사한 영역에 분포하면 감지가 어려움
- 랜덤성에 의한 결과 편차 트리 개수가 적으면 불안정

- 스케일 민감성 : Feature 스케일 차이가 크면 분할 과정에서 영향
- 카테고리 데이터 처리 약함, 수치형 기준으로 설계됨 → 전처리 필요

- 이상치 점수는 상대적이므로 임계값 설정이 필요
- 복잡한 비선형 경계 탐지 한계, SVM 등보다 경계가 단순하게 형성
- 초기 파라미터 설정 영향 큼 → max_samples, contamination 설정에 민감


하이퍼 파라미터

from sklearn.ensemble import IsolationForest

IsolationForest(
    n_estimators=100,
    max_samples='auto',
    contamination='legacy',
    max_features=1.0,
    bootstrap=False,
    n_jobs=None,
    behaviour='old',
    random_state=None,
    verbose=0,
    warm_start=False,
)

n_estimators
- 기본 추정기(base estimator) 개수

 

max_samples
- 각 기본 추정기를 학습시키기 위해 X에서 추출할 샘플 개수
- int : max_samples만큼 샘플 추출
- float : max_samples * X.shape[0]만큼 샘플 추출
- auto : max_samples=min(256, n_samples)로 설정
- max_samples가 전체 샘플 수보다 크면, 모든 트리에 대해 모든 샘플을 사용

 

contamination
- 데이터셋의 오염 정도, 즉 이상치 비율

- 모델 학습 시 decision function의 임계값(threshold)을 정의할 때 사용
- "auto"로 설정하면, 결정 함수 임계값은 자동 결정

 

max_features 
- 각 기본 추정기를 학습시키기 위해 선택할 feature 수
- int이면 max_features 개 feature 선택
- float이면 max_features * X.shape[1] 개 feature 선택

 

bootstrap
- True : 개별 트리를 학습할 때 샘플을 복원 추출(with replacement)
- False : 비복원 추출(without replacement)


warm_start 
- True : 이전 fit 결과를 재사용하여 estimators를 추가
- False : 새로운 랜덤 포레스트 전체를 학습


Attributes

    estimators_ : list of DecisionTreeClassifier
        The collection of fitted sub-estimators.

    estimators_samples_ : list of arrays
        The subset of drawn samples (i.e., the in-bag samples) for each base
        estimator.

    max_samples_ : integer
        The actual number of samples

    offset_ : float
        Offset used to define the decision function from the raw scores.
        We have the relation: ``decision_function = score_samples - offset_``.
        Assuming behaviour == 'new', ``offset_`` is defined as follows.
        When the contamination parameter is set to "auto", the offset is equal
        to -0.5 as the scores of inliers are close to 0 and the scores of
        outliers are close to -1. When a contamination parameter different
        than "auto" is provided, the offset is defined in such a way we obtain
        the expected number of outliers (samples with decision function < 0)
        in training.
        Assuming the behaviour parameter is set to 'old', we always have
        ``offset_ = -0.5``, making the decision function independent from the
        contamination parameter.

 

estimators_
- 학습된 하위 추정기(sub-estimator)들의 리스트

estimators_samples_ 
- 각 기본 추정기에 대해 선택된 샘플(인-백(in-bag) 샘플)의 리스트입니다.


max_samples_ 
- 실제 사용된 샘플 수

offset_

- raw score로부터 decision_function을 정의할 때 사용되는 오프셋
- decision_function = score_samples - offset_


- behaviour='new'인 경우:
   * contamination="auto"이면, offset=-0.5로 설정 (inlier 점수 ~0, outlier 점수 ~-1)
   * contamination이 다른 값이면, offset을 조정하여 학습 시 예상되는 이상치 수를 맞춤
   

- behaviour='old'인 경우:
   * 항상 offset=-0.5로 설정되어 contamination과 무관하게 동작

반응형

댓글