# 10. 발현이 비슷한 샘플 찾기

> 수만 개 유전자의 발현 패턴을 UMAP으로 2차원에 압축하고, 대규모 암·정상 레퍼런스에서 내 샘플과 가까운 집단을 해석한다.

유전자 하나씩 비교하면 샘플 전체가 어떤 조직(tissue)이나 암과 닮았는지 알기 어렵습니다. 수만 개 유전자의 발현 패턴을 함께 비교하면 비슷한 샘플을 찾을 수 있습니다.

> **이 수업의 질문**: 내 샘플의 전체 발현 패턴은 어떤 정상조직·암 샘플과 가까운가?

샘플 하나를 수만 개 숫자로 된 feature vector라고 보면 추천 시스템이나 임베딩 검색과 같은 모양이 됩니다. 벡터가 비슷한 샘플끼리 이웃으로 연결한 뒤, 그 이웃 관계를 사람이 볼 수 있는 2차원 좌표로 압축합니다.

| 단계 | 데이터 shape | 하는 일 |
| --- | --- | --- |
| 입력 | 샘플 × 약 20,000 유전자 | 샘플마다 발현 벡터 구성 |
| feature 선택 | 샘플 × 약 2,000 유전자 | 샘플 차이를 잘 드러내는 유전자 선택 |
| 이웃 계산 | 샘플 × 이웃 목록 | 고차원에서 가까운 샘플 연결 |
| UMAP 출력 | 샘플 × 2 좌표 | 이웃 관계를 2차원에 배치 |

## 1. UMAP: 전체 발현 패턴이 비슷한 샘플 찾기

수만 개 유전자의 발현 패턴을 **2차원으로 요약**해, 발현이 비슷한 샘플끼리 가깝게 배치하는 것이 **차원축소**입니다. 여기서는 log2(TPM + 1)로 변환한 뒤 변동이 큰 유전자 약 2,000개를 골라 UMAP에 넣었습니다. 거리, PCA·UMAP의 차이와 지도 해석의 한계는 [샘플 거리와 차원축소](/reference/distance-and-dimension-reduction/)에서 설명합니다.

```python
X = expression.loc[samples, variable_genes]  # sample × gene
embedding = UMAP().fit_transform(X)           # sample × [x, y]
```

이 두 좌표는 원래 유전자 두 개를 뜻하지 않습니다. 디버깅 화면을 위해 만든 **손실 압축 좌표**입니다. 가까운 점의 국소 관계는 유용하지만, 멀리 떨어진 군집 사이의 화면상 거리와 방향까지 생물학적 양으로 읽으면 안 됩니다.

같은 차원축소 계열인 PCA로 종양·정상 샘플의 전체 패턴과 환자 짝을 점검하는 장면은 [GSE251845 DEG 실습의 PCA 단계](/practice/colorectal-deg-gse251845/#3-2-전체-발현-패턴을-pca로-보기)에서 확인할 수 있습니다.

내 샘플을 대규모 레퍼런스(TCGA·GTEx 등)와 함께 투영하면, **어떤 조직·암 subtype과 가까운지**로 생물학적 맥락을 추론할 수 있습니다.

여기서도 전처리는 API 계약과 같습니다. 내 샘플과 레퍼런스의 유전자 ID, 정규화, 로그 변환과 배치가 다르면 알고리즘은 생물학보다 파이프라인 차이를 가장 큰 feature로 잡을 수 있습니다.

![TCGA Pan-Cancer + GTEx 정상에 내 골육종 2샘플을 함께 투영한 UMAP](/images/lessons/sam-and-bulk-rna/umap-pancancer.png)

*9,358 TCGA 종양 + 2,502 GTEx 정상 + 내 샘플 2개를 함께 그린 UMAP. 암종마다 군집을 이루고, 내 osteosarcoma 샘플(Boston·Tempus)이 sarcoma 계열 근처에 위치한다. "내 샘플이 어떤 암과 닮았나"를 한눈에 보는 지도.*



## 정리

UMAP은 수만 개 유전자의 차이를 2차원 좌표로 압축해 비슷한 샘플을 가까이 놓습니다.

> **샘플별 전체 발현 패턴 → 변동이 큰 유전자 선택 → 차원축소 → 가까운 레퍼런스 집단 확인**

가깝다는 것은 발현 패턴이 비슷하다는 뜻이지 같은 암종이라는 진단은 아닙니다. 전처리, 배치와 선택한 유전자에 따라 지도 모양도 달라질 수 있습니다.

다음 [여러 샘플의 차등발현 검정](/lessons/bulk-rna-deg/)에서는 반복 샘플을 이용해 두 그룹의 차이를 통계적으로 검정합니다.