Sign In

[데이터 전처리] 이상치

Y
Yerim
  1. ML
  2. DataAnalysis

이상치란?

관측된 데이터의 범위에서 많이 벗어난 아주 작거나 아주 큰 값을 의미
이상치가 의사결정에 큰 영향을 미칠 수 있기 때문에 적절한 이상치 처리는 필수
이상치를 어떤 기준으로 판단할 수 있을까? → Standard Deviation, IQR, z-score, …
이상치가 중요한 이유
데이터 품질 개선: 데이터 오류 탐지, 결측값 대체
모델 성능 향상: 예측 모델 정확도 향상, 머신러닝 모델 학습 개선
통찰력 제공: 데이터 이해
모델 해석 가능성

이상치 탐지 방법

통계적 방법 (Statistical Methods)

표준편차 기반 StandardDeviation
데이터의 평균과 표준편차를 계산하여 일반적인 범위를 벗어난 데이터를 이상치로 간주
평균에서 3개의 표준편차 이상 떨어진 데이터를 이상치로 판단 가능
사분위수 기반 IQR (Interquartile Range)
IQR을 계산하여 일반적인 범위를 벗어난 데이터를 이상치로 간주
IQR = Q3(75%) - Q1(25%)
일반적으로 Q1 - 1.5IQR 미만, Q3+1.5IQR 초과 데이터를 이상치로 판단

기계학습 기반 (Machine-Learning-Based Methods)

지도학습 (Supervised Learning)
레이블된 데이터를 사용하여 모델 학습, 새로운 데이터가 얼마나 벗어나는지를 판단
Isolation Forest, One-Class SVM 등이 사용
비지도학습 (Unsupervised Learning)
레이블이 없는 데이터에서 이상치를 찾는 방법
데이터 클러스터링을 통해 소수의 클러스터에 속하는 데이터 포인트를 이상치로 간주
DBSCAN, K-Means, Local Outlier Factor (LOF) 등

규칙 기반 (Rule-Based Methods)

사전 정의된 규칙
도메인 전문가들이나 경험에 기반하여 사전에 정의된 규칙을 사용
휴리스틱 방법
데이터의 특성을 고려하여 휴리스틱한 방법을 사용

통계적 기법

Standard Deviation (Z-score)

정규분포
데이터의 분포가 정규분포를 이룰 때 데이터의 표준편차를 이용해서 이상치 탐지
파란색 범위를 벗어나는 데이터는 이상치로 간주할 수 있다
z-score
Z = \frac{X - \mu}{\sigma}
$\mu$: mean
$\sigma$: standard deviation
해당 데이터가 평균으로부터 얼마나의 표준 편차만큼 벗어나 있는지를 의미한다
예를 들어 3표준 편차만큼 벗어나는 데이터를 이상치로 처리하는 것은 z-score가 3보다 크고 -3보다 작은 데이터를 이상치로 처리하는 것과 같은 작업
z-score를 사용한 이상치 탐지
데이터의 평균과 표준편차를 계산한 후 각 데이터 포인트의 z-score 계산
일반적으로 z-score가 특정 값을 넘어가는 데이터를 이상치로 간주
이때 데이터가 정규분포를 따라야 하고, 이상치 분포에 민감하게 변경된다
이상치 판단
def outliers_z_score(ys):
    threshold = 3

    mean_y = np.mean(ys)
    stdev_y = np.std(ys)
    z_scores = [(y - mean_y) / stdev_y for y in ys]
    return np.where(np.abs(z_scores) > threshold)
장점
표준화된 척도: z-score는 데이터를 평균과 표준 편차로 표준화
직관적: 평균으로부터 몇 표준 편차 떨어져 있는지를 직관적으로 이해
계산이 간편: 각 데이터 포인트의 z-score를 계산하는 것은 간단
단점
정규분포 가정: 데이터가 정규 분포를 따른다는 가정을 전제
이상치 분포에 민감: 이상치가 많은 경우, 평균과 표준 편차에 영향을 미쳐 z-score가 과도하게 크거나 작아질 수 있다
샘플 크기의 영향: 샘플 크기가 작을 경우 표본의 특성을 잘 반영하지 못함

수정된 z-score

중위수(median)와 중위절대편차(Median Absolute Deviation, MAD)를 사용하여 계산
MAD는 데이터 포인트와 중위수 간의 절대적인 거리의 중위수로, 데이터의 표본 변이성을 나타냄
이상치 판단
def outliers_modified_z_score(ys):
    threshold = 3.5

    median_y = np.median(ys)
    median_absolute_deviation_y = np.median([np.abs(y - median_y) for y in ys])
    modified_z_scores = [0.6745 * (y - median_y) / median_absolute_deviation_y
                         for y in ys]
    return np.where(np.abs(modified_z_scores) > threshold)
