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 도구를 활용하는데 큰 걸림돌은 없을 것이라고 믿어 의심치 않습니다.

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

 

 

데이터 사이언티스트의 흔한 오류와 의료 정보 데이터 전처리시 고려할 사항

이번 포스팅은 Towards Data Scientist의 Top 10 Statistics Mistakes Made by Data Scientists 을 읽고, 의료 정보 데이터를 다룰 때도 역시 적용되는 흔한 오류들에 대해서 글을 써보고자 합니다. 데이터 사이언스와 머신 러닝이 보편화된 지금, 다양한 머신 러닝 기법을 데이터에 적용하는 것은 그리 어렵지 않은 일이 되었습니다. 머신 러닝 기법을 의료 분야에 적용하고 활용하는 시도가 다양하게 진행되고 있습니다만, 사실 많은 사람들이 간과하는 내용이 위 페이지에서 얘기하는 부분과 일맥 상통합니다. 위 페이지의 내용을 간략히 정리하면 아래와 같습니다.

  1.  Not fully understand objective function
  2.  Not have a hypothesis why something should work
  3.  Not looking at the data before interpreting results
  4.  Not having a naive baseline model
  5.  Incorrect out-sample testing
  6.  Incorrect out-sample testing: applying preprocessing to full dataset
  7.  Incorrect out-sample testing: cross-sectional data & panel data
  8.  Not considering which data is available at point of decision
  9.  Subtle Overtraining
  10.  “need more data” fallacy

특히 빅데이터를 활용하겠다고 하는 분야에서, 해당 내용에 대한 충분한 고찰이 있는지는 잘 모르겠습니다. 데이터 사이언스에서 가장 중요한 것은 데이터 그 자체 (Data) 입니다. 그러나 데이터가 쌓여서 빅데이터가 되면, 나무가 모여 숲을 이루는 것과 같이, 사람들은 빅데이터 (숲)의 처리 기술 (Technology)에만 집중하게 됩니다.

kisspng-tree-technology-root-geographic-data-and-information-5b0dafd3ca7051.5449292215276236358292

그러나 Real world (현실)에서 수집된 데이터는 수많은 오류를 포함하게 되고, 개별 나무의 오류에 대한 보정은 무시하고, Technology만을 이용해서 숲 전체를 보정하고자 노력합니다. 의료 데이터의 경우, 대부분의 데이터가 수기 입력 (manual input)이기 때문에, 필연적으로 몸무게, 성별 등과 같은 정보가 잘못 입력되는 경우가 빈번합니다. 체중을 54.7 kg이라고 입력해야하는데, 점을 잘못찍어서 5.47 kg이 된다던가, 547 kg이 입력되는 경우가 대표적입니다. 의료 데이터의 경우는 특히나 이러한 오류가 빈번한데, 이를 세심하게 고려하지 않고 교정없이 열심히 모델을 수립하고 예측하면 엉뚱한 모델이 도출됩니다. 그러한 면에서 데이터 전처리 (Data pre-processing)는 의료 데이터를 다루는 경우에 더욱 중요한 과정이라고 할 수 있겠습니다.

특히, 빅데이터를 다루는 많은 사람들은 raw data 를 들여다 보지 않습니다. 그러나 의료 빅데이터를 다룰 경우, 모든 환자 데이터를 들여다 보지는 못하더라도, 최소한 일부분이라도 한명씩 리뷰를 해보며 각 데이터를 따져볼 필요가 있습니다. raw data를 들여다 보는 것은 정말 중요합니다. 이러한 과정을 통해서, 데이터 자체가 지니고 있는 오류를 발견하고 보정해주고, 추후에 모델이 수립될 경우의 그 의미와 해석에 대해서 서로 연결 시켜나갈 수가 있게 됩니다. 모든 것을 컴퓨터에 맡기는 머신 러닝의 개념과 역설적으로 의료 데이터는 노가다가 필요합니다.

[Reference]

Top 10 Statistics Mistakes Made by Data Scientists

https://towardsdatascience.com/top-10-statistics-mistakes-made-by-data-scientists-2d58ccf12ab1

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

최근 의료에서 핫한 키워드 두가지를 꼽자면 ‘빅데이터‘와 ‘인공지능‘일 것입니다. 많은 의료계 연구자들이 의료 빅데이터에 인공 지능을 접목하여, 새로운 연구를 시도하고 있고 저 또한 관심을 갖고 공부를 시작했기에, 이번 포스팅에서는 그 동안 제 스스로 의료 정보 빅데이터를 다루면서 느꼈던 데이터의 여러 가지 특성, 연구 활용을 위한 한계 및 고려사항 을 포스팅해 보고자 합니다.

