두 환자의 T세포가 서로 다른 섬에 앉는 문제
S30까지는 데이터 하나만 다뤘습니다. 그런데 실제 연구는 환자 10명, 서로 다른 날 뽑은 시료 20개를 합쳐서 봅니다. 여기서 무너집니다. UMAP을 그리면 세포가 세포 유형이 아니라 환자·실험 배치별로 갈라져 앉습니다. 환자 A의 T세포와 환자 B의 T세포가 같은 T세포인데도 서로 다른 섬에 놓입니다.
원인은 배치 효과입니다. 시약 로트, 처리 시각, 시퀀서, 세포 해리 조건 — 이 모든 기술적 차이가 발현에 체계적 편향을 남깁니다. 이걸 지우지 않으면 "환자 A 특이 세포 유형 발견!" 같은 가짜 결론이 나옵니다. 배치를 제거하되 진짜 생물학적 차이는 지키는 것 — 이 편의 주제이자 단일세포 §S2.1의 마지막입니다.
문제의 본질 — 도메인 적응
배치 보정은 CS의 도메인 적응(domain adaptation) 과 같은 문제입니다. 여러 도메인(배치)에서 온 데이터를, 도메인 라벨은 지우고 내용(세포 유형)은 살린 공통 표현으로 정렬하는 것. 두 대표 접근이 철학이 다릅니다.
Harmony — 반복 소프트 군집 + 선형 보정
Harmony는 PCA 공간에서 작동하는 가볍고 빠른 방법입니다. 반복 루프를 돕니다.
- 소프트 군집: 세포를 클러스터로 부드럽게(한 세포가 여러 클러스터에 확률적으로) 배정합니다. 단, 각 클러스터가 여러 배치의 세포를 고루 담도록 유도하는 페널티를 겁니다.
- 배치별 보정: 각 클러스터 안에서 배치 중심의 차이를 계산해, 세포의 PCA 좌표를 배치 효과만큼 이동시킵니다.
- 수렴할 때까지 1~2 반복.
핵심 직관은 "같은 세포 유형이면 모든 배치에 나타나야 한다"입니다. 한 클러스터가 한 배치의 세포로만 채워지면 페널티를 받아, 알고리즘이 그 세포들을 다른 배치의 같은 유형 쪽으로 끌어당깁니다. 선형 이동이라 빠르고, 원본 발현을 바꾸지 않고 좌표만 교정합니다.
scVI — 딥 생성모델로 배치 없는 잠재공간
scVI는 완전히 다른, 무거운 접근입니다. 변분 오토인코더(VAE) 로 세포를 저차원 잠재벡터 로 인코딩하는데, 카운트를 음이항 분포로 모델링하고 배치를 명시적 공변량으로 넣습니다.
여기서 가 세포 의 배치 라벨입니다. 디코더가 "잠재 + 배치 "로 관측 카운트를 복원하도록 학습되면, 잠재 는 배치로 설명되는 변이를 디코더에 떠넘기고 자신은 생물학적 신호만 담게 됩니다. 학습된 가 곧 배치 없는 표현입니다.
scVI는 강력합니다. 비선형이라 복잡한 배치 효과를 잡고, 카운트를 확률적으로 모델링해 불확실성까지 다룹니다. 대신 GPU와 학습 시간이 필요하고, 하이퍼파라미터에 민감합니다.
두 접근의 성격을 정리하면 다음과 같습니다.
| 항목 | Harmony | scVI |
|---|---|---|
| 방식 | PCA 공간 선형 보정 | 딥 생성모델(VAE) |
| 속도 | 매우 빠름 | 느림(GPU) |
| 출력 | 보정된 임베딩 | 잠재표현 + 정규화 발현 |
| 강한 상황 | 빠른 통합, 중간 규모 | 복잡한 배치, 대규모 아틀라스 |
결정적 위험 — 과보정
배치 보정의 가장 무서운 실수는 과보정(over-correction) 입니다. 배치를 너무 열심히 지우다가 진짜 생물학적 차이까지 뭉개는 것입니다. 예를 들어 배치가 곧 질병군(배치 A=정상, 배치 B=암)과 얽혀 있으면, 배치를 지우는 것이 곧 질병 신호를 지우는 것이 됩니다.
그래서 보정 후에는 반드시 두 가지를 함께 봅니다. 배치가 잘 섞였는가(예: iLISI 지표, UMAP에서 배치 색이 고루 섞임)와 세포 유형이 잘 보존됐는가(마커가 여전히 유형별로 특이한가). 통합 지표(scIB 벤치마크)는 이 둘의 균형으로 방법을 평가합니다. "배치가 완벽히 섞였다"만으로 좋아하면 안 됩니다.
Scanpy 실습 (다중 배치)
배치 라벨이 adata.obs["batch"]에 있다고 합시다.
import scanpy as sc# adata = 정규화 + HVG + PCA 완료, obs['batch'] 존재
# --- 방법 1: Harmony (빠름) ---sc.external.pp.harmony_integrate(adata, key="batch") # X_pca_harmony 생성sc.pp.neighbors(adata, use_rep="X_pca_harmony")sc.tl.umap(adata)sc.pl.umap(adata, color=["batch", "cell_type"]) # 배치 섞임 + 유형 보존 동시 확인# --- 방법 2: scVI (강력, GPU) ---import scviscvi.model.SCVI.setup_anndata(adata, layer="counts", batch_key="batch")model = scvi.model.SCVI(adata, n_latent=30)model.train(max_epochs=200)adata.obsm["X_scVI"] = model.get_latent_representation()
sc.pp.neighbors(adata, use_rep="X_scVI")sc.tl.umap(adata)sc.pl.umap(adata, color=["batch", "cell_type"])두 결과 모두에서 color="batch" 와 color="cell_type" 을 나란히 봐야 합니다. 배치 색은 고루 섞이고, 세포 유형은 여전히 또렷한 덩어리를 유지해야 성공입니다. 배치는 섞였는데 유형까지 뭉개졌다면 과보정입니다.
scVI는 layer="counts"(원시 카운트)를 입력으로 받는다는 점에 주의합시다. S28에서 백업해 둔 layers["counts"]가 여기서 빛을 발합니다.
CS 매핑
- 도메인 적응: 여러 도메인의 데이터를 라벨 없이 정렬하는 것은 전이학습·도메인 적응의 핵심 문제입니다.
- VAE(변분 오토인코더): scVI는 생성모델로 잠재표현을 학습합니다. DevBench의 딥러닝 편과 직결되며, 배치를 공변량으로 분리하는 것은 disentangled representation의 응용입니다.
- 반복 소프트 군집(soft k-means): Harmony의 소프트 배정은 EM/소프트 군집화와 같은 골격입니다.
- 정규화 vs 정보 보존 절충: 과보정 위험은 편향-분산, 압축-충실도 절충의 생물학판입니다.
자주 만나는 결함
- 과보정 무시 — 배치 섞임만 보고 세포 유형 보존을 확인 안 하면 진짜 신호를 지웁니다. 두 지표를 항상 함께 봅시다.
- 배치와 조건이 완전 교락(confounded) — 배치=질병군이면 어떤 방법도 둘을 분리 못 합니다. 실험 설계 단계에서 배치를 조건에 고르게 배분해야 합니다(design 문제).
- scVI에 로그 정규화값 입력 — scVI는 원시 카운트를 기대합니다. 정규화값을 넣으면 음이항 모델이 깨집니다.
- 보정된 임베딩으로 차등 발현 — 보정 좌표는 클러스터링·시각화용입니다. DGE는 보정 전 발현(또는 scVI의 정규화 발현 API)으로 배치를 공변량에 넣어 수행합니다.
더 깊게 파고 싶다면
본문은 BPD가 직접 재구성한 서술입니다. 심화는 아래 정통 자료를 활용합시다.
- 참고 무료 웹북: Single-cell best practices (sc-best-practices.org) — 데이터 통합 챕터가 방법 비교와 과보정 진단을 상세히 다룹니다.
- 원 논문(Harmony): Korsunsky et al. (2019), Fast, sensitive and accurate integration of single-cell data with Harmony, Nature Methods 16:1289.
- 원 논문(scVI): Lopez et al. (2018), Deep generative modeling for single-cell transcriptomics, Nature Methods 15:1053.
- 벤치마크: Luecken et al. (2022), Benchmarking atlas-level data integration in single-cell genomics, Nature Methods 19:41 (scIB). 통합 방법의 객관적 평가 틀입니다.
이로써 단일세포 §S2.1(입문 S26 → QC → 정규화 → 차원축소 → 클러스터링 → 배치보정)이 완결됩니다. 한 실험을 넘어 여러 데이터를 통합하는 힘까지 손에 넣었습니다. 다음 편 S32부터는 정적인 세포 유형 지도를 넘어, 세포가 시간에 따라 상태를 바꿔가는 궤적을 추정하는 새로운 차원 — Monocle3·PAGA·pseudotime — 으로 들어갑니다.