월간 데이콘 코로나 데이터 시각화 AI 경진대회

분석시각화 | 정형 | 분석 | 코로나 | 정성평가

  • moneyIcon Prize : 250만원
  • 2,323명 마감

 

코로나19와의 전쟁에서 생명 구하기 - '사망'에 대한 insights 도출

2020.04.14 02:15 20,249 Views language

위의 visualisation에서 각 국가별 사망률과 회복률, 확인해보셨나요? 
COVID-19 데이터(출처: Johns Hopkins 대학)를 시각화해 국가별 사망과 회복의 차이를 한눈에 파악할 수 있도록 제작한 visualisation입니다.

위에서 벨기에를 찾아 보시면, 벨기에는 코로나19 확진자 수가 100명을 넘어간지 57일이 되는 5월 1일, 사망률이 15.71%에 이르며 위의 25개국 중 가장 높은 사망률을 보이고 있습니다. 벨기에는 코로나19 와의 전쟁에서 생명을 살리는데 실패했다고 봐야겠죠. 

그에 비해 확진자 수가 100명을 넘어선지 70일 이상이 지난 현재 한국의 사망률은 2.3%를 보이고 있습니다. 다른 국가에 비하면 분명 낮은 수치입니다. 하지만 확진자 수가 100명을 넘어선지 30일이 될 때까지 한국의 사망률은 1% 를 넘지 않았습니다. 무엇이 사망률을 높이는데 기여했을까요? 어떻게 해야 사망률을 줄이고 코로나19 와의 전쟁에서 생명을 구할 수 있었을까요? 비주얼라이징코리아의 이번 분석의 목적은 "생명을 살리는 insights 도출"입니다.

분석에 들어가기 앞서 먼저 비주얼라이징코리아(VisualisingKorea)를 소개합니다.

TABLEAU
Code
로그인이 필요합니다
0 / 1000
Universe
2020.04.21 20:54

훌륭한 인사이트 감사합니다!! 

Visualising Korea
2020.04.22 03:40

댓글 감사합니다! 단순 EDA 보다는 인사이트를 담으려는 의도였는데 알아봐주시니 무척 반갑습니다. 내용을 보완하고 새로운 비주얼라이제이션을 추가하는 중입니다. 업데이트된 내용으로 또 찾아뵙겠습니다 :D

김민수4263
2020.04.26 01:13

분석 결과 잘 보았습니다. 위에서 data 라는 객체를 만들고, 그 객체에 있는 환자들의 정보에 따라 클러스터링을 한것이지요? 첫번째와 두번째 그룹의 경우 나이의 분포가 어떻게 될지 궁금하네요. 왠지 나이가 많으신 분들이 많을거 같은데요. 즉 나이가 많고 많이 돌아다니는 그룹일것 같습니다.
한가지 의문이 들었던점은 사회성이 있고 자주 돌아다니는 사람이 증상 발현후 확진을 받기까지 시간이 오래걸린다는 것이었습니다. 이 사람들이 주변을 많이 돌아다니느라 자기 자신의 몸을 잘 살펴보지 못한 탓이었을까요? 아무튼 흥미로운 분석이었습니다.

Visualising Korea
2020.04.26 20:03

흥미롭게 보셨다니 저희도 기분이 참 좋네요 :) 먼저, Clustering 모델링에 활용한 데이터는 개인 단위의 데이터인PatientId와 PatientRoute입니다. 위 노트북의 data 객체는 모델의 input과 output을 합쳐 따로 저장해놓은 데이터셋이고, 시각화를 주로 보여줄 위의 노트북에 로드를 한 것입니다. 모델링의 전 과정(data cleaning, feature engineering, transformations and so forth)은 새 노트북에 정리해 따로 업로드할 예정입니다.  

Visualising Korea
2020.05.02 04:57

그리고 이동이 잦았던 유형에 대해 제시해주신 가정도 가능성이 있을 것 같습니다. 저희가 생각했던 가설은, 많이 돌아다닌 유형의 경우에 워낙 많은 곳을 방문했다보니 감염자 본인을 비롯, 감염자의 코로나19 감염 여부를 판단해 진단 검사를 권고하는 의료진 양쪽에서 감염 여부를 판단하기 어렵지 않았을까 생각했습니다. 

Visualising Korea
2020.04.26 20:09

