NMI (Normalized Mutual Information) and ARI(Adjusted Rand Index)
clustering 결과 비교시, “내 클러스터링이 정답 라벨과 얼마나 같은 방식으로 세포를 나눴는가”를 재는 지표
NMI (Normalized Mutual Information)
aricode::NMI()
“클러스터 번호를 알면 세포 타입에 대한 불확실성이 얼마나 줄어드는가”를 엔트로피로 잰 뒤 0~1로 정규화.
- 1.0 = 클러스터를 알면 타입이 완전히 결정됨
- 0 = 아무 정보도 없음
p_ij = n_ij/n, p_i = a_i/n, p_j = b_j/n
- H(C) = −Σ_i p_i log p_i 클러스터 분포의 엔트로피
- H(T) = −Σ_j p_j log p_j 라벨 분포의 엔트로피
- I(C;T) = Σ_ij p_ij log( p_ij / (p_i · p_j) ) 상호정보량
I(C;T)는 “클러스터를 알았을 때 라벨의 불확실성이 줄어든 양”. 이걸 0~1로 만들려고 나눠주는데, 나누는 값(normalizer)이 여러 종류라는 게 함정;;
| variant | formula |
|---|---|
| “max” | I / max(H(C), H(T)) |
| “sum” | I / [(H(C)+H(T))/2] |
| “sqrt” | I / √(H(C)·H(T)) |
| “min” | I / min(H(C), H(T)) |
aricode::NMI()의 기본값은 variant = "max". 가장 보수적(=값이 작게 나오는) 선택. 반면 파이썬 sklearn.metrics.normalized_mutual_info_score는 "sum"(arithmetic)이 default.
ARI (Adjusted Rand Index)
aricode::ARI() cellID-pair로 계산 = cell 2개씩 짝지어서
- 정답에서 같은 타입 → 내 클러스터에서도 같은 클러스터인가? ✓
- 정답에서 다른 타입 → 내 클러스터에서도 다른 클러스터인가? ✓
내 클러스터링 C(클러스터 r개), 정답 라벨 T(클래스 s개), 전체 세포 n개일 때:
- n_ij = 클러스터 i이면서 클래스 j인 세포 수
- a_i = 행 합 (클러스터 i의 크기)
- b_j = 열 합 (클래스 j의 크기)
세포 쌍은 총 C(n,2)개 같은 쌍, 같은 cluster인 pair 수가 핵심! (Σ_ij C(n_ij, 2))
1 2 Σ_ij C(n_ij,2) − [ Σ_i C(a_i,2) · Σ_j C(b_j,2) ] / C(n,2) ARI = ───────────────────────────────────────────────────────────────────── ½[ Σ_i C(a_i,2) + Σ_j C(b_j,2) ] − [ Σ_i C(a_i,2) · Σ_j C(b_j,2) ] / C(n,2)
맞춘 쌍의 비율이 Rand Index고, 여기서 우연히 맞을 기댓값을 빼서 보정한 게 ARI.
- 1.0 = 완벽 일치
- 0 = 무작위 clster
- 보정때문에 음수도 가능하다
왜 둘을 같이 보나?
분할(splitting)에 대한 태도가 다름.
CD4 TCM을 순수한 클러스터 3개로 쪼갰다고 가정 NMI는 별로 안 깎입니다. 클러스터 번호만 알면 여전히 “CD4 TCM”을 특정할 수 있으니까요. 정보는 보존됐습니다. ARI는 크게 깎입니다. 같은 타입인 세포 쌍이 서로 다른 클러스터에 들어간 게 대량으로 카운트되니까요.
그래서 NMI는 높은데 ARI가 낮으면 = 클러스터는 순수하지만 과분할, 둘 다 낮으면 = 진짜로 false.
이번 결과에 적용하면
| NMI | ARI | NMI/ARI | |
|---|---|---|---|
| totalVI | 0.688 | 0.493 | 1.40 |
| GEX-only | 0.528 | 0.386 | 1.37 |
| WNN | 0.269 | 0.143 | 1.88 |
totalVI와 GEX-only는 비율이 비슷한데 WNN만 격차가 큼. 클러스터가 순수하지도 않으면서 쪼개지기까지 했다는 뜻. 앞서 본 “거대 불순 클러스터 + singleton 무더기” 패턴과 정확히 일치.
대략적인 판정 기준 (scRNA-seq에서 reference annotation 대비):
ARI 평가
- 0.6 우수
- 0.4 ~ 0.6 양호 ← totalVI 0.493
- 0.2 ~ 0.4 미흡 ← GEX-only 0.386
- < 0.2 실패 ← WNN 0.143
주의점 두 개
- 클러스터 개수(k)가 비슷할 때만 비교해야함. 둘 다 k에 민감하기 때문.
- “어떤 세포 타입이 틀렸는지”는 논외. 한 숫자로 요약된 값이라 방향성이 없음. 이런건 purity 표(클러스터별 최빈 타입과 그 비율)나 confusion heatmap으로 봐야 함.
그래서 최종 방법을 고를 땐 NMI/ARI로 후보를 좁히고, 고른 방법 안에서는 purity 표로 어느 lineage가 안 갈리는지 확인하는 순서로 진행해야..