AlphaFold를 이용한 단백질 구조 예측

최근 Alphafold의 소스 코드와 전체 단백질 예측 구조 데이터 베이스가 공개되면서, 정말 다양한 방면에 활용이 가능할 것으로 생각되고 있습니다. 유전체 연구자의 입장에서는 Alphafold를 이용하면 수 많은 변이들의 in-silico structural prediction이 가능하기에, 과거에 존재하던 variant prediction tool들 보다 훨씬 강력하고 정확한 예측 도구가 나타날 것으로 생각됩니다. 이번 포스팅은 공개된 Alphafold2의 소스 코드와 데이터 베이스 자료를 정리해보고자 합니다.

[Alphafold2 모델 모식도]

Alphafold2의 경우, 기존에 실험적으로 17% 정도만 알려져있던 단백질의 3차원적인 구조를 딥러닝 기법을 활용하여, 존재하는 거의 모든 단백질에 대해서 높은 정확도로 예측하여 해당 구조를 데이터베이스로 제공하고 있습니다. 이는 과거에 알지 못했던 많은 단백질의 3차원 구조들에 대한 높은 예측을 제공하기 때문에, 완전히 새로운 필드를 열었다고 해도 과언이 아닙니다. 특히나 단백질의 3차원 모델화가 가능하다는 것은 이 모델을 활용하여 추후에 파생되는 약물 상호 작용이나 변이의 효과에 대한 예측도 가능하다는 이야기가 되기 때문에, 그 파급력은 더욱 클 것으로 생각됩니다.

현재 AlphaFold Protein Structure Database는 약 2만개의 단백질에 대한 정상 구조를 예측되어 제공하고 있지만, 개인적으로는 인간의 유전체에 존재하는 수 많은 변이 (Missense & Indel variants) 에 대해, mutant protein 들의 예측도 포함하는 Database가 update가 되길 기대해 봅니다. 현재까지의 아미노산 서열의 변화에 대한 많은 예측 Tool이 개발되었지만, 임상적으로 해석하고 활용하기에는 많은 한계가 있었는데, 최종 변이 단백질의 구조를 높은 정확도로 예측할 수 있다면, 그 해석과 활용도 용이해지기 때문입니다. 단백질 하나에 존재할 수 있는 아미노산 변이의 종류는 수만가지가 넘을 것이기 때문에 (아미노산 20종 x 단백질 서열 크기 500~2,000개 아미노산), 이러한 Database를 구축하기 위해서 컴퓨터가 연산해야할 데이터량이 무지막지하겠지만, 결국에는 이러한 in-silico saturated mutagenesis proteome Database도 추후에 구축되지 않을까 예상합니다. (비트 코인 채굴하는 자원이면, 금방 될 듯 합니다…)

[관련 포스팅 보기]

[References]

Deepmind Blog 소개 글: https://deepmind.com/blog/article/putting-the-power-of-alphafold-into-the-worlds-hands

Open source github 자료: https://github.com/deepmind/alphafold/

AlphaFold Protein Structure Database: https://alphafold.ebi.ac.uk/

Jumper, John, et al. “Highly accurate protein structure prediction with AlphaFold.” Nature (2021): 1-11.

Jumper, J., Evans, R., Pritzel, A. et al. “Highly accurate protein structure prediction with AlphaFold”. Nature (2021).

Bioinformatics 비전공자를 위한, Bioinformatics 어떻게 공부하는게 효과적일까?

지난 포스팅에 이어서, 주변에 계시는 분들께 종종 받는 질문에 대한 포스팅입니다. 가끔 주변의 선생님들로부터 아래와 같은 질문을 심심치 않게 듣습니다.

“Bioinformatics나 머신 러닝에 대해서 공부하고 싶은데, 너무 막막해요. 무슨 교재를 보고 어떻게 공부하는게 좋나요?”

저는 BioinformaticsComputational Biology 전공자도 아닐 뿐 더러, 코딩을 잘하는 것도 아닙니다. 다만 연구자로써 그 때 그때 필요한 Bioinformatics 도구들을 많이 사용한 경험이 있고, 구글링을 잘 활용할 뿐 입니다. 물론 컴퓨터 언어를 전혀 모른다면 문제겠지만, 프로그래밍 언어 자체를 배우는데 시간을 낭비할 필요는 없습니다. (원래 인생은 바로 실전 아니겠습니까?)