3월 26까지는 바이러스에 노출되었던 장소와 다녀갔던 장소를 비교해보는 방식으로 바이러스의 노출 여부를 판단했습니다. 많은 곳을 돌아다녔던 확진자들은 워낙 많은 곳을 다녔기에 바이러스에 노출되었는지 판단하기 어려웠을 것입니다(예를들어서 지난주에 10군데의 카페를 갔던 사람은 언제 어느 카페에 있었는지 10군데 모두를 정확히 기억해 감염에 노출되었는지 판단하기가 쉽지 않을 것입니다). 마찬가지로 의료진도 감염자가 기억하는 장소들과 최근 감염 발생 장소를 정확히 연결짓기 어려워 진단 검사를 권고하기에도 어려움이 있었을 것입니다.

Visualising Korea
2020.04.26 20:09

그에 비하면, 지난 3월 26일 정부에서 확진자의 동선을 자동으로 파악하는 ‘역학조사시스템’을 도입하였습니다. 역학조사시스템이 도입되어 감염 위험이 있었을 사람들이 자동으로 파악되고 진단 검사를 받게 되었다면, 감염자 본인과 의료진이 감염 여부를 판단하면서 가졌던 ‘편견(bias)’를 줄이게 되지 않았을까요?

Visualising Korea
2020.04.26 20:09

특히 위 분석에서 모델링에 활용된 데이터는 역학조사시스템이 도입되기 전의 데이터입니다. (확진 날짜를 기준으로3월 28일까지 데이터가 존재하고, 특히 27일과 28일은 5케이스만 존재). 

Visualising Korea
2020.04.26 20:10

역학조사시스템이 도입된 3월 26일 이후의 데이터가 더 수집되어 시스템의 도입 전과 후를 나누어 확진자들의 행동 유형을 분석할 수 있다면, 위의 분석과는 다른 결과가 나올 수도 있을 것 같습니다.  만약 사회성이 높으면서 많이 돌아다닌 그룹의 진단 시간이 역학조사시스템 도입 전보다 짧아졌다면, 역학조사시스템이 확진받기까지의 시간을 줄이는데 효과를 보였다고 말할 수 있겠지요. 

Visualising Korea
2020.04.26 20:17

댓글을 여러번 달게 되어 가독성을 많이 해치네요 ㅠㅠ 댓글에 글자 제한이 있어 답변을 한 댓글에 달지 못했습니다. 마찬가지로 연령별 분포에 대한 답은 아래에 나누어 남겨두었습니다. 감사합니다!

Visualising Korea
2020.05.10 06:07

위의 역학조사시스템에 대한 추가 업데이트 입니다. 4월 30일에 업데이트된 데이터를 활용해 게시물을 업데이트하면서 답글에서 토론했던 역학조사시스템의 효과를 볼 수 있을까 기대해보았는데, 기존의 데이터를 제외하고 3월 26일 이후로 확진받은 확진자가 추가적으로 6명 밖에 되지 않아 비교 분석을 수행하지는 못했습니다. 

흥디
2021.09.09 12:16

삭제된 댓글입니다

Visualising Korea
2020.04.26 20:08

삭제된 댓글입니다

Visualising Korea
2020.04.27 01:40

질문해주신 유형별 연령 분포의 경우, 첫번째 유형의 고령층(50세 이상) 비율은 45%로 다른 유형보다/전체 표본의 고령층 비율(33%)보다 높기는 하지만 여전히 젊은층(50세 미만)의 비율이 대다수를 차지하기 때문에 나이가 많은 사람들의 그룹이라고 보기는 어려울 것 같습니다. 

Visualising Korea
2020.04.26 20:11

또한 두번째 유형의 고령층 비율은 35%로 세번째 유형(33%)과 큰 차이를 보이지 않았습니다. Clustering 모델이 행동적 요인들을 기반으로 설계되었기 때문에 비행동적 요인인 연령이 유형별 큰 차이를 나타내는 것은 아니라고 볼 수 있을 것 같습니다. 물론 이는 저희의 해석이지만 다르게 해석할 여지도 충분히 있다고 생각합니다. 다른 의견이 있으심 주저말고 알려주시면 감사하겠습니다. 

김민수4263
2020.04.27 00:11