관련 포스팅 보기 -> 의학 연구를 위한 기계학습 1: Supervised learning의 연구 설계 구조

우선, 의료 정보 빅데이터라고 할 수 있는 데이터의 종류는 환자에 대한 주치의의 의료 정보 기록(Electrical Medical Record, EMR) 부터 검체 검사 결과 (Lab findings), 영상 검사 결과 (Image findings) 등등 까지 다양합니다. 이러한 환자의 데이터는 다양한 양식으로 병원별 데이터 저장소 (Data Storage System)에 보관되는데, 여기서 가장 근본적인 문제가 발생합니다.

 

Medical record on tablet screen with stethoscope on wooden backg

I. EMR 기록 – 표준화된 데이터 보관 양식의 부재

비록 최근에는 데이터 보관 및 양식의 표준화를 위한 노력이 시작되어 많은 진전을 이루고 있습니다만, 과거 EMR system이 처음 구축될 당시에는 오늘 날의 빅데이터의 시대까지 내다볼 여력이 없었습니다. 따라서 대부분의 환자 데이터는 병원별로 구축된 적당한 양식으로  보관되었습니다. 어떤 환자의 의무 기록 사본은 손글씨로 작성되어, 적당히 스캔해서 이미지로 올라가 있기도 하고, 어떤 의무 기록은 다양한 데이터 필드에 문장을 서술하는 방식으로 기록되어 있습니다. 이러한 데이터 형식은 사람이 이해할 수는 있지만, 컴퓨터 친화적 (컴퓨터가 이해할 수 있는 데이터)이지 않은 형식입니다.

데이터 curation이 적당히 되어 있지 않기 때문에 이러한 데이터를 다시 활용하려면 결국 의학적 지식을 가진 전문가가 다시 수작업으로 데이터를 전처리 및 분류해야만 합니다. 무엇보다 가장 큰 문제는 그나마 가장 분류에 활용할 수 있는 진단 코드 또는 보험 청구 코드 마저도 다양한 현실적 문제에 영향을 받는다는 것입니다. 의학적으로 진단이 동일하더라도 진료 부서나 주치의, 환자의 경제적 상황 등등에 따라 진단 코드도 달라지게 됩니다. 또한 그나마 객관적이라고 보이는 진단 코드라고 하는 것도 모든 의학적 상태를 정확하게 반영하지 못합니다.

이러한 현실은 의료 빅데이터 저장소로 부터 과거의 관심있는 케이스들을 다시 불러 들여 연구에 활용하거나 서로 다른 기관의 데이터를 공유 또는 통합하고자 할 때, 데이터 전처리에 커다란 노력을 요구하는 큰 장벽으로 작용합니다.

 

shutterstock_143897611

II. 검체 검사 결과 – Lab data의 특성 및 한계

상대적으로 주관적이라고 할 수 있는 환자에 대한 주치의의 의무 기록에 비해, 혈액 검사 결과와 같은 데이터는 수치 결과로 되어 있어 상당히 객관적이고 활용하기 용이하다고 생각하기 쉽습니다. 사실 진단검사의학과 의사로서 빅데이터와 인공 지능에 대해 공부를 시작하게 된 것도 Lab 데이터의 이러한 특성 때문입니다. 그러나 상당히 객관적으로 생각되는 수치 데이터 또한 여전히 너무나 많은 문제들을 내재하고 있습니다.

그 중에 가장 큰 문제는 검체 검사 결과는 절대적 데이터가 아니라는 점입니다. 즉 같은 환자의 혈액을 가지고 검사를 하더라도, 어떤 회사의 장비를 이용하여 어떠한 원리로 검사를 하느냐에 따라 보고되는 검사 결과의 수치는 전부 제각각이며, 주치의는 검사 결과의 절대값으로 환자의 상태를 판단하는 것이 아니라 정상 참고 범위 (Reference range)를 기준으로 상승했는가 또는 하락했는가를 보고 환자를 본다는 점입니다. 그렇다면 이러한 정상 참고 범위를 기준으로 표준화한 값을 활용하면 되지 않겠는가? 라고 생각하기 쉽습니다만, 사실 모든 검사 항목에 대해 기관별로 정상 참고 범위를 설정하는 것은 현실적으로 어려운 점이 많기도 하고 가능하지 않은 경우도 많이 발생합니다.

