TL;DR
- 순열 검정(permutation test) 은 분포 가정 대신 데이터를 직접 재배열해 귀무가설 분포를 만들고, 관측 통계량이 그 분포에서 얼마나 극단적인지로 p-value를 세는 비모수 검정이다.
- 핵심 전제는 교환가능성(exchangeability): 귀무가설이 참이면 라벨이나 짝을 바꿔 끼운 재배열도 원래 데이터만큼 그럴듯하다. 따라서 관측 통계량이 재배열들 사이에서 유독 극단적이면 귀무가설을 의심한다.
순열 검정
순열 검정은 귀무가설이 참이라면 관측값의 라벨·짝·조건 배정을 무작위로 바꿔 끼워도 데이터의 생성 구조가 같다는 교환가능성(exchangeability) 에서 출발한다. 무엇이 교환가능한지는 검정 유형마다 다르다(아래 표). 정규성이나 표본 크기에 기댄 공식 대신, 가능한 재배열들을 실제로 만들어 귀무가설 분포(null distribution) 를 경험적으로 구성하고, 원래 데이터에서 얻은 통계량이 그 분포의 어디에 위치하는지로 유의성을 판정한다.
Pearson 상관계수의 p-value는 이변량 정규성 가정에, Spearman 순위상관계수의 근사 p-value는 충분한 표본 크기에 기댄다. 표본이 작거나 그 가정이 의심스러우면, 순열 검정은 공식을 우회해 p-value를 데이터에서 직접 계산한다.
직관
Spearman 순위상관계수 노트의 예시를 그대로 이어 보자. 공부 시간과 시험 점수가 다음과 같다.
| 학생 | 공부 시간 | 시험 점수 |
|---|---|---|
| A | 1 | 50 |
| B | 2 | 60 |
| C | 3 | 80 |
| D | 4 | 95 |
순위가 완벽히 일치하므로 Spearman 이다. 그런데 표본이 4개뿐이라 “공부 많이 한 학생이 점수도 높은 게 그냥 우연 아니냐”는 반론이 가능하다. 이것이 귀무가설이다.
순열 검정은 이 반론을 데이터로 검증한다. 공부 시간은 고정하고 시험 점수만 무작위로 섞어 다시 짝지은 뒤 를 계산한다. 정말 우연이라면 아무렇게나 섞어도 수준의 높은 값이 자주 나와야 한다. 그렇지 않다면 원래의 은 우연으로 설명하기 어렵다.
절차
- 원래 데이터에서 관심 통계량 를 계산한다 (상관계수, 평균차 등).
- 귀무가설이 참이라는 전제 아래 데이터를 재배열한다. 무엇을 어떻게 섞는지가 검정 유형을 결정한다 (아래 표).
- 재배열된 데이터로 통계량 를 다시 계산한다.
- 2–3을 반복해 통계량들의 분포(귀무가설 분포)를 모은다.
- 가 이 분포에서 얼마나 극단적인지를 세어 p-value를 구한다.
무엇을 섞는가 — 검정 유형
같은 “재배열”이라도 데이터 구조에 따라 섞는 단위가 다르다. SciPy permutation_test의 permutation_type이 이 세 가지에 대응한다.
유형 (permutation_type) | 재배열 단위 | 귀무가설 | 쓰임 |
|---|---|---|---|
independent | 모든 관측치를 풀(pool)해 그룹 라벨을 재배정 | 두 표본이 같은 분포에서 왔다 | 2표본·다표본 비교 |
pairings | 한 변수의 짝(pairing)만 무작위 재배열 | 두 변수의 짝지음이 무작위(독립) | 상관·연관 검정 |
samples | 각 대응쌍 내부에서 두 조건을 교환 | 쌍 안에서 두 조건이 교환가능 | 대응표본(전·후 비교) |
위 공부 시간–점수 예시는 짝만 섞으므로 pairings다. 반면 “A반 점수 vs B반 점수”처럼 두 집단의 평균을 비교한다면, 모든 점수를 한데 모아 어느 반 소속인지 라벨만 다시 붙이는 independent가 맞다. 예컨대 A=, B=에서 평균차 를 검정하면, 8개를 4:4로 가르는 가지 중 관측만큼 극단적인 경우가 2개라 양측 p-value는 다.
Exact 순열과 몬테카를로 순열
가능한 재배열을 전부 열거하면 정확한(exact) p-value가 나온다. 위 상관 예시는 점수를 늘어놓는 모든 순서가 가지뿐이라 전수 계산이 가능하다.
문제는 표본이 조금만 커져도 경우의 수가 폭발한다는 점이다. 짝 순열은 , 2표본 분할은 로 늘어난다 (면 ). 이때는 전수 열거 대신 무작위로 개의 재배열만 뽑아 비율을 추정하는데, 이것이 몬테카를로 순열(Monte Carlo permutation) 이다. 을 키울수록 exact 값에 수렴한다.
p-value 계산
전수 열거가 가능한 경우, 양측 p-value는 재배열 통계량 중 관측값만큼 극단적인 비율이다.
여기서 은 가능한 재배열의 총수다. 공부 시간–점수 예시에서 인 경우는 원래 순서()와 완전 역순() 둘뿐이므로 이다.
몬테카를로 순열에서는 번 중 극단값이 번 나왔을 때 다음을 쓴다.
분자·분모에 더한 은 관측된 배열 자신을 하나의 재배열로 포함시키는 항이다. 이 보정은 p-value가 이 되는 것을 막고 검정의 타당성(제1종 오류율 통제)을 보장한다. 단순히 으로 나누면 작은 표본에서 p-value를 과소평가할 수 있다.
가정과 한계
”가정이 전혀 없다”는 과장이다
순열 검정은 정규성을 요구하지 않지만, 교환가능성이라는 가정 위에 선다. 귀무가설 아래에서 라벨이나 짝이 서로 바꿔 끼울 수 있어야 한다. 두 집단의 분산이 크게 다르거나 관측치 사이에 종속 구조(시계열·군집)가 있으면 이 전제가 깨져 결과가 왜곡될 수 있다.
계산 비용
큰 데이터나 무거운 통계량에서는 수천~수만 번의 재계산이 부담스럽다. exact가 불가능해 몬테카를로로 대체하는 순간, p-value 자체에 표집 오차가 생긴다.
p-value는 주지만 신뢰구간은 직접 주지 않는다
순열 검정의 주된 산출물은 귀무가설에 대한 p-value다. 효과 크기의 표준오차나 신뢰구간을 직접 추정하는 절차는 아니고, 그 목적에는 보통 부트스트랩이 더 직접적이다. 검정을 반전(inversion)해 신뢰구간을 구성하는 방법이 이론적으로 있긴 하다.
부트스트랩과의 차이
순열 검정과 부트스트랩은 둘 다 데이터를 다시 표집(resampling)하지만 목적과 방식이 다르다.
| 순열 검정 | 부트스트랩 | |
|---|---|---|
| 목적 | 가설검정 (p-value) | 추정 (표준오차·신뢰구간) |
| 재표집 | 비복원 재배열 | 복원 추출 |
| 표본 크기 | 원본 그대로, 라벨·짝만 섞음 | 원본과 같은 을 복원추출 |
| 귀무가설 | 필요 (교환가능성) | 불필요 |
| 산출 | 귀무분포·p-value | 추정량의 표집분포·SE·CI |
구현
import numpy as np
from scipy import stats
x = np.array([1, 2, 3, 4])
y = np.array([50, 60, 80, 95])
obs = stats.spearmanr(x, y).statistic # 1.0
# 1) 직접 구현 — 몬테카를로 순열
rng = np.random.default_rng(0)
m = 10_000
b = sum(abs(stats.spearmanr(x, rng.permutation(y)).statistic) >= abs(obs)
for _ in range(m))
p_mc = (b + 1) / (m + 1) # (b+1)/(m+1) 보정 ≈ 0.082
# 2) SciPy — permutation_test
def statistic(y_perm):
return stats.spearmanr(x, y_perm).statistic # x는 closure로 고정
res = stats.permutation_test(
(y,), statistic,
permutation_type="pairings", # 상관 검정: 짝(pairing) 재배열
alternative="two-sided",
n_resamples=np.inf, # 전수 열거(exact), 4! = 24
)
print(res.statistic, res.pvalue) # 1.0, 0.0833...주의: scipy.stats.spearmanr(또는 pearsonr)에는 permutation_type 같은 인자가 없다. 순위·상관 통계량의 순열 검정은 통계량 함수를 scipy.stats.permutation_test로 감싸서 수행해야 한다. 2표본 평균차라면 permutation_type="independent"로 두 배열 (A, B)를 넘긴다.
Connections
- Spearman 순위상관계수 — 작은 표본에서 순위 상관의 p-value를 데이터 재배열로 직접 계산한다.
- Pearson 상관계수 — 정규성 가정이 의심스러울 때 선형 상관의 p-value를 순열 검정으로 대체한다.
- 부트스트랩 — 같은 재표집 계열이지만, 순열은 비복원·가설검정, 부트스트랩은 복원·구간추정.
- Parametric vs Non-parametric — 분포 가정을 약하게 두는 비모수 검정에 속한다.
- [[몬테카를로 방법]] — 재배열을 전수 열거하지 않고 무작위 표집으로 근사하는 기법.


Discussion
Comments
댓글은 승인 후 공개됩니다.