unnamed

책을 사서 프로그래밍 언어 자체를 독학을 하는 것은 시간적으로 효율도 나쁠 뿐 더러, 실전에는 별로 도움이 안되는 (=별로 쓰이지 않는) 내용들이 많습니다. 논문을 쓸 때, 통계 기법을 사용하는 것도 분석을 하고 해석을 통해 결과를 도출하기 위해서이지, 그것을 위해 우리 모두가 통계학 책을 꺼내서 처음부터 정독할 필요는 없습니다. 그런 의미에서 대부분의 사람들에게는 Bioinformatics tool 이나 머신 러닝 기법도 통계 기법과 같이, 데이터를 다루는 도구일 뿐이며, 우리는 이러한 도구들을 적당히 이용해서 데이터를 해석하고, 결과를 만들면 됩니다. (즉, 어떤 칼을 사용하던지 생선 손질만 하면 되는 것 아니겠습니까)

 

r-bioconductor-training_1

python_ml_header

R? Python? 머신러닝을 위한 Tensor Flow? 어떤 프로그래밍 언어를 먼저 배워야하는지, 어떤 교재를 봐야할지 고민할 시간에, 일단 아무거라도 시작해 보세요. 프로그램을 설치해보고, 데이터를 로딩해보고, 요리 조리 만지다 보면, 점점 뭐가 필요한지 깨닫게 됩니다. (개인적으로 R과 Python은 좀 더 쓰기 친숙한 Interface를 제공하는 R studio와 Anaconda를 설치해서 사용하기를 추천합니다.) 아래는 제가 생각하는 비전공자들이 BI tool의 사용법을 가장 효율적으로 습득하는 방법입니다.

 

1. 나만의 Real dataset을 가지고, 논문을 써보자

데이터는 직접 만지고, 조작을 해봐야 하는데, 자신이 분석하고자 하는 데이터셋이 있는 경우가 가장 좋습니다. 내가 가장 친숙한 데이터셋일 뿐 더러, 남의 깨끗하게 정제된 데이터가 아니라, 날 것 (?) 자체의 데이터 (Raw data)를 가공하는 과정에서 많은 것들을 배우게 됩니다. 이를 이용해서 논문을 한번 써보면 금상첨화 입니다.

비슷한 특성의 데이터셋을 이용해서 이미 분석해서 출판한 선행 논문을 참고 삼아서, 그 논문에서 이용한 분석 방법론을 그대로 나의 데이터셋에 적용해보세요. 그러다보면 자연스럽게 방법론을 습득하게 되고, 그 과정에서 어떤 프로그래밍 Tool이 필요한지, 어떤 분석 방법들을 다룰 수 있어야하는지를 알게 됩니다. 조금더 나아가 이런 방법을 응용하거나 확장하면 나만의 논문을 쓸 수 있을 정도의 데이터 분석 수준에 도달하게 됩니다. (사실 대부분의 Bioinformatics 전문가들도, 이러한 과정을 통해서 박사 학위를 마치고, 전문가가 됩니다.)

 

2. 검색을 최대한 활용하자: Google knows everything!

위에서 언급한 대로 일단 나의 데이터셋을 가지고 시작을 하면, 얼마 지나지 않아 바로 문제에 봉착하게 됩니다.

“아 설치하는데 왜 안되는 거야? 파일 로딩을 어떻게 하는거지… 프로그램을 잘 돌아가는데, 에러는 왜 발생하는 거야..?” 등등

google_god_hero

여기서 재밌는 점은 내가 봉착한 문제는 대부분 다른 사람들도 다 겪었다는 점입니다. 다른 말로하면 구글에 검색해보면 똑같은 문제를 질문한 사람이 꼭 있습니다. (없다면 검색을 제대로 못한 것..)

그렇게 그들의 질문과 다른 전문가들의 답변을 따라서 하나씩 문제를 해결해 가다 보면, 대부분의 문제들은 해결됩니다. 그리고 이러한 과정이 실력을 쌓아가는 과정이기도 합니다. (물론, 이런 시행 착오 과정을 단축 시켜줄 전문가가 옆에 있다면 매우 좋겠지만, 독학하는 사람에게는 구글이 슨상님입니다..) 이러한 방법의 장점은 교재가 필요없고, 돈도 들어가지 않으며 (= 온라인 교재, 무료), 단 시간에 가장 핵심적으로 실무에 필요한 기술만 습득할 수 있다는 점입니다.

 

