Post

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

주의점 두 개

  1. 클러스터 개수(k)가 비슷할 때만 비교해야함. 둘 다 k에 민감하기 때문.
  2. “어떤 세포 타입이 틀렸는지”는 논외. 한 숫자로 요약된 값이라 방향성이 없음. 이런건 purity 표(클러스터별 최빈 타입과 그 비율)나 confusion heatmap으로 봐야 함.

그래서 최종 방법을 고를 땐 NMI/ARI로 후보를 좁히고, 고른 방법 안에서는 purity 표로 어느 lineage가 안 갈리는지 확인하는 순서로 진행해야..

This post is licensed under CC BY 4.0 by the author.

© Subin Cho. Some rights reserved.

Using the Chirpy theme for Jekyll.