또한 여전히 검사 기관별로 보고하는 결과의 단위도 제각각인 경우가 많으며, 같은 항목을 보는 검사 (e.g. 면역 관련 검사)에 대해서도 정성적 (Positive or Negative), 반정량적 (1:2, 1:16 등), 정량적 (152.4 와 같은 수치)으로 보고 방식이 상이하기도 합니다. 또한 검사 장비도 기계이기 때문에 검사 기법과 원리가 점점 발달하게 되는데, 가령 기계의 검사 방법이 ELISA에서 Chemiluminescence immunoassay로 바뀌면 보고되는 데이터 수치의 신뢰도 및 특성도 엄청나게 바뀌게 됩니다. 만약 수년간의 데이터를 모아서 연구에 활용하려고 하는데, 병원에서 중간에 검사 장비를 바꾸는 event가 있었다고 하면 데이터 수치에 엄청난 bias가 개입하게 됩니다. 사실 이러한 여러 가지 문제들은 진단검사의학과를 전공한 의사가 아니면 크게 중요하게 생각하지 않는 문제들이나, 개인적으로 이러한 lab data를 가지고 실제로 연구를 해보려고 하니 생각보다 이러한 요소가 결과에 너무도 크게 영향을 미친다는 사실을 느꼈습니다.

 

46155_1

III. 영상 검사 결과 활용의 어려운 점

사실 저는 영상의학과 의사가 아니기 때문에, 영상 데이터에 대해서는 전문가가 아닙니다. 따라서 이 부분은 간략하게만 언급하겠습니다. 영상 데이터는 그래도 많은 이미지가 표준화된 양식으로 되어 있기 때문에 가장 활용이 용이한 측면이 있습니다. 딥러닝과 같은 다양한 머신 러닝 기법들이 가장 먼저 적용되고 있는 분야도 영상이나 병리과의 이미지 판독이라는 것만 봐도 알 수 있습니다. 그러나 연구의 관점에서 보면, 이러한 기법을 위해서는 엄청나게 많은 수의 데이터가 필요하고 동시에 그 용량도 어마 어마하게 됩니다. 필연적으로 이러한 데이터를 처리하려면, 최신의 분석 기법과 동시에 컴퓨터의 연산 능력도 매우 크게 요구됩니다.

 

IV. 마치며…

사실 의료 정보 빅데이터라고 하면 정말 쉽게 병원 서버의 CDRS 시스템을 이용하여 양질의 데이터를 얻을 수 있을 줄 알았습니다. 그리고 그 많은 수의 데이터를 활용하여 데이터 전처리 및 가공을 하면 최신의 빅데이터 분석 기법을 활용할 수 있을 줄 알았습니다. 그러나 제가 연구를 직접 해보면서 느낀 것은 아직은 양질의 데이터 수집이 현실적으로 쉽지 않다는 것입니다. 진단명과 코드에 기반하여 10,000건이 넘는 케이스들을 모아보았지만 데이터의 퀄리티가 너무 떨어졌습니다. 의학적 관점에서 중요한 내용들은 많은 경우, 의무 기록 한켠에 다양한 의학적 term으로 서술되어 있었고  EHR 시스템의 진단 코드 데이터는 연구 수준으로 모두 신뢰하기 어려웠습니다. 물론 코드 기반의 데이터 추출을 활용하여 어느 정도 데이터 전처리는 가능했지만, 결국 최종적으로는 수작업으로 모든 환자의 의무기록을 리뷰하고 확인하는 과정이 필요했습니다.

사실 마지막으로 가장 중요한 점은 이러한 빅데이터 접근법을 활용한 연구를 하였을 때, 정말로 의미있는 결과를 도출할 수 있는가? 인 것 같습니다. 위에서 언급한 것과 같은 이유로 많이 편향되고 Noise가 포함된 의료 정보 데이터를 잘 활용하여 연구 결과를 도출 했을 때, 그것이 정말로 의학의 발전에 도움이 될 수 있는가?는 또 다른 문제이기 때문입니다.

아래는 제가 하루에 환자 2~30명의 케이스를 2~3시간 정도씩 리뷰하여 1,000여건의 케이스를 분류하여 작성한 논문입니다. 사실 처음 빅데이터에 대한 기대와는 다르게, 엄청나게 많은 노가다(?)가 요구되었고, 데이터 수집 및 정리 (Data curation)에만 6개월에 가까운, 많은 시간이 걸렸습니다. 마지막으로 위의 과정을 통해서 나온 저희 논문과 준비할 때 도움이 되었던 논문을 소개하며, 이번 포스팅은 여기서 마치도록 하겠습니다.

[Reference]

Yoon JG et al. Machine learning-based diagnosis for disseminated intravascular coagulation (DIC): Development, external validation, and comparison to scoring systems. PLoS ONE 13(5): e0195861

Rumsfeld, John S., Karen E. Joynt, and Thomas M. Maddox. “Big data analytics to improve cardiovascular care: promise and challenges.” Nature Reviews Cardiology 13.6 (2016): 350.