이상치 탐지를 하는 세가지 방법
이상치 탐지(Anomaly Detection)는 데이터 세트에서 예상되는 패턴과는 다른 특이한 데이터 포인트를 찾는 기술입니다. 이상치는 데이터 세트의 다른 관측치들과는 매우 다른 특징을 가지고 있어서 주의를 불러일으키는 경우가 많습니다.
이상치 탐지(Anomaly Detection)는 데이터 세트에서 예상되는 패턴과는 다른 특이한 데이터 포인트를 찾는 기술입니다. 이상치는 데이터 세트의 다른 관측치들과는 매우 다른 특징을 가지고 있어서 주의를 불러일으키는 경우가 많습니다.
이상치에 관심을 두는 이유는 여러 가지가 있습니다. 이상치는 데이터에서 예상되는 패턴과는 다른 특이한 값을 나타내기 때문에 분석에 영향을 미칠 수 있기 때문입니다.이상치에 관심을 두는 주요한 이유는 다음과 같습니다.
이상치에 관심을 두는 이유
1. 데이터 품질 개선
- 데이터 오류 탐지: 이상치는 종종 데이터 입력 오류, 시스템 오류, 잘못된 측정 등의 문제를 나타냅니다. 이상치를 감지하고 제거함으로써 데이터의 정확성과 신뢰성을 높일 수 있습니다.
- 결측값 대체: 이상치가 있는 경우 이를 결측값으로 처리하거나 적절한 값으로 대체할 수 있습니다. 이를 통해 데이터의 유용성과 완성도를 개선할 수 있습니다.
2. 모델 성능 향상
- 예측 모델 정확도 향상: 이상치가 예측 모델에 영향을 미치는 경우가 있습니다. 이상치를 처리하지 않으면 모델의 정확도가 저하될 수 있습니다. 이상치를 제거하거나 대체하여 모델의 성능을 향상시킬 수 있습니다.
- 머신러닝 모델 학습: 이상치가 있는 경우 학습 알고리즘이 잘못된 패턴을 학습할 수 있습니다. 이를 방지하기 위해 이상치를 제거하거나 처리하여 모델의 학습을 개선할 수 있습니다.
3. 통찰력 제공
- 데이터 이해: 이상치는 데이터의 특이한 패턴이나 중요한 정보를 나타낼 수 있습니다. 이상치를 분석하여 데이터에 대한 추가적인 통찰력을 얻을 수 있습니다.
- 사회적, 경제적 의미: 특정 도메인에서의 이상치는 중요한 의미를 가질 수 있습니다. 예를 들어, 금융 데이터에서의 이상치는 사기 거래를 나타낼 수 있습니다.
4. 모델 해석 가능성
- 모델 해석 가능성: 일부 모델은 이상치에 민감할 수 있습니다. 이상치를 처리하고 모델을 해석 가능하게 만들면 모델의 결과를 더 잘 이해하고 해석할 수 있습니다.
예시
- 금융 분야: 금융 거래 데이터에서 이상치는 사기 거래를 나타낼 수 있습니다. 이상치를 탐지하여 사기 행위를 방지하고 금융 시스템의 안전성을 높일 수 있습니다.
- 의료 분야: 환자 건강 데이터에서 이상치는 질병이나 건강 문제를 나타낼 수 있습니다. 이상치를 분석하여 조기 진단이나 예방에 활용할 수 있습니다.
- 제조 분야: 제조 공정 데이터에서 이상치는 공정 오류나 장비 고장을 나타낼 수 있습니다. 이상치를 탐지하여 생산 품질을 개선하고 비용을 절감할 수 있습니다.
이상치는 데이터 분석에서 중요한 역할을 합니다. 적절한 처리를 통해 데이터의 품질을 개선하고 모델의 성능을 향상시킬 수 있으며, 동시에 데이터에 대한 통찰력을 제공하여 의사 결정에 도움을 줍니다.
그럼 이상치 탐지는 어떤 방법을 써야할까요? 이상치를 탐지하는 세 가지 주요한 방법을 살펴보겠습니다.
이상치 탐지를 하는 방법
1. 통계적 방법 (Statistical Methods)
- 표준 편차 기반 (Standard Deviation)
- 데이터의 평균과 표준 편차를 계산하여, 일반적인 범위를 벗어난 데이터를 이상치로 간주합니다.
- 평균에서 3개의 표준 편차 이상 떨어진 데이터를 이상치로 판단할 수 있습니다.
- 예를 들어, 수학 점수가 주어졌을 때 전체 학생들의 평균 점수가 70점, 표준 편차가 5점이라고 가정합니다.
- 표준 편차 기반으로는 평균에서 3개의 표준 편차 이상 떨어진 85점 이상의 점수를 이상치로 판단할 수 있습니다.
- 사분위수 기반 (Interquartile Range, IQR)
- 데이터를 사분위수로 나눈 후, IQR을 계산하여 일반적인 범위를 벗어난 데이터를 이상치로 간주합니다.
- 데이터를 크기 순서대로 정렬한 후, 25번째 백분위수(Q1), 75번째 백분위수(Q3)를 계산합니다.
- IQR = Q3(75%) – Q1(25%), 일반적으로 Q1 – 1.5 * IQR 미만이나 Q3 + 1.5 * IQR 초과하는 데이터를 이상치로 판단합니다.
- 예를 들어, 주택 가격 데이터가 주어졌을 때 25번째 백분위수(Q1)가 200,000달러, 75번째 백분위수(Q3)가 500,000달러이라고 가정합니다.
- IQR을 계산하면 300,000달러이며, Q1 – 1.5 * IQR 미만이나 Q3 + 1.5 * IQR 초과하는 가격을 이상치로 간주할 수 있습니다.
2. 기계학습 기반 (Machine Learning-Based Methods)
- 지도 학습 (Supervised Learning)
- 레이블된 데이터를 사용하여 모델을 학습시키고, 새로운 데이터가 이 모델에서 얼마나 벗어나는지를 판단하여 이상치를 탐지합니다.
- 주로 이상치 탐지용 모델로는 Isolation Forest, One-Class SVM 등이 사용됩니다.
- 학습된 모델은 새로운 데이터가 기존 데이터와 다른 정도를 측정하여 이상치로 판단합니다.
- 비지도 학습 (Unsupervised Learning)
- 레이블이 없는 데이터에서 이상치를 찾는 방법입니다.
- 데이터의 패턴을 파악하는 데이터 클러스터링을 통해 소수의 클러스터에 속하는 데이터 포인트를 이상치로 간주합니다.
- 주로 이상치 탐지용 모델로는 DBSCAN, K-Means, Local Outlier Factor (LOF) 등이 사용됩니다.
3. 규칙 기반 (Rule-Based Methods)
- 사전 정의된 규칙
- 도메인 전문가들이나 경험에 기반하여 사전에 정의한 규칙을 사용하여 이상치를 탐지합니다.
- 예를 들어, 특정 조건에 맞지 않는 데이터, 범위를 벗어나는 데이터, 패턴을 갖지 않는 데이터 등을 이상치로 판단할 수 있습니다.
- 휴리스틱 방법:
- 데이터의 특성을 고려하여 휴리스틱한 방법을 사용하여 이상치를 탐지합니다. 휴리스틱은 경험과 직관에 의존하는 방법을 의미합니다.
- 예를 들어, 특정 상황에서 예상치 못한 데이터 패턴 또는 특정 조건을 충족하지 않는 규칙을 정의하여 이상치로 판단할 수 있습니다.
이상치 탐지를 하는 세가지 방법
여기서 다룰 세 가지 방법은 Z-score 방법, 수정된 Z-score 방법, IQR (interquartile range) 방법입니다.
다른 방법들이 어떻게 동작하는지 보여주기 위해, 예제 데이터셋으로 Sir Francis Galton의 유명한 신장 데이터셋을 사용하겠습니다. 이 데이터셋은 898명의 사람들의 신장을 기록하고 있습니다.
1. z-score
z-score는 통계적 이상치 탐지 방법 중 하나로 많이 사용되는 방법입니다. 데이터의 평균과 표준 편차를 사용하여 각 데이터 포인트의 표준화된 값을 계산하고, 이를 기준으로 이상치를 탐지합니다. 이는, 데이터 포인트를 그룹의 평균 및 표준 편차와의 관계로 설명하는 방법입니다. 간단히 말해, 데이터를 평균이 0이고 표준 편차가 1로 정의된 분포에 매핑하는 것입니다.
z-score 방법의 이상치 탐지 방식은 데이터를 중심화하고 다시 스케일링한 후에 0에서 너무 멀리 떨어져 있는 것 (일반적으로 z-score가 3 또는 -3인 경우)은 이상치로 간주되어야 한다는 것입니다. z-score를 사용한 이상치 탐지는 데이터의 분포를 고려하여 이상치를 정의하므로 많은 경우 유용하게 적용될 수 있습니다.
z-score의 계산 방법
z-score = σx − μ
여기서,
- z : 표준화된 값 (z-score)
- x : 개별 데이터 포인트
- μ : 데이터의 평균
- σ : 데이터의 표준 편차
z-score를 이용한 이상치 탐지 방법
일반적으로 z-score를 이용한 이상치 탐지 방법은 다음과 같습니다.
- z-score 계산: 데이터의 평균과 표준 편차를 계산한 후, 각 데이터 포인트의 z-score를 계산합니다.
- 이상치 판단 기준 설정: 일반적으로 표준적인 z-score 기준을 사용하여 이상치를 판단합니다. 보통 z-score가 특정 기준값(일반적으로 2 ~ 3)을 넘어가는 데이터를 이상치로 간주합니다.
- 예를 들어, z-score가 2보다 크면 해당 데이터는 평균으로부터 2 표준 편차 이상 떨어진 값이므로 이상치로 판단할 수 있습니다.
아래 함수는 이러한 계산 과정을 보여줍니다.
pythonCopy code
import numpy as np
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가 과도하게 크거나 작아질 수 있습니다.
- 샘플 크기의 영향: 샘플 크기가 작을 경우, 표본의 특성을 잘 반영하지 못할 수 있습니다.
사용 사례
- 금융 데이터에서는 특정 지표의 z-score가 높은 경우 사기 거래로 의심할 수 있습니다.
- 제조 공정에서는 z-score가 높은 제품이 불량품일 가능성이 높을 수 있습니다.
결론
z-score를 이용한 이상치 탐지는 데이터의 표준화된 값으로 이상치를 탐지하므로 많은 상황에서 유용합니다. 하지만 데이터의 분포에 따라 적절한 기준을 설정해야 하며, 정규 분포를 따른다는 가정이 필요합니다. 따라서, 데이터의 특성과 목적에 따라 다른 이상치 탐지 방법과 함께 종합적으로 활용하는 것이 좋습니다.
2.수정된 z-score
수정된 z-score 계산 방법
수정된 z-score는 기존의 z-score와는 다르게 중위수(median)와 중위절대편차(Median Absolute Deviation, MAD)를 사용하여 계산됩니다. MAD는 데이터 포인트와 중위수 간의 절대적인 거리의 중위수로, 데이터의 표본 변이성을 나타냅니다.
수정된
여기서,
- xi: 개별 데이터 포인트
- Median: 데이터의 중위수
- MAD: 데이터의 중위절대편차 (Median Absolute Deviation)
이상치 판단
일반적으로 수정된 z-score가 특정 기준값(일반적으로 2.5 ~ 3.5)을 넘어가는 데이터를 이상치로 간주합니다. 즉, 수정된 z-score가 2.5보다 크거나 -2.5보다 작은 값을 이상치로 판단할 수 있습니다.
pythonCopy code
import numpy as np
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가 정규 분포를 가정하는 반면, 수정된 z-score는 비정규성에 대응하여 더욱 강건하게 이상치를 탐지합니다.
- 중위수와 MAD 사용: 평균과 표준 편차 대신 중위수와 MAD를 사용하므로 이상치에 민감하지 않고 강력한 방법입니다.
- 유연성: 데이터의 특성에 따라 기준값을 조정하여 적용할 수 있습니다.
단점
- 데이터 분포 의존성: 여전히 데이터의 분포에 영향을 받을 수 있습니다. 특히 극단적으로 비대칭적인 분포에서는 적합하지 않을 수 있습니다.
- 상대적으로 복잡한 계산: 기존의 z-score에 비해 계산이 복잡하며, 대량의 데이터에 대한 계산이 상대적으로 느릴 수 있습니다.
사용 사례
- 금융 데이터: 금융 거래에서 수정된 z-score를 사용하여 사기 거래를 탐지할 수 있습니다.
- 의료 데이터: 중위수와 MAD를 이용한 이상치 탐지는 의료 분야에서 활용되어 효과적인 질병 예측에 활용될 수 있습니다.
결론
수정된 z-score는 데이터의 정규성 가정을 줄이고, 중위수와 MAD를 이용하여 이상치를 더욱 강력하게 탐지하는 방법입니다. 비정규성이 있는 데이터에서 더 효과적으로 사용될 수 있으며, 데이터의 특성과 목적에 따라 적절한 기준값을 조정하여 활용할 수 있습니다. 이러한 특성으로 인해 비정규성이나 극단값이 많은 데이터에서 사용되는 경향이 있습니다.
3. IQR
IQR (Interquartile Range)는 이상치 탐지를 하는 방법 중 하나로 매우 효과적입니다. 이 방법은 데이터의 중간 50% 범위인 IQR을 사용하여 이상치를 정의하고 탐지합니다. 이 방법은 데이터의 분포의 중심적 경향과 분산에 영향을 받지 않으며, 데이터의 상위 25%와 하위 25% 사이의 범위를 계산합니다.
장점
- 견고한 측정: IQR은 중위수와 1사분위수(Q1), 3사분위수(Q3)를 사용하기 때문에 이상치에 대해 견고한 측정을 제공합니다.
- 적용성: IQR은 데이터의 분포의 형태에 크게 영향을 받지 않습니다. 따라서 데이터가 비대칭적인 경우에도 잘 작동합니다.
- 간단함: 계산이 간단하고 이해하기 쉽습니다. 1.5배의 IQR을 사용하여 이상치를 정의하므로 구현이 쉽습니다.
- 시각적 표현: Boxplot과 함께 사용되어 데이터의 이상치를 시각적으로 표현할 수 있습니다.
단점
- 이상치의 범위: IQR 방법은 상위 25%와 하위 25% 사이의 범위를 사용하기 때문에 이 범위에 속하지 않는 모든 데이터를 이상치로 처리합니다. 따라서 IQR 방법은 이상치를 정확하게 식별하지만, 실제로는 많은 데이터를 이상치로 표시할 수 있습니다.
- 이상치 유형: IQR 방법은 이상치를 식별하는 것만으로는 이상치의 종류에 대한 구분을 제공하지 않습니다. 이는 실제로 이상치의 유형을 이해하고 구별하기 위해 추가적인 분석이 필요할 수 있음을 의미합니다.
- 판단 기준: IQR 방법은 1.5배 IQR을 사용하여 이상치를 정의합니다. 이는 주관적인 결정이 필요한데, 이는 얼마나 큰 이상치를 허용할지에 따라 다를 수 있습니다.
IQR 방법 적용 예시
pythonCopy code
import numpy as np
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.5배 IQR을 사용하여 상위 및 하위 한계를 정의합니다. 이 범위를 벗어나는 데이터 포인트를 이상치로 간주합니다.
결론적으로, IQR 방법은 데이터의 중간 50%에 덜 영향을 받으며, 데이터의 분포를 고려하면서도 이상치를 식별하는 데 효과적입니다. 그러나 이상치의 범위와 판단 기준을 설정하는 주관적인 요소가 있을 수 있으므로 실제로는 데이터 및 분석 목적에 따라 다른 방법과 함께 사용하는 것이 좋습니다.
John Tukey가 개발한 IQR (interquartile range) 방법은 이상치를 라벨링하기 위한 또 다른 견고한 방법입니다. 이는 데이터의 모양을 그리는 것이 주된 목적이었던 탐색적 데이터 분석의 선구자인 John Tukey가 개발한 방법입니다. 이 방법은 손으로 계산하고 그래프를 그리던 시대에 사용되었기 때문에 일반적으로 작은 데이터셋이었고, 데이터가 전하는 이야기를 이해하는 데 중점을 두었습니다.
IQR 방법을 사용하는 이점 중 하나는 수정된 z-score 방법처럼 견고한 측정치를 사용한다는 것입니다.
그래서 어떤 방법을 사용해야 할까요? 먼 저, 탐색적 데이터 분석(EDA)에서는 모든 방법을 사용하고 어떤 그림이 나오는지 살펴보는 것에 해를 끼치는 일은 없습니다. 여기서는 추론이 이루어지지 않습니다. 따라서, 제 생각에는 z-score 방법이 가장 적은 것을 제공합니다. 왜냐하면 이 방법은 견고하지 않은 측정치에 의존하며, 작은 크기의 데이터셋에서는 이상치를 보고하지 못하기 때문입니다.
IQR (Interquartile Range)는 이상치를 탐지하는 방법 중 하나로 매우 효과적입니다. 이 방법은 데이터의 중간 50% 범위인 IQR을 사용하여 이상치를 정의하고 탐지합니다. 이 방법은 데이터의 분포의 중심적 경향과 분산에 영향을 받지 않으며, 데이터의 상위 25%와 하위 25% 사이의 범위를 계산합니다.
다음은 Galton 신장 데이터에 각 함수를 실행한 결과입니다.
- Z-score: 56″ (아래); 78″, 79″ (위)
- 수정된 z-score: 없음
- IQR: 79″ (위)
볼 수 있듯이, 어떤 방법도 다른 방법과 크게 다른 결과를 반환하지 않습니다. 898개의 관측치가 있는 데이터셋에서 0과 3 이상치 사이의 차이는 크지 않습니다.
한 가지 주의할 점은 이러한 방법들이 데이터가 강하게 편향된 경우 문제를 겪을 수 있다는 것입니다. 데이터가 강하게 비대칭적인 방식으로 분포되어 있는 경우 이러한 방법 중 어느 것을 적용하기 전에 데이터를 다시 표현해야 합니다.
결론
이러한 방법들은 기계적으로 사용해서는 안됩니다. 데이터를 탐색하는 데 사용되어야 합니다. 이 방법들은 어떤 포인트가 더 면밀한 조사가 필요할지 알려줍니다. 이 정보를 어떻게 활용할지는 상황에 따라 크게 달라집니다. 때로는 모델을 더 예측력 있게 만들기 위해 데이터셋에서 이상치를 제외하는 것이 적절할 수 있습니다. 그러나 때로는 이상치의 존재가 실제 데이터를 생성하는 실제 프로세스가 예상보다 복잡함을 암시하는 경고 신호일 수도 있습니다.
“가끔 이상치는 나쁜 데이터이며 제외되어야 하는 경우도 있습니다. 예를 들어, 오타. 가끔은 그럴 때는 유지해야 합니다.” 도메인 지식과 실용적인 지혜가 이상치인지 아닌지의 차이를 알려주는 유일한 방법입니다.
Share Value, Grow Together! 함께 지식을 공유하고 성장하는 연구 문화를 전파하는 | 모두의연구소
20초만에 구독하고, 매주 SW/AI 소식 받아보세요 | ✉️ 모두레터 구독하기