IQR (사분위수 범위, Interquartile Range)
1. 개요
IQR(Interquartile Range, 사분위수 범위)은 데이터의 중앙값(Median)을 중심으로 상위 25%와 하위 25%를 제외한 중간 50% 데이터의 범위를 나타내는 통계적 산포도 지표이다. 이는 데이터의 전반적인 퍼짐 정도를 측정하며, 특히 극단적인 값(Outlier)의 영향을 최소화하여 데이터의 중심 경향성을 안정적으로 파악하는 데 사용된다.
2. 계산 방법 및 원리
IQR을 계산하기 위해서는 먼저 데이터를 크기 순으로 정렬한 후, 전체 데이터를 4등분 하는 사분위수(Quartile)를 구해야 한다.
- 제1사분위수 ($Q1$, First Quartile): 하위 25% 지점에 위치한 값.
- 제2사분위수 ($Q2$, Second Quartile): 데이터의 중앙값(Median)으로, 50% 지점에 위치한 값.
- 제3사분위수 ($Q3$, Third Quartile): 상위 25% 지점(또는 하위 75% 지점)에 위치한 값.
IQR 계산 공식
$$\text{IQR} = Q3 - Q1$$
주의: 사분위수를 계산하는 방법은 여러 가지(Hinge, Tukey, Moore 등)가 있으며, 사용하는 통계 소프트웨어(R, Python Pandas, Excel 등)의 알고리즘이나 보간법(Interpolation) 설정에 따라 산출되는 $Q1, Q3$ 값이 미세하게 다를 수 있다.
사분위수 위치별 데이터 분포 비율
| 구분 |
기호 |
데이터 누적 비율 |
의미 |
| 최솟값 |
Min |
0% |
데이터셋의 가장 작은 값 |
| 제1사분위수 |
$Q1$ |
25% |
하위 25%와 상위 75%를 나누는 경계 |
| 제2사분위수 |
$Q2$ |
50% |
데이터의 정중앙 값 (중앙값) |
| 제3사분위수 |
$Q3$ |
75% |
하위 75%와 상위 25%를 나누는 경계 |
| 최댓값 |
Max |
100% |
데이터셋의 가장 큰 값 |
3. 이상치(Outlier) 판별 기준
통계학자 존 튜키(John Tukey)가 제안한 Tukey's fences 기준에 따라, $\text{IQR}$은 데이터셋에서 이상치를 정의하는 객관적인 척도로 활용된다. 일반적으로 $1.5 \times \text{IQR}$ 범위를 벗어나는 값을 이상치로 간주한다.
이상치 판별 수식
이상치를 판별하기 위해 하한선(Lower Bound)과 상한선(Upper Bound)을 다음과 같이 설정한다.
- 하한선 (Lower Fence): $Q1 - (1.5 \times \text{IQR})$
- 상한선 (Upper Fence): $Q3 + (1.5 \times \text{IQR})$
이 범위를 벗어나는 값, 즉 $\text{Value} < \text{Lower Fence}$ 이거나 $\text{Value} > \text{Upper Fence}$ 인 데이터는 통계적으로 이상치로 분류된다.
이상치 분류의 확장
- 경미한 이상치 (Mild Outlier): $1.5 \times \text{IQR}$ 범위를 벗어난 값.
- 극단적 이상치 (Extreme Outlier): $3 \times \text{IQR}$ 범위를 벗어난 값으로, 데이터셋에서 매우 이례적인 값으로 간주한다.
4. IQR의 특징 및 장점
$\text{IQR}$의 가장 큰 특징은 강건함(Robustness)이다. 강건함이란 데이터셋에 매우 크거나 작은 극단적인 값이 포함되어 있어도 통계량이 크게 변하지 않는 성질을 의미한다.
표준편차 vs $\text{IQR}$ 비교 분석
| 비교 항목 |
표준편차 (Standard Deviation) |
$\text{IQR}$ (Interquartile Range) |
| 계산 기반 |
평균(Mean) 기준 |
중앙값(Median) 기준 |
| 이상치 영향 |
매우 큼 (제곱 연산으로 인해 민감함) |
매우 적음 (중앙 50%만 고려) |
| 데이터 분포 |
정규분포를 따를 때 효율적임 |
비대칭 분포나 왜곡된 데이터에 적합함 |
| 표현 범위 |
전체 데이터의 변동성을 반영 |
핵심 데이터의 집중도를 반영 |
5. IQR의 한계점 및 단점
$\text{IQR}$은 강건하다는 장점이 있지만, 다음과 같은 한계점이 존재한다.
- 정보 손실: 전체 데이터의 50%만을 사용하므로, 양 끝단(Tail)에 존재하는 유의미한 정보가 완전히 무시될 수 있다.
- 표본 크기 의존성: 표본의 크기가 너무 작을 경우, 사분위수 계산 자체가 불안정하여 $\text{IQR}$의 신뢰도가 떨어진다.
- 수학적 활용 제약: 표준편차와 달리 미분이 불가능한 형태이므로, 많은 고급 통계 모델이나 머신러닝 알고리즘의 손실 함수(Loss Function)로 직접 사용하기 어렵다.
6. 시각화: 박스 플롯(Box Plot)
$\text{IQR}$은 박스 플롯(Box-and-Whisker Plot)의 핵심 구성 요소이다. 박스 플롯은 데이터의 분포를 시각적으로 요약하여 보여주는 그래프이다.
(예시 이미지: 박스 플롯의 기본 구조)
- 상자(Box): $Q1$부터 $Q3$까지의 구간을 나타내며, 상자의 높이(또는 길이)가 바로 $\text{IQR}$이다.
- 중앙선: 상자 내부의 선은 $Q2$(중앙값)를 나타낸다.
- 수염(Whisker): 상자 밖으로 뻗은 선으로, 보통 $1.5 \times \text{IQR}$ 범위 내의 최솟값과 최댓값까지 연결된다.
- 점(Dot): 수염 범위를 벗어난 값들은 개별 점으로 표시되며, 이들이 바로 이상치이다.
7. 실전 활용 예제
계산 사례
다음과 같은 11개의 데이터셋이 있다고 가정하자:
[10, 12, 13, 15, 16, 18, 20, 22, 25, 30, 100]
- 정렬: 이미 정렬되어 있음.
- 사분위수 계산:
- $Q2$ (중앙값): 6번째 값인
18
- $Q1$ (하위 50%의 중앙값):
[10, 12, 13, 15, 16] $\rightarrow$ 13
- $Q3$ (상위 50%의 중앙값):
[20, 22, 25, 30, 100] $\rightarrow$ 25
- $\text{IQR}$ 계산: $25 - 13 = 12$
- 이상치 경계 계산:
- 하한선: $13 - (1.5 \times 12) = 13 - 18 = -5$
- 상한선: $25 + (1.5 \times 12) = 25 + 18 = 43$
- 결과: 상한선 $43$을 초과하는 값인
100이 이상치로 판별된다.
Python 구현 코드
import numpy as np
import pandas as pd
# 데이터셋 생성
data = [10, 12, 13, 15, 16, 18, 20, 22, 25, 30, 100]
df = pd.DataFrame({'value': data})
# 1. 사분위수 계산
# Pandas의 quantile()은 기본적으로 선형 보간법(linear interpolation)을 사용하여 계산함
# 이로 인해 수동 계산 방식과 결과값이 미세하게 다를 수 있음
Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
# 2. IQR 계산
IQR = Q3 - Q1
# 3. 이상치 경계 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 4. 이상치 필터링
outliers = df[(df['value'] < lower_bound) | (df['value'] > upper_bound)]
filtered_data = df[(df['value'] >= lower_bound) & (df['value'] <= upper_bound)]
print(f"Q1: {Q1}, Q3: {Q3}, IQR: {IQR}")
print(f"이상치 경계: {lower_bound} ~ {upper_bound}")
print(f"탐지된 이상치:\n{outliers}")
print(f"필터링 후 데이터 크기: {len(filtered_data)}")
# IQR (사분위수 범위, Interquartile Range)
## 1. 개요
**IQR(Interquartile Range, 사분위수 범위)**은 데이터의 중앙값(Median)을 중심으로 상위 25%와 하위 25%를 제외한 중간 50% 데이터의 범위를 나타내는 통계적 산포도 지표이다. 이는 데이터의 전반적인 퍼짐 정도를 측정하며, 특히 극단적인 값(Outlier)의 영향을 최소화하여 데이터의 중심 경향성을 안정적으로 파악하는 데 사용된다.
## 2. 계산 방법 및 원리
IQR을 계산하기 위해서는 먼저 데이터를 크기 순으로 정렬한 후, 전체 데이터를 4등분 하는 **사분위수(Quartile)**를 구해야 한다.
* **제1사분위수 ($Q1$, First Quartile):** 하위 25% 지점에 위치한 값.
* **제2사분위수 ($Q2$, Second Quartile):** 데이터의 중앙값(Median)으로, 50% 지점에 위치한 값.
* **제3사분위수 ($Q3$, Third Quartile):** 상위 25% 지점(또는 하위 75% 지점)에 위치한 값.
### IQR 계산 공식
$$\text{IQR} = Q3 - Q1$$
> **주의:** 사분위수를 계산하는 방법은 여러 가지(Hinge, Tukey, Moore 등)가 있으며, 사용하는 통계 소프트웨어(R, Python Pandas, Excel 등)의 알고리즘이나 보간법(Interpolation) 설정에 따라 산출되는 $Q1, Q3$ 값이 미세하게 다를 수 있다.
### 사분위수 위치별 데이터 분포 비율
| 구분 | 기호 | 데이터 누적 비율 | 의미 |
| :--- | :---: | :---: | :--- |
| 최솟값 | Min | 0% | 데이터셋의 가장 작은 값 |
| 제1사분위수 | $Q1$ | 25% | 하위 25%와 상위 75%를 나누는 경계 |
| 제2사분위수 | $Q2$ | 50% | 데이터의 정중앙 값 (중앙값) |
| 제3사분위수 | $Q3$ | 75% | 하위 75%와 상위 25%를 나누는 경계 |
| 최댓값 | Max | 100% | 데이터셋의 가장 큰 값 |
## 3. 이상치(Outlier) 판별 기준
통계학자 존 튜키(John Tukey)가 제안한 **Tukey's fences** 기준에 따라, $\text{IQR}$은 데이터셋에서 이상치를 정의하는 객관적인 척도로 활용된다. 일반적으로 $1.5 \times \text{IQR}$ 범위를 벗어나는 값을 이상치로 간주한다.
### 이상치 판별 수식
이상치를 판별하기 위해 하한선(Lower Bound)과 상한선(Upper Bound)을 다음과 같이 설정한다.
* **하한선 (Lower Fence):** $Q1 - (1.5 \times \text{IQR})$
* **상한선 (Upper Fence):** $Q3 + (1.5 \times \text{IQR})$
이 범위를 벗어나는 값, 즉 $\text{Value} < \text{Lower Fence}$ 이거나 $\text{Value} > \text{Upper Fence}$ 인 데이터는 통계적으로 이상치로 분류된다.
### 이상치 분류의 확장
* **경미한 이상치 (Mild Outlier):** $1.5 \times \text{IQR}$ 범위를 벗어난 값.
* **극단적 이상치 (Extreme Outlier):** $3 \times \text{IQR}$ 범위를 벗어난 값으로, 데이터셋에서 매우 이례적인 값으로 간주한다.
## 4. IQR의 특징 및 장점
$\text{IQR}$의 가장 큰 특징은 **강건함(Robustness)**이다. 강건함이란 데이터셋에 매우 크거나 작은 극단적인 값이 포함되어 있어도 통계량이 크게 변하지 않는 성질을 의미한다.
### 표준편차 vs $\text{IQR}$ 비교 분석
| 비교 항목 | 표준편차 (Standard Deviation) | $\text{IQR}$ (Interquartile Range) |
| :--- | :--- | :--- |
| **계산 기반** | 평균(Mean) 기준 | 중앙값(Median) 기준 |
| **이상치 영향** | 매우 큼 (제곱 연산으로 인해 민감함) | 매우 적음 (중앙 50%만 고려) |
| **데이터 분포** | 정규분포를 따를 때 효율적임 | 비대칭 분포나 왜곡된 데이터에 적합함 |
| **표현 범위** | 전체 데이터의 변동성을 반영 | 핵심 데이터의 집중도를 반영 |
## 5. IQR의 한계점 및 단점
$\text{IQR}$은 강건하다는 장점이 있지만, 다음과 같은 한계점이 존재한다.
1. **정보 손실:** 전체 데이터의 50%만을 사용하므로, 양 끝단(Tail)에 존재하는 유의미한 정보가 완전히 무시될 수 있다.
2. **표본 크기 의존성:** 표본의 크기가 너무 작을 경우, 사분위수 계산 자체가 불안정하여 $\text{IQR}$의 신뢰도가 떨어진다.
3. **수학적 활용 제약:** 표준편차와 달리 미분이 불가능한 형태이므로, 많은 고급 통계 모델이나 머신러닝 알고리즘의 손실 함수(Loss Function)로 직접 사용하기 어렵다.
## 6. 시각화: 박스 플롯(Box Plot)
$\text{IQR}$은 **박스 플롯(Box-and-Whisker Plot)**의 핵심 구성 요소이다. 박스 플롯은 데이터의 분포를 시각적으로 요약하여 보여주는 그래프이다.