3. Community Forum, Github tutorial 및 온라인 강의 (Youtube) 활용

마지막으로 위와 같은 과정으로 대충 어떤 스킬이 필요한지, 조금은 감이 왔다면 조금은 더 advanced 된 과정을 배우고 싶은 생각이 들기도 합니다. 이제 관심사와 처지가 비슷한 사람들이 모여있는 커뮤니티에 들어가서 눈팅을하고 질문을 합시다. 요새는 다양한 Bioinformatics 관련 커뮤니티가 활성화되어 있어서, 질문을 올리고 전문가의 답변을 얻기가 훨씬 용이해졌습니다.

maxresdefault

대표적으로 R과 관련한 다양한 블로그 및 포럼, Kaggle과 같은 Machine Learning 포럼, 유전체 분석 관련 Biostar, Bioinformatics Stack Exchange 등등의 커뮤니티들이 있으며, Software 제작자들이 Github에 친절하게 tutorial을 만들어주기도 합니다. 최근에는 유튜브가 활성화되어서, 친절하게 Step-by-step으로 분석 방법을 알려주는 영상도 많이 업로드되고 있으며, Coursera 온라인 강의도 접근이 쉽습니다.

이제는 정보의 홍수 속에서 얼마나 더 효율적으로 원하는 정보를 찾고, 활용하는지가 중요한 시대가 온 것 같습니다. 저런 정보들만 잘 활용한다면, Bioinformatics 도구를 활용하는데 큰 걸림돌은 없을 것이라고 믿어 의심치 않습니다.

이번 포스팅은 여기까지 입니다. 혹시라도 더 좋은 팁이 있다면 알려주세요^^

 

 

임상 빅데이터와 딥러닝(Deep Learning)을 활용한 연구와 고려사항

2년전부터 임상 빅데이터딥러닝 (Deep Learning) 기술을 접목하여 준비했던 논문이 있는데, 최근에 미국 심장학회 (American Heart Association)에서 발간하는 Stroke 지에 게제 승인이 나서, 관련된 내용을 정리하는 포스팅을 남길까 합니다.

의료 정보 빅데이터에 기계 학습 (Machine Learning) 기술을 활용하여 발표 하였던 저희의 첫번째 논문에서는 800명 정도의 환자 데이터를 이용하였는데, 당시 논문은 DIC 진단에 대해 기존 방법에 비해 진단 정확도를 높일 수는 있었지만, 딥러닝 기술이 다른 머신 러닝 기법 (Logistic regression, SVM, Random Forest, ANN)과 비교해서 우수한 성능을 보이지 못했습니다. 해당 연구를 통해, 다음과 같은 한계점을 느꼈습니다.

  1. 머신 러닝 기법이 통계적 기법보다 더 강한 성능을 보이기 위해서는 충분한 수와 양질의 데이터가 필요하다.
  2. 그러나 임상 메타데이터는 수는 많지만 매우 지저분 (messy)하다. (전처리 과정에 매우 큰 노력이 들어가야 한다.)
  3. 딥러닝의 강점을 충분히 활용하기 위해서는 매우 큰 양질의 코호트 데이터가 필요하다.

관련 포스팅 및 논문 보기>

의학 연구를 위한 기계학습 1: Supervised learning의 연구 설계 구조

의료 정보 빅데이터를 활용한 연구와 고려 사항

첫번째 머신 러닝 논문>> https://www.ncbi.nlm.nih.gov/pubmed/29718941

위와 같은 경험을 토대로 양질의 코호트를 찾던 중, 매우 운이 좋게도 신경과에 있는 친구와 의견을 나눌 수 있었고, 다행히 10년 정도 매우 잘 정리된 뇌졸중 환자 코호트를 활용할 수 있었습니다. 아래의 이를 토대로, 이번에 발표한 논문의 내용입니다.

 

Machine Learning–Based Model for Prediction of Outcomes in Acute Stroke

 

I. 논문의 배경 및 내용 소개

