
희귀질환 진단 분야에서 가장 중요한 정보 중 하나는 환자의 Phenotype(표현형) 입니다.
관련 프로젝트를 위해 읽은 논문에서는 HPO(Human Phenotype Ontology)를 단순한 계층 구조로 사용하는 것이 아니라,
그래프 임베딩(Graph Embedding)에 활용해 질환 추천 성능을 향상시키는 방법을 제안하고 있었습니다.
주목해서 본 내용은 단순히 HPO를 Node2Vec으로 임베딩하는 것이 아니라,
- Propagated Frequency(전파된 빈도)
- Edge Weighting(간선 가중치)
- Node2Vec+
를 결합하여 희귀 표현형(Rare Phenotype)을 더욱 잘 보존하는 임베딩 공간을 만든다는 점이었습니다.
이번 글에서는 논문의 전체 파이프라인보다는,
제가 특히 관심 있게 살펴본 HPO 그래프의 가중치 설계 방식과 그 임상적 의미에 초점을 맞춰 정리해보려고 합니다.
왜 HPO 그래프에 가중치가 필요한가?
HPO는 표현형 간의 계층 관계를 정의한 Ontology입니다.
예를 들어,
Seizure
├── Motor Seizure
└── Generalized Seizure
와 같은 구조를 가집니다.
기존의 그래프 임베딩 방법에서는
Seizure ↔ Motor Seizure
Seizure ↔ Generalized Seizure
이를 모두 동일한 연결로 취급합니다.
하지만 실제 임상에서는 그렇지 않습니다.
- Motor Seizure → 비교적 흔함
- Generalized Seizure → 상대적으로 희귀함
한마디로, 모든 연결이 동일한 의미를 갖는 것은 아닙니다.
해당 논문은 바로 이 점에 주목을 했습니다.
Propagated Frequency란 무엇인가?
논문을 읽으면서 가장 잘 이해해야 하는 개념이 바로
Propagated Frequency
입니다.
단순 빈도의 문제
전자 의무기록에는 보통 가장 구체적인 증상만 기록이 됩니다.
예를 들어
Mild Global Developmental Delay
가 기록되었다고 가정해보겠습니다.
하지만 HPO 계층 구조를 보면
Mild Global Developmental Delay
↓
Global Developmental Delay
↓
Neurodevelopmental Abnormality
와 같은 관계가 존재합니다.
단순 빈도만 계산하면
Mild Global Developmental Delay = 1
Global Developmental Delay = 0
Neurodevelopmental Abnormality = 0
이 됩니다.
그러나 이것은 실제 의미와 다른데요.
빈도를 위로 전파한다
해당 논문에서는, 하위 표현형이 존재하면 상위 표현형도 함께 존재한다고 간주합니다.
즉,
Mild Global Developmental Delay = 1
Global Developmental Delay = 1
Neurodevelopmental Abnormality = 1
로 계산합니다.
바로 이것을 Propagation 이라고 합니다!
전파된 빈도의 의미
따라서 Propagated Frequency는
특정 표현형의 직접 기록 빈도뿐만이 아니라 모든 하위 표현형의 발생 빈도를 상위 개념으로 누적해 계산한 빈도 입니다.
이 과정으로,
상위 표현형의 실제 발생 규모를 더 정확하게 반영할 수 있다고 합니다.
간선 가중치는 어떻게 계산되는가?
논문에서는 HPO 노드가 아니라,
간선(Edge)에 가중치를 부여합니다.
여기서 사용된 공식은 다음과 같습니다.
w(v,u)=\min(freq(v),freq(u))+b
여기서
- freq(v) : 노드 v의 전파된 빈도
- freq(u) : 노드 u의 전파된 빈도
- b : 기본 오프셋
입니다.
왜 평균이 아니라 min(freq)를 사용할까?
이 부분이 논문의 핵심 아이디어입니다.
예를 들어
Seizure = 0.626
Generalized Seizure = 0.015
라고 가정해보겠습니다.
만약 평균을 사용한다면?
(0.626 + 0.015)/2 = 0.3205
가 됩니다.
즉, 희귀 표현형이 연결되어 있음에도 매우 큰 가중치가 생성됩니다.
결과적으로
Seizure
|
Generalized Seizure
가 지나치게 강하게 연결됩니다.
반대로, min(freq)를 사용하면?
\min(0.626,0.015) = 0.015
가 됩니다.
이때는, 가장 희귀한 표현형이 연결 강도를 결정합니다.
여기서 오해할 수 있는 부분이 있는데요.
처음에는 “희귀 표현형이 중요하다면서 왜 가중치를 낮추지?”
라는 생각이 들었습니다.
하지만 논문의 목적은 희귀 표현형을 약화시키는 것이 아니었습니다.
오히려
희귀 표현형
↓
흔한 표현형과 덜 섞임
↓
독립적인 위치 형성
↓
구분 가능성 증가
를 목표로 합니다.
다시 말하면, 가중치가 낮다는 것은 중요도가 낮다는 의미가 아니라
독립성이 높아진다는 의미입니다.
해당 논문에 대한 코드가 있어서 분석을 했을때, 핵심 함수는
find_default_weight()
get_edges_from_dag()
입니다.
find_default_weight() 함수에서 default_weight 값을 반환해주는데요.
real_max = max(set_probs)
second_max = max(set_probs)
min_diff = real_max - second_max
최대 빈도와 두 번째 빈도의 차이를 계산해주고, 이 값이 논문에서 말하는 b 역할을 수행합니다.
get_edges_from_dag() 함수에서는 실제 간선 가중치 계산을 해주는 것을 볼 수 있습니다.
weight = default_weight + \
min(node.prob_descendants,
child_node.prob_descendants)
논문의 수식을 거의 그대로 구현한 형태입니다.
여기서
prob_descendants
가 바로 Propagated Frequency에 해당합니다.
Node2Vec의 한계 & Node2Vec+의 사용
기존 Node2Vec은
A ---- B
A ---- C
처럼 연결 여부만 활용합니다.
A ==== B
A -- C
이처럼 가중치 차이가 존재해도 그 값을 충분히 반영하지 못합니다.
그래서 해당 논문은 이 문제를 해결하기 위해
Node2Vec+를 사용합니다.
Loose Connection
Node2Vec+는 각 노드 주변의 평균 간선 가중치를 계산합니다.
예를 들어
A-B = 0.20
A-C = 0.18
A-D = 0.02
이면 평균은 0.133 입니다.
이때 w(A,D)=0.02 는 평균보다 작습니다.
따라서
A-D
를 Loose Connection 으로 정의합니다.
Node2Vec+는 랜덤 워크 수행 시
강한 연결 → 자주 방문
약한 연결 → 덜 방문
하도록 확률을 조정을 해주는데요, 이를 통해 그래프의 의미 있는 구조를 더욱 잘 학습하게 되죠.
결과적으로
흔한 표현형
→ 서로 가깝게 위치
희귀 표현형
→ 독립적으로 위치
하게 됩니다.
희귀질환 진단에 중요한 표현형 정보가 임베딩 과정에서 사라지지 않게 되고
희귀 표현형을 일반 표현형과 구별되도록 할 수 있습니다.
Future Applications..
현재 진행 중인 프로젝트에서도
HPO 임베딩 단계에 이러한 가중치 개념을 적용해볼 수 있겠다 생각을 했습니다.
특히
Propagated Frequency
+
Node2Vec+
+
HPO Graph Embedding
조합은 질환 분류 성능 향상 가능성이 있다고 판단되었습니다.
논문은 Node2Vec+를 사용했지만
이후 단계에서
Weighted HPO Graph
↓
GCN
↓
GraphSAGE
↓
GAT
과 같은 구조로 확장도 가능할 것 같습니다.
특히 Attention 기반 GAT는 가중치 정보를 더욱 효과적으로 활용할 수 있을 것으로 보여요.
Insights
처음에는 단순히 “희귀 표현형이 중요하니까 가중치를 크게 주겠지”
라고 생각했습니다.
하지만 논문을 읽으면서
정반대의 접근을 사용했다는 점이 인상적이었습니다.
이 연구는 희귀 표현형의 중요도를 직접 높이는 대신,
흔한 표현형과 섞이지 않도록 연결을 약하게 만들어서 고유한 특징을 보존하려고 했습니다.
특히 매우 단순한 수식이
임상적 의미와 그래프 임베딩의 특성을 동시에 반영하고 있다는 점이 흥미로웠습니다.
또한 Node2Vec+의 Loose Connection 개념은 단순한 그래프 임베딩을 넘어,
“어떤 연결이 정말 중요한 관계인가?”를 판단하는 관점으로도 볼 수 있었습니다.
이번 논문을 통해 단순히 HPO를 임베딩하는 것이 아니라,
의료 지식의 구조와 임상적 희귀성을 함께 반영하는 그래프 설계가 얼마나 중요한지 다시 한번 느낄 수 있었습니다.
Reference
https://www.biorxiv.org/content/10.1101/2022.07.20.500809v1.full.pdf
https://github.com/maryamdaniali/phenotype_embedding
GitHub - maryamdaniali/phenotype_embedding: Code for embedding human phenotype ontology (HPO) using Node2Vec and incorporating p
Code for embedding human phenotype ontology (HPO) using Node2Vec and incorporating phenotype frequencies from a hospital-size dataset. Showcased in the linked paper. - maryamdaniali/phenotype_embed...
github.com