type: source status: seedling title: Python Outlier Detection: IQR Method and Z-score Implementation tags: [“data-analysis”, “outlier-detection”, “iqr-method”, “z-score”, “data-quality”, “pandas”] created: 2026-04-26 url: https://medium.com/@tubelwj/python-outlier-detection-iqr-method-and-z-score-implementation-8e825edf4b32 harvested: 2026-04-26 site: Medium source_count: 1 source_type: article updated: 2026-04-26 valid_as_of: 2026-04-26

Python Outlier Detection: IQR & Z-score 방법

학습 목표 매핑

SKALA 3기 Module 2 — 데이터 분석 개요 및 기초통계 (Learning Objective 2-2)

  • Objective: 데이터 품질 문제(결측치·중복·이상치) 3가지를 IQR 기법으로 탐지하고, 실무 데이터셋에서 90% 정확도로 식별 가능 (Bloom L3-L4)
  • Evaluation: 정확도 평가 (탐지 성공률)

이상치 탐지 방법 비교

1. IQR 방법 (사분위수 기반)

원리:

  • Q1 (25 percentile), Q3 (75 percentile) 계산
  • IQR = Q3 - Q1
  • 하한: Q1 - 1.5 × IQR
  • 상한: Q3 + 1.5 × IQR

판정: 하한 미만 또는 상한 초과 → 이상치

Python 코드:

import numpy as np  
import pandas as pd  
 
# 사분위수 계산
Q1 = df['Income'].quantile(0.25)  
Q3 = df['Income'].quantile(0.75)  
IQR = Q3 - Q1  
 
# 경계값 계산
lower_bound = Q1 - 1.5 * IQR  
upper_bound = Q3 + 1.5 * IQR  
 
# 이상치 탐지
df['Outlier'] = (df['Income'] < lower_bound) | (df['Income'] > upper_bound)

장점:

  • ✅ 분포 가정 불필요 (모든 데이터에 적용 가능)
  • ✅ 편향된 데이터에 강함
  • ✅ 박스플롯으로 시각화 용이

단점:

  • 매개변수 1.5가 임의적

2. Z-score 방법 (표준정규분포 기반)

원리:

  • μ (평균), σ (표준편차)
  • 일반적으로 |Z-score| > 3을 이상치로 판정

판정 기준:

  • |Z| < 1.96: 95% 신뢰수준 내 (정상)
  • |Z| < 2.58: 99% 신뢰수준 내
  • |Z| ≥ 3: 이상치 (99.7% 범위 초과)

Python 코드:

from scipy.stats import zscore  
 
# Z-score 계산
df['Z-Score'] = zscore(df['Income'])  
 
# 임계값 설정
z_threshold = 3  
df['Outlier_Z'] = (df['Z-Score'] > z_threshold) | (df['Z-Score'] < -z_threshold)

장점:

  • ✅ 통계적 근거 명확
  • ✅ 표준화된 방법

단점:

  • ❌ 정규분포 가정 필요
  • ❌ 극단값에 민감

비교표

특성IQRZ-score
분포 가정없음 (모든 데이터)정규분포 필수
임계값Q1-1.5×IQR, Q3+1.5×IQR|Z| > 3
편향 데이터강함 ✅약함 ❌
극단값 영향적음많음
시각화박스플롯히스토그램
실무 추천⭐⭐⭐⭐⭐

실제 예시

샘플 데이터:

data = {'Income': [3200, 3400, 3100, 3300, 3250, 3500, 3600, 3400, 3700, 12000]}  

IQR 결과:

  • Q1 = 3250, Q3 = 3550, IQR = 300
  • 하한 = 2800, 상한 = 4000
  • 12000 → True (이상치) ✓

Z-score 결과:

  • Z(12000) = 3.564 > 3
  • 12000 → True (이상치) ✓

두 방법 모두 동일한 이상치 식별

이상치 처리 (선택적)

대체 (Capping)

# IQR 기반 상한/하한으로 제한
df['Income_Capped'] = df['Income'].clip(lower=lower_bound, upper=upper_bound)

삭제

# 이상치 행 제거
df_clean = df[~df['Outlier']]

학습 설계 포인트

Cognitive Level (Bloom)

  • L2 (Understand): IQR/Z-score 개념, 판정 기준 이해
  • L3 (Apply): 실제 데이터에 적용하여 이상치 탐지
  • L4 (Analyze): 두 방법 비교, 상황별 선택 판단

권장 실습

  1. IQR 계산: 간단한 데이터로 Q1, Q3, IQR, 경계값 계산
  2. Z-score 계산: 표준편차 기반 Z값 계산
  3. 실데이터 적용: 실제 판다스 DataFrame에 적용
  4. 정확도 검증: 탐지된 이상치의 도메인 타당성 확인 (90% 기준)

참고 자료

타 소스와의 연계

outlier-handling-velog (이상치 처리 방법) eda-exploratory-data-analysis-geeksforgeeks (EDA 전체 프로세스) eda-python-tds-prabhu (실제 데이터셋 정제 사례)