뇌졸중 (Stroke)은 고혈압, 흡연, 비만, 고콜레스테롤 등의 다양한 질환에 의해서, 뇌혈관의 혈류가 원활하지 않게 되면서 뇌세포의 사멸이 발생하는 급성 질환입니다. 다만, 빠른 처치 (약물 투여 또는 수술)를 통해서, 뇌혈류를 정상화 시키게 되면 정상적으로 회복 시키는 것이 가능하고, 그렇지 못할 경우에는 영구적인 뇌손상이 남게 됩니다.

저희는 응급실에 뇌졸중이 발생하여 내원한 환자 2,604명의 다양한 임상 정보를 토대로, 3개월 후 시점에서 환자의 예후가 좋을지 나쁠지를 예측하는 머신 러닝 모델을 개발하였습니다. 그동안 임상적으로 예후 예측에 널리 쓰이던 ASTRAL score 는 6가지 임상 정보를 이용하여, 환자의 예후를 예측했는데 저희는 응급실 도착 후에 환자로 부터 얻은 38가지 임상 정보에 딥러닝을 활용하여 환자의 예후를 예측했고, 5% 정도 더 정확하게 환자의 예후를 예측할 수 있었습니다. 재미있는 점은 아무리 딥러닝 기술을 이용하더라도, ASTRAL에서 사용하는 6개의 임상 정보만을 이용하는 경우에는 두 모델 (ASTRAL score 및 딥러닝) 간의 차이가 없었다는 점입니다.

 

II. 논문의 의의 및 시사점

6개의 임상 정보만을 활용하여, 딥러닝을 시켰을 때의 성능이 ASTRAL score와 차이가 없었다는 점은 딥러닝 기술이라고 해서 없는 정보를 더 잘 만들어 냄을 의미하지 않습니다. 즉, 환자의 예후에 영향을 미치는 다양한 요인을 더 세밀하게 수집을 해야만 더 정확한 예후를 예측할 수 있음을 의미합니다. 다른 말로 하면, 환자의 다양한 임상 정보를 매우 정확하고 다양한 측면에서 세밀하게 데이터를 얻어야만, 진정한 의미의 정밀 의료 (Precision Medicine)의 실현이 가능하다는 뜻이 됩니다.

 

AI(Artificial Intelligence) concept, 3D rendering, abstract image visual

II. 딥러닝 기술을 적용한 의학 연구시 고려할 사항

딥러닝 기술은 심층 신경망 (Deep neural network)을 형성함으로써, 기존 통계적 기법에서는 무시되는 데이터들 간의 매우 사소한 인과 관계도 활용할 수 있는 장점이 있습니다. 이러한 특징은 정밀 의료라는 프레임에 매우 적합한 점이라고 할 수 있습니다. 그러나, 이러한 네트워크를 제대로 형성 시키기 위해서는 충분한 수의 양질의 데이터가 필수  (Garbage In, Garbage Out)입니다. 즉, 사금을 채취 과정과 동일하게 아무리 모래 (빅데이터)를 많이 퍼와서, 딥러닝을 시킨다고 의미 있는 결과가 얻어지지 않습니다. 그러나, 딥러닝 기술을 모방한 많은 연구들은 이러한 점을 충분히 고려하지 않거나, 한계점을 지닌채 수행되었습니다.

또한 딥러닝이 충분한 성능을 발휘하기 위해서는 적어도 10,000개 이상의 데이터가 필요한 것으로 알려져 있습니다. 다행히 저희의 이번 연구에서는 10년간 매우 신경 써서 모은 4,000명 이상의 데이터를 이용할 수 있었고, 그럼에도 불구하고 초창기 5~6년의 데이터는 상대적으로 데이터 퀄리티가 떨어져서, 연구에서 제외할 수 밖에 없었습니다. 결국, 최근 3~4년 간 신경써서 모은 38개 임상 정보의 2,604명의 환자의 데이터 (38 x 2,604) 만을 이용하게 되었습니다. 그럼에도 딥러닝 기술과 ASTRAL score 간의 차이는 5% 정도 밖에 되지 않았습니다. 추후에 딥러닝의 장점을 더 잘 살리기 위해서는, 더 크고 정밀한 수의 데이터가 필요한 이유입니다. 그러나 이는 단일 기관에서는 거의 불가능하고, 따라서 국가 주도 또는 콘소시엄 형식의 연구가 필요한 이유가 됩니다.

 