아..그럼 사망을 했냐 안했냐 하는 state와 나이(age)는 클러스터링할때 반영하지 않았던 것인가요? 그런데 행동패턴으로만 저렇게 분류가 된다니 흥미롭네요. 나중에 전체코드를 보고싶네요 ㅎㅎ

Visualising Korea
2020.04.27 06:13

네 맞습니다 state와 나이는 clustering 모델에 반영되지 않았습니다 :) 모델링의 뒷이야기를 조금 하자면, Stage1보다 Stage2의 분석을 먼저 수행하였는데 분석 결과 고령층의 사망 위험이 나이에만 있는 것이 아님이 밝혀졌습니다. 이에 따라서 나이, 성별, 질병 유무와 같은 생물학적/인구학적 요인보다 확진 받는데 걸리는 시간을 포함, 행동 특성들에 초점을 맞춤 Stage1을 개발하게 되었습니다.

Visualising Korea
2020.04.27 06:14

행동 유형별로 행동의 연유를 파악할 수 있는 데이터가 좀더 수집되었더라면 더 깊게 들어갈 수 있었을텐데 데이터의 한계가 아쉬움으로 남습니다 :) 모델링의 전체 코드를 담아 또 찾아뵙겠습니다!

cydra
2020.04.26 21:36

재미있는 분석 잘 보았습니다.  k-means clustering 의 경우 cluster의 수를 결정하신 과정이 궁금하네요. 또한 숫자가 아닌 범주형 변수들이 포함되어 있어 거리계산시 어떤 방법으로 처리하셨는지도 궁금합니다. 그리고 random forest 알고리즘 이름처럼 random이라... 매실행시마다 feature에 대한 중요도가 달라지는 경우가 있더라구요...혹시 이번에 진행하신 분석에서는 그러한 경우는없으셨는지 궁금합니다. 감사합니다.

Visualising Korea
2020.04.27 06:08

질문 감사합니다! 먼저 답글에 글자 제한이 있어서 답글을 여러개로 나누게 되었다는 점 양해 부탁드립니다. Cluster의 수는 cluster의 개수별 sum of squared error를 활용하여 에러의 감소 폭이 더이상 큰폭으로 줄어들지 않는 개수인 4를 optimal number of cluster로 삼았습니다. 범주형 변수는 encoder를 활용해 numeric 변수로 변환하여 모델링에 활용하였습니다.

Visualising Korea
2020.04.27 18:40

위의 노트북은 가독성을 위해 분석 결과와 시각화를 중심으로 담아 모델링의 과정이 생략되어 있습니다만, optimal number of cluster와 feature engineering 등을 포함해 모델링의 전 과정을 담은 노트북을 따로 업로드할 예정입니다. 모델링의 전과정을 보시면 더욱 이해가 빠르실겁니다 :)

Visualising Korea
2020.04.27 06:09

마지막으로 random forest의 random은 분석 결과가 random으로 나오기 때문이 아니라 random forest 의 모태가 되는 decision tree를 랜덤으로 활용하면서 정확성을 높인다는데서 유래하는 것으로 알고있습니다(다른 의견이 있으면 다시 댓글 부탁드립니다!). 

Visualising Korea
2020.04.27 06:15

하지만 이와는 별개로 질문 주신 분석 결과의 variations에 관해서 답변을 드리자면, 일반적으로 분석 결과에 variations 이 있을 가능성은 충분히 있으며 그에 대한 해결 방안은 알고리즘, 모델링으로 분석하고자 하는 것 등에 따라 달라질 것입니다.

Visualising Korea
2020.04.27 15:29

이번 분석의 경우에는 결과의 중요도에 variations 문제가 나타나지 않았습니다. 위의 차트를 보시면 나이의 중요도가 두번째로 중요한 요인보다 세 배 이상 차이가 나는 것을 볼 수 있습니다. 이 정도의 중요도를 갖는다면 아무리 결과에 variation이 나타날 수 있다고 한들, 결과가 확연하게 뒤바뀔 가능성은 매우 적다고 할 수 있습니다. 모쪼록 답변이 되었길 바라며 궁금한게 있으시면 또 남겨주세요. 감사합니다 :)

a낙타a
2020.04.27 16:52

굉장히 흥미로운 결과네요, 높은 연령일수록 사망률이 높은건 알고 있었는데, 단순히 면역력뿐만아니라 확진을 받는데까지 걸린시간도 중요하다니...
연령이 많고 이동이 활발한 인원은 그 자체로 고위험군 감염자니 우선적인 검사진행 및 격리 하는것도 좋은 방법 이겠네요.

