Tukey outlier detection
Tukey outlier detection은 통계학에서 이상치(outlier)를 탐지하는 방법 중 하나입니다. 이 방법은 John Tukey에 의해 개발되었으며, 데이터셋에서 통계적으로 중요한 이상치를 식별하는 데 사용됩니다.
이 방법은 데이터의 분포를 기반으로 이상치를 식별하며, 주로 사분위범위(IQR, Interquartile Range)를 사용합니다. 사분위범위는 데이터를 정렬한 후에 중앙값(median)을 기준으로 데이터를 4분위로 나눈 것을 의미합니다.
Tukey outlier detection의 기본 원리는 다음과 같습니다:
- 데이터를 정렬합니다.
- 1사분위수(Q1)와 3사분위수(Q3)를 계산합니다. 이는 데이터의 하위 25%와 상위 75%를 의미합니다.
- 사분위범위(IQR)를 계산합니다. IQR은 Q3에서 Q1을 뺀 값입니다.
- 이상치의 임계값을 설정합니다. 일반적으로 IQR의 1.5배를 사용하는데, 이는 통계적으로 중요한 이상치를 탐지하기 위한 임계값입니다.
- 데이터셋에서 Q1 - 1.5 * IQR 보다 작거나 Q3 + 1.5 * IQR 보다 큰 값들을 이상치로 판단합니다.
이 방법을 통해 이상치는 주어진 데이터의 분포에 기반하여 탐지됩니다. 이상치가 실제로 특이한 혹은 오류로 인한 것인지 결정하기 위해 domain knowledge(도메인 지식)와 함께 사용되어야 합니다. 이 방법은 비교적 간단하지만, 데이터의 분포가 정규분포와 다를 경우에는 더 나은 방법을 사용하는 것이 좋을 수 있습니다.
파이썬에서 Tukey outlier detection을 적용하는 간단한 예제를 보여드리겠습니다. 이 예제에서는 pandas 라이브러리를 사용하여 데이터프레임에서 이상치를 탐지하는 방법을 보여줄 것입니다.
먼저, pandas를 설치하지 않았다면 아래 명령을 사용하여 설치합니다:
pip install pandas
이제 아래 예제 코드를 참고해주세요:
import pandas as pd
# 샘플 데이터 생성
data = {'Value': [25, 30, 32, 35, 38, 40, 41, 43, 45, 200]}
df = pd.DataFrame(data)
# Tukey outlier detection 적용
Q1 = df['Value'].quantile(0.25)
Q3 = df['Value'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['Value'] < lower_bound) | (df['Value'] > upper_bound)]
# 결과 출력
print("Original DataFrame:")
print(df)
print("\nOutliers:")
print(outliers)
위 코드에서는 샘플 데이터를 생성하고, Tukey outlier detection을 적용하여 이상치를 탐지합니다. 이상치는 Q1 - 1.5 * IQR 보다 작거나 Q3 + 1.5 * IQR 보다 큰 값을 갖는 데이터포인트로 정의됩니다. 이상치를 탐지한 결과를 출력합니다.
실행하면 "Outliers" 부분에 이상치가 있는지 확인할 수 있을 것입니다. 데이터셋과 이상치 탐지 임계값을 조정하여 실험해보면서 Tukey outlier detection의 동작을 더 자세히 이해해볼 수 있을 것입니다.
이상치 탐지 방법 비교
z-score와 IQR(Interquartile Range) 방식은 모두 이상치 탐지에 사용되는 통계적인 방법입니다. 각각의 방식은 데이터의 분포와 특성에 따라 다르게 작동할 수 있습니다.
1. z-score 방식:
- z-score는 데이터를 평균과 표준 편차로 표준화하여 이상치를 탐지합니다.
- 평균으로부터 얼마나 떨어져 있는지를 표준화된 단위로 나타내므로, 평균에서 멀리 떨어진 데이터 포인트가 이상치로 간주될 수 있습니다.
- 특히 표준 정규분포(평균이 0, 표준 편차가 1인 분포)를 가정할 때 유용합니다.
- 일반적으로 z-score가 임계값(예: 2, 3)을 초과하는 경우 이상치로 간주됩니다.
2. IQR 방식:
- IQR은 데이터의 사분위 범위로 이상치를 탐지하는 방법입니다.
- IQR은 Q3(상위 75%)와 Q1(하위 25%)의 차이로 계산됩니다.
- Q1 - 1.5 * IQR보다 작거나 Q3 + 1.5 * IQR보다 큰 데이터 포인트를 이상치로 간주합니다.
- 정규분포 가정이 필요하지 않으며, 데이터의 중앙값과 분포를 기반으로 이상치를 판단합니다.
두 방식 모두 장단점이 있으며, 데이터의 특성과 분포에 따라 어떤 방식을 선택할지는 경우에 따라 다를 수 있습니다. 예를 들어, 정규분포에 가까운 데이터라면 z-score 방식이 유용할 수 있고, 비정규분포이거나 중앙값을 중요시하는 경우에는 IQR 방식을 고려할 수 있습니다. 이상치 탐지에 있어서는 여러 방법을 실험하고 비교하여 가장 적절한 방식을 선택하는 것이 좋습니다.
해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.
'Big Data > DataAnalysis & Manipulate' 카테고리의 다른 글
정규분포 표현과 통계적 계산 (0) | 2023.08.09 |
---|---|
t-검정 수행 (0) | 2023.08.09 |
numpy histogram() (0) | 2023.08.08 |
DataFrame 인덱싱 (0) | 2023.08.08 |
pandas와 numpy의 var()과 ddof (0) | 2023.08.08 |