장점
비정규성 대응: 수정된 z-score는 비정규성에 대응하여 더욱 강건하게 이상치를 탐지
중위수와 MAD 사용: 이상치에 민감하지 않고 강력한 방법
유연성: 데이터의 특성에 따라 기준값을 조정하여 적용
단점
데이터 분포 의존성: 여전히 데이터의 분포에 영향, 극단적으로 비대칭적인 분포에서는 적합하지 않을 수 있음
상대적으로 복잡한 계산: 계산이 복잡하며, 대량의 데이터에 대한 계산이 느릴 수 있음

IQR

데이터 분포가 정규분포를 이루지 않거나 한 쪽으로 skewed 한 경우 → IQR 사용
boxplot: 최소값, 최대값, 중간값, 첫번째 사분위(Q1) 및 세번째 사분위(Q3) 값 제공
IQR: Q3 에서 Q1 을 뺀 값
(Q1 – 1.5 * IQR) 보다 작거나 (Q3 + 1.5 * IQR) 보다 큰 데이터는 이상치로 처리
이상치 판단
def outliers_iqr(ys):
    quartile_1, quartile_3 = np.percentile(ys, [25, 75])
    iqr = quartile_3 - quartile_1
    lower_bound = quartile_1 - (iqr * 1.5)
    upper_bound = quartile_3 + (iqr * 1.5)
    return np.where((ys > upper_bound) | (ys < lower_bound))
장점
견고한 측정: IQR은 중위수와 1사분위수(Q1), 3사분위수(Q3)를 사용하기 때문에 이상치에 대해 견고한 측정을 제공
적용성: IQR은 데이터의 분포의 형태에 크게 영향을 받지 않아 데이터가 비대칭적인 경우에도 잘 작동
간단함: 1.5배의 IQR을 사용하여 이상치를 정의하므로 구현이 쉽다
시각적 표현: Boxplot과 함께 사용되어 데이터의 이상치를 시각적으로 표현 가능
단점
이상치의 범위: IQR 방법은 상위 25%와 하위 25% 사이의 범위를 사용하기 때문에 이 범위에 속하지 않는 모든 데이터를 이상치로 처리 → 따라서 IQR 방법은 이상치를 정확하게 식별하지만, 실제로는 많은 데이터를 이상치로 표시할 수 다
이상치 유형: IQR 방법은 이상치를 식별하는 것만으로는 이상치의 종류에 대한 구분을 제공하지 않는다 → 실제로 이상치의 유형을 이해하고 구별하기 위해 추가적인 분석이 필요할 수 있음
판단 기준: IQR 방법은 1.5배 IQR을 사용하여 이상치를 정의 → 주관적인 결정이 필요한데, 이는 얼마나 큰 이상치를 허용할지에 따라 다룰 수 있

기계학습 기반

Isolation Forest

결정 트리 계열의 비지도학습 알고리즘
High dimensional 데이터셋에서 이상치 탐지 시 효과적
결정 트리 형태로 표현
정상데이터를 분리하기 위해 트리가 깊어지고 이상치는 트리 상단에서 분리
이상치를 분리하는 것이 더 쉽다
트리에서 몇 번을 분리해야하는지, 데이터까지의 경로 길이를 기준으로 이상치를 판단
다른 관측치에 비해 짧은 경로 길이를 가지면 이상치일 가능성이 높다
s(x, n) = 2^{\frac{E(h(x)}{c(n)}}
h(x)는 0에서 1사이로 산출되는 경로 길이 점수
결과가 1에 가까울수록 이상치로 간주

DBScan (Density Based Spatial Clustering of Applications with Noise)

하이퍼파라미터 eps, MinPts를 요구
eps: 두 데이터 사이의 거리가 eps보다 작거나 같을 때 → 같은 클러스터
MinPts: 한 클러스터 내에 존재해야하는 데이터의 최소 개수 (최소 3이상, 보통 차원+1)
Core Point와 Border Point를 제외한 데이터가 이상치
eps 거리 내에 MinPts 이상의 데이터를 이웃하는 데이터는 Core Point
eps 거리 내에 MinPts 미만의 데이터를 이웃하는 데이터는 Border Point
KMeans 알고리즘과 달리 클러스터의 개수를 미리 정하지 않아도 되고 선형적으로 나뉘지 않아 다양한 모양을 가질 수 있다
Yerim-DevNote
Subscribe to 'Yerim-DevNote'
Subscribe to my site to be the first to receive notifications and emails about the latest updates, including new posts.
Join Slashpage and subscribe to 'Yerim-DevNote'!
Subscribe
👍