Data Analysis

변이 후보의 근거와 검토 순위

PawCode에서 18,853개 변이 후보를 탐색과 질환 두 관점으로 정렬하고 서로 다른 근거와 상충하는 신호를 그대로 확인할 수 있게 만든 과정을 정리했다.

Table of Contents

지난 글에서는 53GB WGS 데이터를 처리하는 파이프라인을 다뤘다. 이번에는 그 결과로 나온 변이 후보를 어떤 순서로 검토할지 정한 과정을 이야기하려고 한다.

PawCode의 전장 변이 검출 결과는 7,661,621건이었다. 품질과 기능 영향 등을 기준으로 좁힌 뒤에도 18,853개 변이가 남았고 전사체별로 펼치면 21,168행이었다.

이 정도 규모에서는 사람이 모든 후보를 같은 깊이로 검토하기 어렵다. 먼저 볼 순서를 정해야 하지만, 순위가 높다는 이유로 원인 변이처럼 보이게 만들어서도 안 된다. 그래서 후보를 없애는 필터와 검토 순서를 정하는 우선순위를 구분했다.

탐색·질환별 정렬

프로젝트 초반에는 의뢰받은 혈액질환과 관련된 유전자와 경로에 가중치를 줬다. 알고 있는 질환을 기준으로 후보를 찾는 자연스러운 접근이라고 생각했다.

문제는 질환 정보가 들어오는 방식이 정해져 있지 않았다는 점이었다. 특정 질환의 유전자 목록을 코드에 넣어 두면 다른 질환을 분석할 때도 같은 후보가 위로 올라온다. 반대로 질환 정보를 완전히 제외하면 실제로 임상 정보가 주어졌을 때 이를 활용할 수 없다.

최종 구조에서는 두 관점을 함께 유지했다.

탐색 관점   질환을 전제하지 않고 집단 빈도와 기능 영향 등으로 먼저 볼 후보를 정함
질환 관점   문진으로 받은 질환 모델과 후보의 관련성을 추가해 순서를 정함

질환명과 관련 유전자는 코드에 고정하지 않고 시료별 입력으로 만들었다. 임상 정보가 없으면 탐색 관점만 사용하고 정보가 있으면 두 관점의 결과를 나란히 보여준다. 아래 두 화면은 검색 조건이 같은 후보 목록에서 정렬 기준만 바꾼 것이다. MID1 유전자의 같은 변이(X:7140610, G>T)가 탐색 정렬에서는 1위, 질환 정렬에서는 10위에 있다. 질환 정렬의 1위는 MSI2다.

탐색 정렬 · MID1 1위
탐색 정렬에서 X:7140610 G>T 변이 MID1이 1위인 후보 목록
질환 정렬 · MID1 10위
질환 정렬에서 MSI2가 1위이고 같은 X:7140610 G>T 변이 MID1이 10위인 후보 목록

탐색 순위는 현재 가진 일반 근거로 넓게 살펴보기 위한 순서이고, 질환 순위는 입력된 문진 정보를 함께 볼 때의 순서다. 둘 중 하나를 정답으로 고르기보다 사용자가 현재 목적에 맞는 순서를 선택하게 했다.

근거 계열

집단에서 드문 변이, 기능 상실이 예상되는 변이, 보존된 위치의 변이를 하나의 점수로 합치면 정렬하기는 쉽다. 하지만 숫자 하나만 남으면 어떤 근거 때문에 후보가 올라왔는지, 서로 맞지 않는 근거는 없는지 확인하기 어렵다.

PawCode에서는 근거를 다음 성격으로 나눠 보관했다.

  • 호출 결과를 신뢰할 수 있는가
  • 참조 유전체와 전사체 해석을 신뢰할 수 있는가
  • 다른 개 집단에서 얼마나 관찰되는가
  • 단백질이나 조절 기능에 어떤 영향을 주는가
  • 입력한 질환과 어떤 관련이 있는가
  • 예상한 유전 양식과 맞는가

같은 성격의 신호는 여러 개여도 독립된 근거처럼 더하지 않았다. 예를 들어 여러 예측 도구가 비슷한 정보를 사용한다면 결과 개수만큼 증거가 늘어난 것으로 보지 않았다. 한 동형접합 구간 안에 있는 여러 유전자도 같은 DNA 조각으로 함께 물려받았을 수 있어 각각을 독립 사건으로 세지 않았다.

화면에는 후보가 위로 올라온 근거뿐 아니라 상충하는 정보도 함께 표시했다. 순위는 답이 아니라 다음에 무엇을 확인할지 정하는 도구로만 사용했다.

후보 상세에서는 근거 계열과 함께 같은 구간의 사건, 외부 조회 결과를 펼쳐 볼 수 있다. 순위표와 상세 화면이 같은 근거를 사용하게 해서 목록의 숫자와 상세 설명이 따로 계산되지 않도록 했다.

후보 상세에서 확인하는 근거 계열과 상충 정보

후보 집계와 결측

근거 축과 계열 기준으로 집계한 고유 변이 수는 다음과 같았다. 한 변이가 여러 축에 걸릴 수 있으므로 각 줄을 더한 값이 전체 변이 수는 아니다.

집단에서 드물다        352
기능 상실이 예측됨   2,264
보존된 위치다          323
2계열 이상              48
어느 축에도 안 걸림 16,075

여기서 축과 계열은 집계 기준이 다르다. 기능 상실 예측과 보존도는 서로 다른 축으로 표시해도 기능 영향이라는 같은 계열로 묶일 수 있다. 따라서 2계열 이상 48개는 위 세 축 중 둘 이상에 걸린 변이 수를 뜻하지 않는다.

