View

IQR

수현조 2024. 12. 3. 11:06

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) 계산 단계

  1. 데이터 정렬
  2. 정렬된 데이터: [10, 12, 13, 13, 15, 18, 20, 25, 28, 100]
  3. Q1과 Q3 찾기
    • Q1: 하위 25% (첫 번째 사분위수)
      Q1 = (12 + 13) / 2 = 12.5
      
    • Q3: 상위 25% (세 번째 사분위수)
      Q3 = (25 + 28) / 2 = 26.5
      
  4. IQR 계산
  5. IQR = Q3 - Q1 = 26.5 - 12.5 = 14
  6. 이상치 기준 계산
    • 아래쪽 경계:
      Q1 - 1.5 × IQR = 12.5 - 1.5 × 14 = -8.5
      
    • 위쪽 경계:
      Q3 + 1.5 × IQR = 26.5 + 1.5 × 14 = 47.5
      
  7. 이상치 탐지
    • 이상치 조건:
      • 값이 -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은 데이터를 기준으로 이상치를 정하는 수학적이고 직관적인 방법입니다.
  • 주요 단계:
    1. 데이터를 정렬하고, Q1(25%)와 Q3(75%)를 찾는다.
    2. IQR = Q3 - Q1을 계산한다.
    3. 이상치 경계를 계산:
      • 아래쪽 경계: Q1 - 1.5 × IQR
      • 위쪽 경계: Q3 + 1.5 × IQR
    4. 경계를 벗어난 값이 이상치.

 

Share Link
reply
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31