View
1. IQR(Interquartile Range)이란?
- 데이터를 작은 값부터 큰 값까지 정렬했을 때, 전체 데이터를 4등분한 값 중 일부를 이용하는 방법입니다.
- Q1 (1사분위수): 데이터의 하위 25% 지점 (데이터를 4등분했을 때 첫 번째 경계).
- Q3 (3사분위수): 데이터의 상위 25% 지점 (데이터를 4등분했을 때 세 번째 경계).
- IQR: Q3 - Q1 (데이터의 중간 50% 범위).
2. IQR로 이상치를 정의하는 이유
- 대부분의 데이터는 Q1과 Q3 사이(즉, 중간 50%)에 몰려 있습니다.
- 이상치는 이 범위를 벗어난 값으로 판단합니다.
- 이상치 기준 공식:
- 아래쪽 이상치: Q1 - 1.5 × IQR보다 작은 값.
- 위쪽 이상치: Q3 + 1.5 × IQR보다 큰 값.
- 이상치 기준 공식:
3. 간단한 예제
1) 데이터 준비
data = [10, 12, 13, 13, 15, 18, 20, 25, 28, 100] # 100이 이상치로 의심됨
2) 계산 단계
- 데이터 정렬
- 정렬된 데이터: [10, 12, 13, 13, 15, 18, 20, 25, 28, 100]
- Q1과 Q3 찾기
- Q1: 하위 25% (첫 번째 사분위수)
Q1 = (12 + 13) / 2 = 12.5
- Q3: 상위 25% (세 번째 사분위수)
Q3 = (25 + 28) / 2 = 26.5
- Q1: 하위 25% (첫 번째 사분위수)
- IQR 계산
- IQR = Q3 - Q1 = 26.5 - 12.5 = 14
- 이상치 기준 계산
- 아래쪽 경계:
Q1 - 1.5 × IQR = 12.5 - 1.5 × 14 = -8.5
- 위쪽 경계:
Q3 + 1.5 × IQR = 26.5 + 1.5 × 14 = 47.5
- 아래쪽 경계:
- 이상치 탐지
- 이상치 조건:
- 값이 -8.5보다 작거나 47.5보다 큰 값.
- 이상치: 100 (47.5를 초과하므로 이상치로 간주).
- 이상치 조건:
4. 코드를 활용한 이상치 탐지
코드로 계산하기
import pandas as pd
# 데이터 준비
data = [10, 12, 13, 13, 15, 18, 20, 25, 28, 100]
df = pd.DataFrame({'값': data})
# IQR 계산
Q1 = df['값'].quantile(0.25) # Q1: 12.5
Q3 = df['값'].quantile(0.75) # Q3: 26.5
IQR = Q3 - Q1 # IQR: 14
# 이상치 경계
lower_bound = Q1 - 1.5 * IQR # 아래쪽 경계: -8.5
upper_bound = Q3 + 1.5 * IQR # 위쪽 경계: 47.5
# 이상치 찾기
outliers = df[(df['값'] < lower_bound) | (df['값'] > upper_bound)]
print(outliers)
출력
값
9 100
5. IQR 탐지 요약
- IQR은 데이터를 기준으로 이상치를 정하는 수학적이고 직관적인 방법입니다.
- 주요 단계:
- 데이터를 정렬하고, Q1(25%)와 Q3(75%)를 찾는다.
- IQR = Q3 - Q1을 계산한다.
- 이상치 경계를 계산:
- 아래쪽 경계: Q1 - 1.5 × IQR
- 위쪽 경계: Q3 + 1.5 × IQR
- 경계를 벗어난 값이 이상치.
reply