축에 걸린 고유 변이의 합집합은 2,827개다. 축 밖 16,075개와 더하면 18,902개인데, 같은 변이의 어떤 전사체 행은 축에 걸리고 다른 행은 걸리지 않아 49개가 양쪽에 포함된다. 이 중복을 제외한 고유 변이가 18,853개다.

마지막 16,075개는 원인이 아니라는 뜻이 아니다. 현재 확보한 근거만으로는 순서를 앞당길 이유를 찾지 못했다는 의미다. 이를 삭제하면 아직 평가하지 못한 후보와 평가 후 제외한 후보가 섞인다. 그래서 목록에 그대로 두고, 사용자가 특정 후보를 고르면 추가 조회를 할 수 있게 했다.

후보 전체를 화면에 보여주기 전에 상세 정보가 얼마나 채워져 있는지도 확인했다.

탐색·질환 등급과 순위    21,168행  (100%)
질환 관련성과 근거         2,539행  (12.0%)
외부 조회 판정 근거          142행   (0.7%)

위 비율의 분모는 모두 후보표의 21,168행이다. 근거 계열별로 값이 채워졌는지를 센 비율과는 구분했다.

상세 조회 결과가 없는 후보를 그럴듯한 설명으로 채우지 않았다. 빈 값은 그대로 보여주고 필요할 때 추가 검토를 요청하도록 했다.

3단계 변이 판정

후보 등급은 동물 멘델성 변이 판정 지침인 AVCG 2024를 참고했다.

1층   이미 계산한 빈도·보존도·기능 영향으로 기준을 배정
2층   논문·변이 데이터베이스·단백질 정보처럼 외부 조회가 필요한 기준을 확인
3층   두 결과를 합쳐 최종 등급을 계산

2층에서 문헌 기준을 인정하려면 실제로 조회한 인용 정보가 있어야 한다. 모델이 관련이 있다고 설명하는 것만으로는 판정 근거로 사용하지 않았다.

3주차에 당시 판정 대상이던 7,592개 변이와 4,699개 유전자를 대상으로 실행했을 때 10시간 3분이 걸렸다. 계산 자체는 7분 32초였고 나머지 대부분은 외부 조회 대기 시간이었다. 8월 14일 후보 1,054행을 다시 실행했을 때도 3시간 34분, 1,452만 토큰이 들었다. 전체 실행 시간의 대부분은 외부 자료를 기다리는 데 쓰였다.

처음 구현한 기준을 원문과 한 줄씩 대조하다가 요건의 일부만 확인한 채 판정에 사용한 항목 네 개를 찾았다. 필요한 자료가 없는 두 기준은 판정에서 제외했고, 반복 구간의 기능까지 확인해야 하는 기준은 외부 조회 단계로 옮겼다. 계산 신호도 하나가 아니라 둘 이상일 때만 인정하도록 바꿨다.

8월 13일 재판정 전에는 7,836행 가운데 Likely Benign 111행과 Likely Pathogenic 4행이 있었다. 기준을 바로잡은 직후에는 모두 VUS로 돌아갔다. 등급을 뒷받침하지 못하던 근거를 제거했다. 근거가 충분하지 않은 후보도 검토 대상으로 남겨 두려는 이 프로젝트의 목적에 맞춰 판단했다.

검토 기록

후보마다 후속 검토, 보류, 기각 상태와 이유를 기록했다. 아직 보지 않은 후보와 검토 후 기각한 후보를 같은 상태로 두지 않았다. 구조 변이나 동형접합 구간처럼 여러 유전자에 걸친 사건은 하나로 묶어 같은 근거를 여러 번 세지 않도록 했다.

후속 검토와 보류, 기각을 구분한 검토 상태 화면

리포트에도 후보별 근거 계열을 같은 방식으로 담았다. 화면에서 본 순위와 내려받은 문서가 다른 기준으로 만들어지면 검토 과정에서 다시 숫자를 맞춰야 하기 때문이다.

리포트에 기록된 후보별 근거 계열

리포트의 모든 참고 인용이 검증된 것은 아니다. 위 화면처럼 질환 관련성이 ‘무관’인 항목에는 도구 응답과 대조하지 않은 인용이 남아 있다. 이런 인용에는 미검증 표시를 붙여 판정 근거로 인정한 인용과 구분했다.

다만 후보 순위에 쓰는 근거에도 빈틈은 있다. 8월 8일 산출물에서는 집단 빈도 대조 대상 후보 5,336건 중 1,495건을 대조했다(약 28%). 이 비율은 당시 산출물 기준이며 최종 후보 18,853개 전체의 대조율은 아니다. 구조 변이는 후보 화면까지 연결했지만 최종 리포트의 판정에는 포함하지 못했다. 가족 시료와 기능 실험도 없기 때문에 이 결과만으로 원인 변이나 질환을 확정할 수 없다.

후보를 좁히는 과정에서 점수 하나나 필터만으로는 판단하기 어렵다는 걸 느꼈다. 같은 후보도 어떤 근거로 보느냐에 따라 검토할 이유가 달라졌다. 이후에는 유전체 분석이 아닌 다른 일을 할 때도 하나의 기준으로 너무 빨리 결론을 내리고 있지는 않은지 생각하게 됐다.

PawCode 시리즈

  1. 53GB WGS 데이터를 처리하는 29단계 파이프라인 만들기
  2. 변이 후보의 근거와 검토 순위
  3. 대화로 다루는 유전체 분석과 변이 해석
  4. PawCode의 논문 검색 구성과 평가
  5. PawCode 에이전트의 가드레일과 실행 기록
  • #pawcode
  • #bioinformatics
  • #variant
  • #evidence
  • #ranking
  • #avcg