Develop

라인웍스에서는 Electronic Health Record (이하 EHR) 데이터를 이용하여 다양한 머신러닝 프로젝트를 진행하고 있습니다. 이번 글에서는 의료 인공지능 개발 프로젝트의 성능 개선을 위해 사용한 LightGBM 알고리즘과 수많은 Feature를 줄이기 위한 Feature Selection 방법을 소개합니다. 추가로, MDwalks EXI에서 선보였던 Deep Learning을 사용한 MIMIC-III 30일 이내 재입원 예측 모델(https://linewalks.com/archives/6142)과 LightGBM 사용 모델의 성능을 비교해보겠습니다. *이번 글은 라인웍스 여름 인턴 프로그램에 참여한 이서호님의 아이디어와 실험 내용을 바탕으로 작성되었습니다. 1. 들어가기 MIMIC-III 모델 구축에 사용한 데이터는 MIMIC-III 데이터베이스입니다. EHR 데이터 중 거의 유일하게 공개된 다년간의 중환자입원 기록으로, 46,520명 환자들의

라인웍스는  Electronic Health Record (전자의무기록, 이하 EHR) 데이터를 이용하여 다양한 데이터 분석, 머신러닝 프로젝트를 진행하고 있습니다. 두 편에 걸쳐 순차 패턴 마이닝(Sequential Pattern Mining)을 EHR에 적용하여 분석한 사례를 소개합니다. 지난 글(바로가기)에서는 EHR 데이터를 정제하는 방법에 대해 설명했습니다. 이번 글은 순차 패턴 마이닝을 간략히 설명하고 분석 결과를 소개합니다.  순차 패턴 마이닝이란? 순차 패턴 마이닝(sequential pattern mining)은 대량의 데이터에 숨겨진 “순차적 패턴”을 찾는 분석방법입니다. 연속하여 일어나는 패턴을 찾는데 유용한 방법으로, 커머스 분야에서 고객이 어떤 순서로 제품을 구매하는지 분석하는데 자주 활용합니다.  예를 들어 대형 슈퍼마켓에서 고객들의

라인웍스는  Electronic Health Record (전자의무기록, 이하 EHR) 데이터를 이용하여 다양한 데이터 분석, 머신러닝 프로젝트를 진행하고 있습니다. 이번 글에서는 순차 패턴 마이닝(Sequential Pattern Mining)을 EHR에 적용하여 분석한 사례를 소개합니다. “순차 패턴 마이닝” 분석은 다양한 산업 분야에서 활용하고 있으며 특히 온라인 커머스 분야가 적극적으로 활용하고 있습니다. 고객이 상품을 구매한 순서를 파악할 수 있다면, 다음에 구매할 상품을 예측해볼 수 있습니다. 예측한 상품의 광고나 쿠폰을 제공하여 고객이 추천한 상품을 구매하게 되면 이는 매출증가로 이어질 것입니다. 대량의 구매 기록에서 이런 정보를 찾아내는 방법이 순차 패턴 마이닝입니다.  라인웍스는

라인웍스에서는 Electronic Health Record (이하 EHR) 데이터를 이용하여 다양한 머신러닝 프로젝트를 진행하고 있습니다.  이번 글에서는 의료 인공지능 개발 프로젝트의 성능 개선을 위해 사용한 임베딩을 소개합니다. 또, MDwalks EXI에서 선보였던 MIMIC-III 30일 이내 재입원 예측 모델(https://linewalks.com/archives/6142)에 임베딩을 적용해 이를 적용하지 않았던 이전 모델과 성능을 비교해보았습니다. 이 글이 임베딩의 개념과 EHR 데이터에서 임베딩의 필요성을 이해하는데 도움이 되기를 바랍니다. 임베딩(Embedding)이란? 임베딩이란 범주형(Categorical) 자료를 연속형 벡터로 치환하는 것을 말합니다. 예를 들어 A, B, C, D라는 카테고리가 있다고 할 때, 이를 다음과 같이 변환하는 것입니다. 이 변환이 왜 필요할까요?

목차 배경 Electron 사용 배경 개발화면 구성 및 기능 시행착오 개발 후기 1. 배경 라인웍스에서는 의료 데이터를 활용한 다양한 머신러닝 프로젝트를 진행하고 있습니다. 머신러닝에는 사용하는 접근 방법에 따라 다양한 방법론들이 있지만, 이번 글에서 다루는 내용은 지도 학습(supervised learning)을 이용한 진단보조시스템(Clinical Decision Supporting System 이하 CDSS) 개발을 주로 설명하고 있습니다. 의료 데이터를 활용한 CDSS를 개발하는 경우에는 생각보다 많은 걸림돌이 있습니다. 그중 대표적인 것은 양질의 데이터를 확보하는 것입니다. 일반적으로 많이 알려지고 많은 팀들이 시도하는 문제들은 충분히 양질의 데이터셋이 공개(Kaggle, Amazon AWS 등등)되어있는 경우가 많습니다만, 그렇지 않은 문제들은 직접 데이터셋을 준비해야된다는

MIMIC-III 데이터베이스는 무료로 공개된 다년간의 중환자입원 기록으로, 다양한 의료정보 분석에 활용되고 있습니다.본 글은 Docker로 Postgres 설치하고 MIMIC-III 데이터베이스 세팅한 방법에 대해 작성한 글로서, Docker로 테스트용 데이터베이스를 설치하는 사례를 소개합니다.이 문서의 내용을 참조하였으며, 누구나 쉽게 mimic 데이터베이스를 설치할 수 있도록 정리하였습니다.MIMIC-III 데이터는 교육을 이수한 후에 접근이 가능합니다. 자세한 정보는 여기를 참고하세요. 1단계. mimic-code 리포지토리를 클론Workspace 폴더에 mimic-code 리포지토리를 클론합니다. git clone https://github.com/MIT-LCP/mimic-code 2단계. MIMIC-III 데이터를 얻기MIMIC csv 파일은 Workspace 폴더에 하위 폴더 ‘mimic’을 생성하고 mimic에 하위 폴더 ‘data’를 생성하고 이

라인웍스는 헬스케어 분야에서 대용량 데이터 처리 시스템을 기반으로 기계학습 엔진 및 시각화 기술 기반으로한 데이터 서비스를 개발하는 헬스케어 빅데이터 스타트업입니다. 의료 명세서 데이터 등 실제 데이터에 근거하여 질병과 의약품간의 연결성을 분석한 데이터베이스를 구축하고 있으며, 이를 통하여 의약품 개발 지표 등 기존에는 분석할 수 없었던 데이터를 생산하여 다양한 의료산업 생태계에 서비스를 제공하고 있습니다. 이 기술력을 인정받아 2016년 카이트 창업가 재단에서 엔젤투자, 올해 4월 카카오인베스트먼트로부터 19억원 규모의 투자를 유치하였고 계속해서 빠른 속도로 성장해가고 있습니다. 라인웍스 Tech 팀은 헬스케어 데이터 플랫폼을 만드는 것을 목표로

들어가며 이전 글에서 예방과 예측 중심으로 재편되는 의료산업에서 보건의료 빅데이터, 그 중에서도 의료명세서의 가치와 역할을 언급하였다. 그리고 건강보험심사평가원의 의료명세서(청구명세서)가 시간의 흐름에 따라 환자별 의료비용의 변화를 보여줄 수 있다는 점에 주목하였다. 이러한 배경에서, 우리는 의료명세서에서 시간 정보를 추출하여 유사한 패턴의 환자들 시계열 군집화를 적용하였다. 이 작업은 특정 질병의 의료비용 추산를 위한 탐색적 연구로서 의의가 있고, 시퀸스 분석을 적용한 의료행위 탐색으로 내용이 이어질 예정이다. 데이터셋 분석 대상은 연도별 담낭암 환자군, 즉 한국표준질병 사인분류에 따라 C23(담낭의 악성 신생물)으로 진단 받은 환자의 의료명세서이다. 의료명세서에 포함된 치료와

들어가며 평균 기대 수명이 늘어나면서 건강한 삶의 중요성이 강조되는 가운데, 보건의료 분야의 목적이 치료 중심에서 정밀, 예방, 예측 의료 중심으로 옮겨가고 있다. 보건의료 빅데이터는 이러한 의료산업 재편에 중요한 역할을 하고 있다. 보건의료 빅데이터의 대표적인 예로 전자건강기록(EHR), 임상 시험 데이터, 의료명세서가 있다. 우리는 이 글에서 의료명세서를 다양한 시각으로 조명할 것이다. 환자 개인의 부상 인구집단 기반의 의료가 개인에게 집중되기 시작하면서 보건의료 관계자, 제약사 등이 의료 서비스를 제공하는 방향에도 변화가 나타났다. 환자 개개인에 집중하며 전체적인 시각에서 의료 서비스를 개편하려는 움직임이 생겨났다. 예로는, 흑색종 환자마다 암의 진행

이전 포스팅 에 이어서 Python 에서 TAJO 를 사용하는데 필요한 몇 가지 사항을 정리해본다. Query 를 실행했다 그리고 이전 포스팅 마지막에 실행한 쿼리를 보자. query = "select * from table1" cur.execute(query) result = cur.fetchall() 결과를 python 에서 사용해보자. for each in result: print each[0] / each[1] 이런 경우 아래와 같은 Error 문구를 볼 수 있다. TypeError: unsupported operand type(s) for /: 'java.lang.Long' and 'java.lang.Long' 문제는 문제는 query 의 결과값이 숫자인 경우 아래와 같은 형식으로 리턴되기 때문이다. print type(each[2]) <class 'jpype._jclass.java.lang.Long'> 해결해보자 사실 해결책은 간단하다. 결국 TAJO 의 결과 값이 JDBC 를