[References]

Heo J, Yoon JG, et al., “Machine Learning–Based Model for Prediction of Outcomes in Acute Stroke”. Stroke: 2019

의학 연구를 위한 기계학습: Supervised learning의 연구 설계 구조

 

이번 학기 마지막 대학원 수업으로 ‘인공지능과 의학 응용’이라는 과목을 수강 중입니다. 수강 인원을 보면, 얼마나 많은 임상 선생님들이 인공지능 (Artificial Intelligence)을 이용하여 의학 연구에 응용하는 것에 관심이 많은지 알수 있었습니다. 학기가 다 끝나지는 않았지만, 안타깝게도 강의 교수님이 통계학과 선생님이라 그런지 수업을 신청한 임상 선생님들의 요구(Needs)와 수준을 제대로 파악하지 못한 듯 합니다. 대학원 수업에 대한 약간의 답답함이 생겨, 의사들의 입장에서 쉽게 이해하고 연구에 적용할 수 있는 관점에서 관련 글을 포스팅 해볼까 합니다. 사실 저도 통계학과 전공자나 컴퓨터 과학 전공자가 아니기 때문에, 전문 용어는 최대한 줄이고 개념적, 응용적 관점에서 글을 쓰도록 하겠습니다.

의학 연구에 적용하기 위해 개념적으로 알아야할 머신 러닝 (Machine Learning) 내용은 그리 어렵지 않습니다. 사실 연구를 위한 머신 러닝 응용은 통계학적 분석이나 크게 다를 바 없는 하나의 분석 도구 (Analytic tool)일 뿐입니다. 그리고 대부분의 연구에서 적용하는 머신 러닝은 대부분 Supervised learning과 Unsupervised learning 2가지 방법 중 하나입니다. (사실 Semi-supervised learning, Reinforcement learning 등의 기법도 있지만, 아직까지 의학 연구에는 그리 많이 쓰이지 않으므로 넘어가겠습니다.) 최근 가장 최신 기법으로 생각되고 있는 딥러닝 또한 적용 알고리즘의 차이 일 뿐 대부분 연구에 사용되는 연구의 큰 틀은 동일합니다. 그리고 그 마저도 대부분이 Supervised learning 방법이라고 생각하면 쉽습니다. 이번 포스팅에서는 Supervised learning을 이용한 연구의 구조와 방법, 각각의 예를 살펴보겠습니다.

  1. Supervised learning (지도 학습)을 이용한 연구: 컴퓨터에게 명확한 결과의 정답지(흔히, Label이라고 부릅니다.) 를 제공하여 훈련(Training)을 시킵니다. 컴퓨터는 정답지를 바탕으로 각 변수의 중요도 및 기여도를 판단하게 되고, 훈련된 데이터를 바탕으로 모델을 수립하게 됩니다. 모델이 수립되면, 우리가 알고자 하는 테스트 데이터를 이용하여, 만들어진 모델의 성능을 평가합니다. 지도 학습은 크게 다음과 같은 2개 target (분류 또는 수치 예측)에 따라 서로 다른 알고리즘을 적용하게 됩니다.

1) 분류 (Classification): 질병 상태와 정상 (Diseased vs. Healthy control)을 여러 임상적 결과에 따라 분류하는 경우로, 가장 흔히 사용하는 방법입니다. 예로, 암 환자와 정상 환자의 여러 가지 임상 변수 데이터를 제공하고 둘을 구분하는 모델을 수립하는 경우가 있습니다. 이 경우에는 2가지 또는 그 이상의 카테고리로 데이터를 구분하게 됩니다.

2) 수치 예측 (Regression): 양적인 값을 예측하는 모델을 수립하고자 할때 사용하는 방법입니다. 예로 암 환자의 여러 가지 임상 변수 데이터를 바탕으로 생존 기간을 예측하고자 하는 경우가 있습니다. 이 경우에는 정량적인 수치로 예측 결과가 나오게 됩니다.

supervised learning
Supervised learning 방법을 이용한 연구 방법의 모식도. Training data를 통해 최적의 모델을 수립하고, Test data를 통해 실제 수립된 모델의 성능을 평가합니다.