Visualising Korea
2020.04.28 04:52

댓글 감사합니다! 확진을 빨리 받을수록 전문적인 치료와 관리가 하루빨리 행해질 수 있고 결과적으로 고위험군의 생명을 살리는데 도움이 될 것입니다. 데이터가 좀더 수집되어서 진단이 늦게 이루어지는 집단의 원인을 파악할 수 있다면 해당 집단을 대상으로 하는 정책도 설계할 수 있을 거구요 :) 

dodou
2020.04.27 21:27

시각화를 떠나서 인사이트를 도출해내는 능력이 뛰어나신 것 같습니다. 많은 도움이 될 것 같네요.

Visualising Korea
2020.04.28 16:05

감사합니다! 경진대회에서 수상하는 것 만큼이나 고마운 댓글이네요 :D 사실 경진대회 참가는 이번이 처음이지만, 한국 사회/경제/문화 현상에 대한 데이터 분석과 시각화를 발행하는 VisualisingKorea를 운영하고 있습니다. 여러 주제들을 포괄하고 있으니 거기서도 재미있는 주제들을 많이 찾으셨으면 좋겠네요. 의견 교환은 언제든 환영입니다! 

자는게참좋아
2020.04.27 21:59

확진자를 행동유형에 따라 분류한 점이 인상깊었습니다.
연령과 다른 요인들에 대한 분석도 재미있게 봐서 다음 업데이트도 기대가 되네요.
전체 코드도 공개되면 보고 싶습니다.

Visualising Korea
2020.04.28 05:03

감사합니다! 재밌게 보셨다니 저희도 기분이 좋네요 :) 모델링의 전과정을 정리해서 따로 업로드할 예정입니다. 마음은 최대한 빨리 올리고 싶은데 현업 때문에 시간을 찾기가 쉽지는 않네요 ㅠㅠ 전체 코드를 담아 또 찾아뵙겠습니다! 

WannaBeGosu
2020.04.27 22:51

Insight가 논리적이네요~

Visualising Korea
2020.04.28 05:09

이야기 구조에도 많은 신경을 썼는데 잘 전달된 것 같아 다행이네요 :) 댓글 감사합니다! 

부지런개굴이
2020.04.28 11:18

정말 훌륭한 인사이트입니다!~~ 두번째 토픽에 사망 probability를 결정하는 요인에 대해 궁금한 점이 있어 댓글을 남겨요~
나이, 질병, 지역, 성별 순의 결과를 도출하셨는데 PatientInfo data에는 질병(disease) 유무에 대한 nan값이 거의 대다수 인데 이 부분 처리를 어떻게 하셔서 모델을 돌리신 건가요??

Visualising Korea
2020.04.30 14:49

안녕하세요 이번주에 시간을 내기가 어려워서 답변이 늦어졌네요 죄송합니다. 질문 감사합니다! Disease 결측치의 처리 과정은 이번 분석에서 흥미롭게 다룬 부분 중 하나였기 때문에 의미있는 질문이었다고 생각합니다. 답변에 글자 제한이 있어서 여러개로 나누어 다는 점 양해 부탁드리겠습니다 :) 아래에 따로 답글을 달았습니다. 시스템상 여기에 연결해 달을 수가 없네요ㅠㅠ

Visualising Korea
2020.04.30 08:21

먼저 데이콘의 데이터셋 설명("https://dacon.io/competitions/official/235590/codeshare/799")에 따르면 disease는True/False를 갖는 Boolean 변수 입니다. 하지만 실제로 데이터셋을 보면, False의 값이 존재하지 않습니다. True/nan만으로 구성되어있죠. 따라서 nan이 사실은 False를 의미하는 것이라고 볼 수도 있을 겁니다. 하지만 물론 확신할 수는 없습니다. 또한 nan 중에 실제로 True가 있을 가능성도 있습니다.

Visualising Korea
2020.04.30 08:22

nan이 의미하는 바가 불명확하기 때문에 다음과 같은 과정을 거쳐 nan의 값을 상정하였습니다. (아래 과정은 분석 대상에 포함된 사망자/회복자 대상이며, 현재 격리 중 확진자는 분석 대상에 포함되지 않았습니다).

