x가 커질수록 y도 평균적으로 함께 커지거나 같아야 하는데, 구간별 평균만 구하면 가끔 x는 더 큰데 평균 y는 더 낮은 칸이 생깁니다. 그 숫자를 그대로 환산표나 기준표로 쓰면 “x가 더 높은데 y는 더 낮다”가 되어 해석이 어색해집니다. 이 글에서는 그 어긋남을 고치는 Isotonic regression(단조 회귀)이 무엇을 계산하는지, 공식 유도보다 직관과 계산 순서 위주로 정리해보겠습니다.
한 줄로 이해하기
점들을 최대한 유지하되, 오른쪽으로 갈수록 값이 내려가지 않게 맞추는 방법입니다.
- x가 작을 때 → y 예측값도 작거나 같음
- x가 클 때 → y 예측값은 같거나 더 큼 (감소 금지)
직선이다, 곡선 모양이 이렇다 같은 강한 가정은 하지 않습니다. 지키는 것은 단조비감소(non-decreasing) 하나뿐입니다.
왜 구간 평균만으로는 부족한가
어떤 x 구간마다 y의 평균을 냈다고 합시다. 대체로는 x가 클수록 평균 y도 큽니다. 그런데 표본이 작거나 우연히 흔들리면 아래처럼 감소하는 칸이 생깁니다.
| x | 구간 평균 ȳ |
|---|---|
| 7.0 | 810 |
| 7.1 | 790 ← x는 더 큰데 평균은 더 낮음 |
| 7.2 | 820 |
Isotonic은 이런 감소 구간만 다듬어, 예측값이
μ̂₁ ≤ μ̂₂ ≤ μ̂₃ ≤ ⋯
가 되게 만듭니다.
전체 계산 흐름
관측값 (x, y) 모으기
↓
x를 구간(또는 정렬된 수준)으로 묶기
↓
각 구간에서 y의 평균 구하기 ← 순수 평균
↓
평균이 들쭉날쭉하면 이웃과 묶어 맞춤 ← Isotonic (PAVA)
↓
최종: x에 대한 단조 증가(비감소) 예측값
Isotonic은 평균을 버리는 방법이 아닙니다. 평균을 먼저 구한 뒤, 그 평균들을 단조가 되게 고칩니다.
1단계 — 데이터 준비
각 관측은 보통 이렇게 생겼습니다.
- x: 순서·크기가 있는 설명변수 (점수, 등급, 시간 등)
- y: 맞추고 싶은 결과값
- (선택) w 또는 n: 그 구간의 가중치·인원 수
x를 작은 것부터 큰 것 순으로 정렬해 둡니다.
2단계 — 구간별 평균
같은 x(또는 같은 구간)끼리 y의 산술평균을 냅니다.
ȳᵢ = (그 구간 y의 합) / nᵢ
- nᵢ: 그 구간 관측 수
- 이 단계의 ȳᵢ가 isotonic의 입력입니다.
3단계 — PAVA
이름은 Pool Adjacent Violators Algorithm입니다. 어긋난 이웃을 묶어서(pool) 고친다는 뜻입니다.
x가 작은 쪽부터 큰 쪽으로 보면서:
- 왼쪽 값 > 오른쪽 값이면 → 위반(어긋남)
- 두 구간을 하나로 합침
- 합친 값은 가중 평균
ȳ_합 = (n_L · ȳ_L + n_R · ȳ_R) / (n_L + n_R)
n 대신 일반 가중치 w를 써도 같습니다.
- 합친 뒤에도 옆과 어긋나면 계속 합침
- 어디도 감소가 없을 때까지 반복
핵심만 말하면, 어긋나는 구간들을 묶어서 같은 점수로 만들고, 어긋나지 않은 구간은 원래 평균을 유지합니다. n(또는 w)가 큰 구간일수록, 합칠 때 그 구간의 평균이 더 강하게 반영됩니다.
계산 예시
| x | 인원 n | 평균 ȳ (보정 전) |
|---|---|---|
| 7.0 | 100 | 810 |
| 7.1 | 40 | 790 |
| 7.2 | 80 | 820 |
(1) 7.0과 7.1 비교
810 > 790 이므로 어긋남입니다. 합칩니다.
(100 × 810 + 40 × 790) / 140 = 804.3
임시 결과:
| x | 값 |
|---|---|
| 7.0 | 804.3 |
| 7.1 | 804.3 |
| 7.2 | 820 |
(2) 합친 덩어리(804.3)와 7.2 비교
804.3 ≤ 820 이므로 어긋남이 없습니다. 여기서 종료합니다.
보정 후
| x | isotonic 후 μ̂ |
|---|---|
| 7.0 | 804.3 |
| 7.1 | 804.3 |
| 7.2 | 820 |
7.0과 7.1은 묶였기 때문에 같은 값이고, 전체는 내려가지 않습니다.
통계적으로 한 줄 더
수학적으로는, 정렬된 x₁ ≤ ⋯ ≤ xₖ에 대해 아래 식을 푸는 것과 같습니다.
μ̂ = arg min (μ₁ ≤ μ₂ ≤ ⋯ ≤ μₖ) Σ wᵢ (ȳᵢ − μᵢ)²
- 제약: 예측값 μ가 비감소
- 목표: 원래 평균 ȳ와 가중 제곱오차를 최소화
- PAVA는 이 문제의 표준 해법입니다.
처음은 이렇게만 기억해도 충분한 것 같습니다. “증가해야 한다”는 규칙만 넣고, 그 규칙 안에서 원래 평균에 가장 가깝게 맞춘다는 뜻입니다.
자주 나오는 오해
| 오해 | 실제 |
|---|---|
| Isotonic이 평균을 버린다 | 아니요. 평균을 입력으로 쓴 뒤 감소만 고칩니다. |
| 모든 구간을 하나로 만든다 | 아니요. 어긋난 이웃만 묶습니다. |
| 항상 매끈한 곡선이 된다 | 아니요. 평평한 구간(같은 값)이 생길 수 있습니다. |
| 직선·다항식을 가정한다 | 아니요. 단조만 가정합니다. |
마무리
한 페이지로 줄이면 순서는 이렇습니다.
- x 구간마다 y 평균을 구한다
- “x↑인데 ȳ↓”인 이웃이 있으면 가중 평균으로 묶는다 (PAVA)
- 더 이상 감소가 없으면 끝
- 결과는 비감소 예측값 μ̂(x)
평균으로 “그 x대의 y 수준”을 잡고, isotonic으로 “x는 큰데 y는 작아지는 경우”를 막는 계산입니다. 구간 평균이 들쭉날쭉해서 기준표가 어색했던 경우에 참고가 되면 좋겠습니다.
읽어주셔서 감사합니다.