Supervised learning을 이용할 때 중요한 점은 다음과 같습니다.

  1. Label 결과가 중요하다.: 머신 러닝은 제공된 정답지(Label; gold standard)를 토대로 수학적 계산을 통해 최적의 모델을 수립하게 되므로, 잘못된 Label을 주거나 모호한 데이터를 토대로 training을 시키면 이상한 모델이 수립될 수 밖에 없습니다. 또한 Supervised learning과 unsupervised learning을 구분짓는 요소가 바로 Label의 존재 유무 입니다. 즉, 모델 수립시 사람의 개입이 있게 되는 모델이 supervised learning이 되겠습니다.
  2. 임상 변수 (Clinical variable) 선택이 매우 매우 중요하다.: 연구를 설계하고, 머신 러닝 알고리즘을 적용할 때, 특징적인 임상 변수 데이터를 제공하여 모델을 수립하게 되는데, 사실 어떠한 변수를 주던지 모델은 만들어집니다. 다시 말하면, 의미없고 전혀 관련성이 없는 변수인데도 불구하고 머신 러닝 알고리즘은 그것을 판단하지 않고 모델 수립에 데이터를 이용하게 된다는 것입니다. 종종 이것은 잘못된 해석을 유도할 수 있습니다. 즉, 모델링에 사용할 임상 변수를 선택하는데 있어 신중하고 꼼꼼하게 고려하고 해석해야한다는 것입니다. 임상 변수의 선택 및 해석에 대한 부분은 머신러닝 전문가라 하더라도 잘 모를 수 있기 때문에, 임상 연구자들이 가장 중요하게 챙겨야 할 부분이라고 할 수 있습니다. 그리고 많은 경우, 수립된 모델에서 변수의 중요도를 계산하여 실제로 적절한 모델인지 해석하게 되는데, 복잡한 알고리즘의 경우 연구자가 그 중요도를 판별하기 어려운 경우도 있기 때문에, 적절한 임상 변수 선택은 매우 중요한 과정이라고 할 수 있습니다.
  3. Over-fitting (과적합)을 피하기 위해, Validation 과정은 필수다.: 일차적으로 모델을 수립할 경우, 머신 러닝 알고리즘은 가장 최적의 모델을 만들어줍니다. 따라서 이때의 모델의 정확도(accuracy)성능(performance)은 좋을 수 밖에 없습니다. (이를 과적합이라고 부릅니다.) 하지만 이 때 수립된 모델의 경우, 매우 지엽적인 데이터에 한정되어 그러한 성능을 보일 수 있기 때문에, 일반적인 상황에서도 수립된 모델이 잘 작동하는지를 평가해야 합니다. 이 과정을 Validation 이라고 부릅니다. Validation은 다른 병원 또는 다른 환자 데이터에서 시행하는 external validation을 시행하는 것이 bias 제거 측면에서 더 좋지만, 임상 데이터가 적은 경우에는 전체 데이터를 Training set과 Test set으로 적절히 쪼개서 (8:2 또는 7:3, 혹은 cross validation 등)  internal validation을 시행하게 됩니다.

마지막으로 대표적인 논문을 살펴보고, 포스팅을 마치겠습니다. 2016년 JAMA에 실린 딥러닝 알고리즘을 적용하여 당뇨병성 망막증을 진단하는 모델을 개발하고 검증한 매우 유명한 머신 러닝 관련 논문입니다. 역시 연구 구조는 위의 틀을 크게 벗어나지 않는 것을 볼 수 있습니다.

1_00000

2

Development set은 모델 수립을 위한 training data 이며, 각각의 이미지에는 전문가가 당뇨병성 망막증이라고 labeling된 데이터가 제공됩니다. 이 데이터를 토대로 수립된 모델을 다른 기관의 validation set에서 그 성능을 평가한 것을 볼 수 있습니다. 보통 모델의 성능 평가는 ROC 커브 (Receiver operating chracteristic curve)를 통해 하게 되는데, ROC curve의 작성과 해석에 관한 부분은 다음번 포스팅에서 다루도록 하겠습니다.

[참고 문헌]

Deo, Rahul C. “Machine learning in medicine.” Circulation 132.20 (2015): 1920-1930.

Gulshan, Varun, et al. “Development and validation of a deep learning algorithm for detection of diabetic retinopathy in retinal fundus photographs.” JAMA 316.22 (2016): 2402-2410.