Visualising Korea
2020.04.30 08:22

1. 회복을 했다면, 기저질환이 없었을 가능성이 높습니다. 조사한 바에 따르면 기저질환을 가진 사람들은 사망할 확률이 높고, 데이터셋에서도 질병의 True값을 가진 확진자들은 모두 사망한 것으로 나타납니다. 회복한 사람들이 기저질환을 가지고 있었을 확률은 매우 낮고, 따라서 이들에게는 False의 값을 상정합니다.

Visualising Korea
2020.04.30 08:23

2. 사망한 확진자들 중, 70세 이상에도 False의 값을 상정합니다. 만약 70세 이상이 기저질환을 보유하고 있다면 연령과 관련이 있을 가능성이 높습니다. 사실 disease의 모든 값이 올바르게 주어져 70세 이상의 확진자들이 True값을 가졌다고 하더라도 이를 그대로 사용한다면 문제가 될 수 있습니다.  이들이 사망한 원인은 질병 그 자체라기보다 노환으로 인한 질병일 가능성이 높기 때문입니다. 따라서70세 이상의 확진자들에게는 False값을 부여해 나이와 연관되는 질병의 효과를 상쇄합니다.  

Visualising Korea
2020.04.30 08:23

3. 70세 미만이지만 사망한 사람들은 상대적으로 젊은 나이에 사망하였고, 연령이 사망의 주요 원인일 가능성이 적습니다. 특히 나이가 젊은데도 사망하였다는 것은 나이보다 기저질환이 영향을 미쳤을 가능성이 더 높습니다. 따라서 70세 미만의 사망자들에게는 True의 값을 상정합니다. 

Visualising Korea
2020.04.30 08:24

물론 5-60대를 노년층으로 볼 수도 있고 70대 이상과 마찬가지로 5-60대의 사망 원인에 질병보다 나이가 더 중요했다고 볼 수도 있습니다. 또는 5-60대 중에 질병이 없었는데도 사망한 경우가 있었을 수도 있습니다. 이러한 가능성에 근거해 5-60대에게도 False를 상정해 보았으나 모델의 분석 결과는 차이를 보이지 않았습니다.

Visualising Korea
2020.04.30 08:24

Disease의 결측치를 다루면서 가장 중요하게 생각했던 점은 Disease와 나이와의 관계였습니다. 물론 정답이라고 할 수는 없습니다. 결측치를 처리하는 방법에 어떤 정답이 있는 것은 아니니까요. 혹시 다른 의견이 있으시거나 더 좋은 의견이 있으시면 또 댓글 남겨주시면 감사하겠습니다 :)

부지런개굴이
2020.04.30 09:39

탄탄한 분석에 대한 근거네요! 저희팀도 이번 분석에 사망자에 대해 분석을 진행하였는데 질병유무에 대해 명확한 판단을 내릴 수 없어 연구 논문을 참고하며 분석을 진행하였습니다. 말씀하신 근거에 다시 한번 사망자에 대한 원인을 생각하게 되었습니다. 성실하게 답변해 주셔서 감사드려요~~

김웅곤
2020.05.19 16:07

탁월한 분석에 감동받았습니다. 많은 참고 하도록 하겠습니다^^

Visualising Korea
2020.05.26 00:30

무척이나 의미있는 댓글이네요! 감사합니다 :) 저희 페이스북 페이지(https://www.facebook.com/visualisingkorea)나 트위터(https://twitter.com/visualisingkor)를 팔로우하시면 최신 분석 기사들을 업데이트하실 수 있습니다. 경진대회도 마무리되었으니, 앞으로 더욱 재미있는 분석 기사들로 찾아뵙겠습니다 ^^

블메소리
2020.07.18 15:13

좋은 Insight네요! 잘 읽었습니다. 보면서 많이 배울 수 있어서 감사했습니다 ㅎㅎ

Visualising Korea
2020.10.27 00:43

좋은 댓글 감사합니다! :) 

서유나비
2020.10.27 00:36

내용 너무 흥미있게 봤어요~ 혹시 코드 샘플이랑 주제 적절히 학생 교육자료로 활용해도 괜찮을까요?

Visualising Korea
2020.10.27 00:55

안녕하세요, 리플만으로는 정보가 조금 부족한데 저희 이메일(insights@visualisingkorea.com)로 자세히 문의 주시면 감사하겠습니다.