난.그.댄 독자 여러분 안녕하세요? 오랜만에 뵈니 무척 반갑습니다.
지난번에 ‘0부터 시작하는 플랏’ 편이 여러분에게 뭔가 도움이 됐길 빕니다.
이번에 다루는 플랏은 한국 교과과정에선 보지 못했던 것입니다. 제 기억에는 대학교에서 기초통계를 배울 때 처음 봤던 것 같은 플랏입니다. 흔히, 박스플랏 (box plot)이라 하는 것이죠. 박스플랏은 실험 반복수나 그룹 내 샘플 수가 못해도 5개 정도는 될 때 많이 사용됩니다.
비록 교과과정에서는 다뤄지지 않지만, 이 플랏은 사실 상당히 흔히 볼 수 있습니다. 예를 들어, 주식이나 코인에 관심이 있으신 분들은 봉 차트가 박스플랏들이 사용된 것임을 단번에 아실 수 있을 겁니다.
주식 봉 차트. 빨간색은 주가 상승, 파란색은 주가 하락을 의미함.
박스플랏은 기본적으로 그 이름대로 상자 (box)가 일반적으로 사용됩니다.
박스플랏의 일반적인 형태
박스플랏은 요소가 기본적으로 5개가 표현됩니다. 먼저 자료를 값이 작은 것부터 큰 것까지 나열을 한 후에 25% 지점 (Q1), 50% 지점 (Q2, median 또는 중앙값), 75% 지점이 되는 부분 (Q3)이 상자를 구성합니다. 이때 Q2 지점은 위의 그림과 같이 두꺼운 선으로 표현이 됩니다.
이후에 수염 (Whisker)라는 부분이 각각 Q1과 Q3의 바깥쪽에 구성됩니다. 이것들은 이상 값으로 판단되지 않는 자료값의 최소와 최대치가 어디에 있는지를 보여줍니다. 이상 값의 판단 여부는 기본적으로 Q1과 Q3로부터 Inter Quartile Range (IQR) 1.5 배 내에 있는지 여부를 판단합니다. 그리고 이상 값들은 점으로 표현을 하죠.
기본적인 형태의 박스플랏의 예시. [출처 1]
그런데, 위의 예시와 같은 경우 다수의 샘플들이 어떻게 존재하는지 모르는 경우가 발생합니다. 마치 바그래프 때처럼 분포를 보여주긴 하지만 왜곡될 가능성이 생기는 것이죠. 이를 방지하기 위해 몇몇 저널들에서는 데이터 관측치를 박스플랏과 함께 명시하라고 요구를 합니다.
박스플랏에 관측 값을 표기한 예시 [출처 2-4]
관측 값을 표시한 d와 c 패널의 경우 지터플랏 (jittter plot)을 박스플랏에 입힌 형태입니다. 반면 a 패널과 같이 상자는 제외하고 오로지 점과 선으로만 표기한 것이 있는데 이는 swarm plot (군단 플랏)이라고 합니다. swam plot의 경우 무시할 만한 작은 왜곡이 생긴다고 알려져 있지만, 어느 쪽이든 기본적인 형태보다는 분포를 잘 보여줄 수 있습니다.
박스플랏+지터플랏 혹은 스왐 플랏 모두 데이터의 분포를 표현하기에 무척 좋은 방식이지만, 단점도 있습니다. 이미지 작업을 위해선 컴퓨터 메모리가 무척 많이 듭니다. 논문화를 위해 일러스트레이터에 플랏들을 불러와서 벡터 그래픽 작업을 하게 되면 점 한 개는 메모리를 잡아먹는 성가신 존재가 됩니다. 종종 논문을 다운 받아서 PDF 파일을 열었을 때 그림이 천천히 로딩되는 현상이 있었을 겁니다. 그런 것이 표현된 관측 값이 너무 많을 때 생기는 문제입니다.
초보 때, 논문 작업하다가 메모리가 부족하다고 강제 종료되서 작업물이 몽땅 날아갈 땐 무척 가슴이 아팠습니다. 이럴 때, 사용할 수 있는 것은 바이올린 플랏 (violin plot)입니다.
바이올린 플랏의 예 [출처 3]
바이올린 플랏은 관측치 분포를 커널 밀도 측정 (Kernel Density Estimator, KDE)로 부드럽게 표현한 것이 특징입니다. 위의 예시의 경우 하얀색 공은 Q2를 의미하고 검은색 박스는 앞의 것과 동일합니다. 관측치가 몰려있는 곳은 퉁퉁하게 불어나있고 관측치 값이 별로 없는 곳은 잘록하게 표현합니다. 이를 통해 데이터의 분포를 알 수 있게 됩니다.
물론 이것도 만능은 아닙니다. 샘플의 수가 적을 때는 기괴한 형태가 나올 수 있기 때문입니다. 개인적으로는 자신의 컴퓨터 사양에서 문제가 없는 범위에서 먼저 박스플랏+지터플랏을 그려보고 데이터의 분포가 적절히 표현이 안 되는 것 같다는 느낌이 들 때 바이올린 플랏을 그려보는 게 현명하다고 생각합니다. 느낌이라는 부분은 경험적인 부분이고 데이터 분포가 달라 말로 표현하기 어렵습니다. 다만, 조금 더 구체적으로 말하자면 관측 값들이 한쪽에 너무 쏠려있을 경우 점들이 겹쳐 보일 수 있기 때문에 이때는 바이올린 플랏이 나을 수 있습니다.
마지막으로 시계열 짝 샘플 (pair sample)들이 늘어나면서 최근 1~2년 전부터 부쩍 많이 나오는 박스플랏이 있습니다.
딥러닝 모델을 통해 KRAS 돌연변이 여부에 따라 MAP3K7의 의존성을 예측한 플랏 [출처 5]
짝을 이루는 샘플의 경우 위와 같이 선을 연결해서 표현하면 데이터의 분포뿐만 아니라 개별 샘플의 변화도 대략적으로 파악할 수 있게 됩니다. 물론, 항상 메모리는 주의하셔야 합니다.
이번 시간에도 파이썬으로 하는 실습을 실제 논문 데이터로 준비했습니다. 자세한 지시사항은 코랩의 노트북을 확인해 주시기 바랍니다.
질문이나 의견이 있으신 분은 댓글이나 제 이메일로 부탁드립니다.
agicic[at]naver.com
노트북
https://colab.research.google.com/drive/1vsYksL_dTcutf5RygTCSC1gLAQmDDheE?usp=sharing
출처
[1] 10.1038/s41467-021-24112-w
[2] 10.1038/s41586-020-2969-2
[3] 10.1038/s41467-020-17139-y
[4] 10.1038/ncomms14357
[5] DOI: 10.1126/sciadv.abh1275