*(예시 이미지: 박스 플롯의 기본 구조)*
* **상자(Box):** $Q1$부터 $Q3$까지의 구간을 나타내며, 상자의 높이(또는 길이)가 바로 $\text{IQR}$이다.
* **중앙선:** 상자 내부의 선은 $Q2$(중앙값)를 나타낸다.
* **수염(Whisker):** 상자 밖으로 뻗은 선으로, 보통 $1.5 \times \text{IQR}$ 범위 내의 최솟값과 최댓값까지 연결된다.
* **점(Dot):** 수염 범위를 벗어난 값들은 개별 점으로 표시되며, 이들이 바로 **이상치**이다.
## 7. 실전 활용 예제
### 계산 사례
다음과 같은 11개의 데이터셋이 있다고 가정하자:
`[10, 12, 13, 15, 16, 18, 20, 22, 25, 30, 100]`
1. **정렬:** 이미 정렬되어 있음.
2. **사분위수 계산:**
* $Q2$ (중앙값): 6번째 값인 `18`
* $Q1$ (하위 50%의 중앙값): `[10, 12, 13, 15, 16]` $\rightarrow$ `13`
* $Q3$ (상위 50%의 중앙값): `[20, 22, 25, 30, 100]` $\rightarrow$ `25`
3. **$\text{IQR}$ 계산:** $25 - 13 = 12$
4. **이상치 경계 계산:**
* 하한선: $13 - (1.5 \times 12) = 13 - 18 = -5$
* 상한선: $25 + (1.5 \times 12) = 25 + 18 = 43$
5. **결과:** 상한선 $43$을 초과하는 값인 `100`이 이상치로 판별된다.
### Python 구현 코드
```python
import numpy as np
import pandas as pd
# 데이터셋 생성
data = [10, 12, 13, 15, 16, 18, 20, 22, 25, 30, 100]
df = pd.DataFrame({'value': data})
# 1. 사분위수 계산
# Pandas의 quantile()은 기본적으로 선형 보간법(linear interpolation)을 사용하여 계산함
# 이로 인해 수동 계산 방식과 결과값이 미세하게 다를 수 있음
Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
# 2. IQR 계산
IQR = Q3 - Q1
# 3. 이상치 경계 설정
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
# 4. 이상치 필터링
outliers = df[(df['value'] < lower_bound) | (df['value'] > upper_bound)]
filtered_data = df[(df['value'] >= lower_bound) & (df['value'] <= upper_bound)]
print(f"Q1: {Q1}, Q3: {Q3}, IQR: {IQR}")
print(f"이상치 경계: {lower_bound} ~ {upper_bound}")
print(f"탐지된 이상치:\n{outliers}")
print(f"필터링 후 데이터 크기: {len(filtered_data)}")
```