Code Monkey home page Code Monkey logo

prediction-of-cardiovascular-disease-incidence-using-machine-learning's Introduction

머신러닝을 활용한 심뇌혈관질환자 발생 예측

2022 날씨 빅데이터 콘테스트 출품 당시 리더보드 1위를 달성한 프로젝트입니다.

Overview

  1. 주요 기술: ML/통계분석 기반 예측모델 개발
  2. Languages & Tools: HiveQL, R, Python, Tableau, Git, Notion
  3. 역할: 데이터 정의, DB 데이터 추출, EDA, 전처리, 피처 엔지니어링, 모델 개발
  4. 주요 내용
  • HiveQL 쿼리문 학습을 통한 날씨 마루 DB 기상데이터 및 오픈데이터 수집 (대상 기간: 총 5년)
  • 전국 단위 예보데이터 중간 행마다 header와 맞지 않는 값 기간 및 지역별 루프문 완성으로 전처리
  1. 주요 결과 및 배운점
  • 오차값 1.2 앙상블 모델 해석으로 혈관질환자 발생의 지역별 특성 발견
  • 정규표현식을 통한 데이터 단순화 중요성 학습

개요

  • 배경
    • ADP 실기시험을 공부하며 시계열에 대해 부족함을 느꼈으며
    • 앞으로 다루게 될 시계열 데이터에 대한 경험을 더 쌓아보며 지금까지 배웠던 것을 정리해서 적용해 보고자 도전했다.

문제 재정의

  • 심뇌혈관계질환과 기상 요인의 관계를 밝히는 선행연구의 결과는 일관적이지 않았다.
    • 미세먼지가 질환에 영향을 미친다는 결과와 그렇지 않다는 결과가 있었다.
    • 대부분의 연구는 고온 보다 저온(겨울, 12-2월)으로 인한 영향이 더 큰 것으로 설명했다.
    • 그러나 미세먼지는 평균적으로 겨울 보다는 (3-5월)에 더 유행한다.
    • 환경부는 겨울철 미세먼지 지수가 양호했던 주요 원인을 따뜻한 기온으로 발표했다.
  • 이에 제공된 데이터 외에 오픈 데이터를 결합해 만든 모델로 입원자 수와 관련된 새로운 인사이트를 제시하는 것을 목표로 한다.

과정

1️⃣ 문제점

  • HiveQL 사용 경험이 없었기에, 날씨 마루 DB의 기상 데이터 수집부터 관건이었다. 이에 DataCamp의 SQL 코스 수료 후 쿼리를 짜서 기상 데이터를 추출했다.
  • 기상 데이터의 관측 지점 특성상 지역성을 대표하기 어려운 데이터가 있었다.
    • 약 25%만 관측된 데이터, 섬(울릉도, 흑산도 등)에서 관측된 데이터는 지역의 특성을 반영하기 보다는 오히려 모델 성능을 저해할 수 있다고 판단하여 삭제했다.
    • 광주, 세종은 지점에 해당하는 데이터가 존재하지 않았기에 해당 지역의 특성을 고려하여 적절한 주변 지역을 3개 선정해 평균값으로 대체했다.
  • 기상 데이터는 이상기상과 같은 현상을 고려해야 했기 때문에 결측치 처리에 대한 논리를 세우기 어려웠다. IQR을 기준으로 처리하면 데이터의 손실이 발생할 수 있다고 판단했기 때문이다.
    • 일부는 선행 연구에 근거하여 관측 자료 물리 한계 검사 기준으로 결측치로 처리했다.
    • 일부는 도메인에 근거하여 상식적인 수준으로 결측치로 처리했다. 예를 들어, 강수 테이블에서 합계 강수량 값이 0으로 관측되었지만 합계 강수 계속 시간의 값이 0이 아닌 경우는 결측치로 처리했다.
    • 일부는 3시그마 규칙에 근거하여 결측치로 처리했다.
  • 기상 데이터는 관측된 값이기 때문에 결측치 대체에 대한 타당한 논리가 필요했다. 이에 선행 연구에 근거하여 kalman filter 알고리즘을 지역별로 적용하여 대체했다.
  • 기상 요인과 관련된 새로운 인사이트를 제시하는 것이 목표였기에, 기상 데이터에서 다양한 파생변수를 생성했다.
    • 선행 연구의 계절성에 대한 결과와 비교해보고자 년, 월, 일, 계절 변수를 파싱했다.
    • EDA 결과를 반영하기 위해 월별평균온도, 일평균체감온도, 일교차 변수를 생성했다.
    • 풍향은 코드에 맞지 않는 값이 있어 이를 적절히 반영하여 8방위 풍향 변수를 생성했다.
    • 선행 연구에 없었던 요인을 반영해 보고자 강수유무, 적설유무 변수를 생성했다.
  • 예보 데이터는 중간 행마다 header와 맞지 않는 값, 중복된 값이 있어 전처리에 소요되는 시간이 부담되었다. 이에 유사 프로젝트의 코드를 서칭해 수정함으로써 기간 및 지역 별로 loop문을 완성해 시간을 절약했다.
    • 발표시간유효시간의 단위가 매핑되는 3시간기온, 습도, 하늘상태, 강수형태를 변수로 선택했다. 그 중, 활동량이 높은 시간대인 14시 값, 지연 효과를 반영하기 위해 23시간 후의 값을 선택하여 지역별 평균값을 사용했다.
  • 도시대기 데이터는 선행연구를 근거로 0.999 퀀타일을 초과하는 값을 이상치로 처리했다. 그 중 세종시의 경우 결측치가 다수 있었기에, 행정구역에 근거하여 충남의 값으로 대체했다.

2️⃣ 성과

  • RMSE 값이 0.595모델 도출로 리더보드 1위를 달성하였으며, 일반화 가능한 오차값 1.2 앙상블 모델을 최종 도출하였다.
  • 입원자 수는 기상 요인보다 지역별 특성이 더 큰 영향력을 미치는 것을 발견했다.
    • 모델 해석으로 나온 중요 변수는 현지기압, 해면기압, 지면온도, 풍속과 관련 있었으며, 이는 한반도 지리의 특징을 뒷받침하는 요소였다.
  • 미세먼지는 큰 영향을 미치지 않았고, 오히려 이산화 질소의 영향력이 더 높은 것을 발견했다.
  • 결과를 바탕으로, 지역별 맞춤형 정책이 필요함을 제언했다.

배운점

  • 데이터 추출 전, 필요한 데이터를 명확히 정의하는 것이 선행되어야 한다.
  • 데이터를 추출할 때, 정제 및 가공 시간을 단축할 수 있는 정규 표현식을 활용할 수 있어야 한다. 이후에는 더 연습하여 시간을 절감해 다른 단계에서 쓸 수 있는 시간을 확보하고자 한다.
  • 프로젝트 계획 단계에서 보고서 작성 부분에 많은 시간을 확보해 놓아야 한다. 이후에는 보고서 작성에 더 많은 시간을 쓰고자 한다.
  • 계획 변경이 필요한 시점에서는 과감하게 변경하고, 처음 계획에 매몰되지 않고 새로운 방향성을 제시하는 것도 필요하다.
  • 모델 성능 향상을 위한 여러 시도를 위해서는 버전 관리가 중요하다. 이후에는 체크포인트가 아닌 리스트로 관리해 보고자 한다.

prediction-of-cardiovascular-disease-incidence-using-machine-learning's People

Contributors

miny0ungkim avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.