프로젝트 설명
2023.02.13 ~ 2023.02.19 동안 진행한 ML 프로젝트입니다. Playdata Encore에서 약 2주정도 ML에 대해 공부 후 진행한 프로젝트입니다.
1. 배경
CDC, 미국 질병관리위원회에서 2020년 40만 명의 성인을 대상으로 전화 설문을 통해 심장질환 유무를 수집
한 데이터를 캐글에서 발견하였다. 일단 이 데이터는 기본적으로 전처리가 되어있는 데이터였고, 데이터 수
집을 하는데에는 그렇게 큰 어려움은 없었다. 이 데이터를 활용해서 머신러닝 모델을 만들고, 이 모델을 활
용해서 일반인들이 쉽게 자신의 심장질환을 예측해 볼 수 있는 웹을 구현하기로 하였다.
데이터는 kaggle의 Personal Key Indicators of Heart Disease를 사용했으며 다양한 ML 기법을 적용해 보는 과정으로 진행되었다.
https://www.kaggle.com/datasets/kamilpytlak/personal-key-indicators-of-heart-disease
2. 팀원 및 역할
3. 목표
데이터를 가지고 심장질환을 예측하는 머신러닝을 모델링하고 정확도와 재현율을 목표한 수치만큼 올리는
과정을 통하여 이제까지 공부한 내용들을 정리하고 직접 경험한다. 그리고 만들어진 머신러닝 모델로 심장
질환을 예측할 수 있는 웹을 구현한다
4. 진행과정
1) EDA & 전처리
- 총 18개의 컬럼이 존재했고, 중복값을 제거한 후 319759행이 존재했다.
- 데이터가 잘 정제되어 있는 느낌이었기에 큰 전처리는 필요 없었다.
- 그중 4개가 수치형 칼럼이었고, 타겟 변수를 포함한 14개의 컬럼이 범주형 변수였다.
2) 시각화
나이에 따른 심장질환 환자 수
수치형 변수 상관관계 시각화
- 변수 간 유의미하다고 생각할만한 상관관계가 없었기 때문에 다중공선성에 대한 의심은 배제하고 데이터를 그대로 사용하였다.
3) 모델링
- 대부분의 알고 있는 ML 모델링을 사용한 정확도 그래프이다.
- 30만 개의 기존데이터, SMOTE 기법으로 처리하여 약 55만 개로 오버샘플링된 데이터 그리고 언더샘플링과
오버샘플링을 동시에 진행하는 SMOTEOMEK기법으로 처리하여 약 25만 개의 데이터로 샘플링된 3가지 데이
터를 각 모델에 넣고 비교를 해보았다 정확도 지표와 과적합 여부를 판단하고 가장 상위모델은 SMOTE를
적용한 catboost모델과 xgboost모델을 선정하였다 - 이 두 모델을 하이퍼파라미터 튜닝을 한 결과 catboost에서 test데이터의 정확도가 0.0032 정도 증가했고 재현율은 0.0086 증가하였다 xbgoost는 test 데이터의 정확도가 0.0093 증가했고 재현율은 0.0109 증가하였다
- 검증방식은 kfold검증을 사용하였다.
5. 결과
사용자 입력
예측값 기반 시각화 자료 출력
6. 느낀 점
- 우선 좋은 아이디어로 시작했으며, 데이터까지 준비되어 있어 좋았던 프로젝트였다. ML 학습 후 사용자에게 보여주는 내용을 어떻게 해야 할지 초기에 결정했다 보니 막힘없이 프로젝트가 진행된 느낌이다. 큰 프로젝트가 아니었기 때문에 문서작업은 따로 없었지만 팀원 모두가 프로세스에 대해 잘 이해하고, 의사소통도 잘 되어 수월했다.
- 우리는 사용자에게 우리 ML이 예측한 심장질환일 확률을 보여주고 0.5 이상의 값을 가지는 사람에게는 심장질환이라는 평가를 내렸다.
- 중간에는 0.5보다 더 높은 값을 심장질환으로 봐야 하는 게 아닐까 라는 고민도 들었지만 의학적 지식이 없는 팀이었기에 해당 판단은 보류하게 되었다.
- 또 중간에 떠올리게 된 아이디어로 흡연을 한다고 체크한 사람에게 흡연을 하지 않았다면 떨어지게 되는 심장질환 확률을 보여줌으로써 담배를 끊어야 한다는 동기부여를 준다는 아이디어가 좋았던 것 같다.
- 여러 시각화 자료를 준비하여 보여주면서 이러한 이유로 해당 변수가 심장질환에 영향을 주는 비중이 높다고 설명하는 과정이 굉장히 합리적이었다. 전처리 및 시각화 파트의 중요성을 알게 된 프로젝트였다.
- 웹구현에 대해서는 일절 참가하지 않았다. 파이썬 라이브러리인 streamlit을 사용하면 간단한 코드로 웹을 자동 구현해 주기 때문에 상욱님이 전담하여 해결했다. 이렇게 하면 좋지 않을까?라고 의견을 내면 이를 다 구현해 주었기에 프로그래머를 고용한 기분이 들었다.
- row 550000 , column 35의 50MB도 안 되는 작은 데이터지만 XGB , LGB, RandomForest, CatBoost의 하이퍼파라미터 튜닝을 돌리는데 너무 오랜 시간이 걸렸다. 자기 전에 돌리고 잤는데도 12시간이 지나서 google colab의 너무 오랜 시간 사용하지 않아 종료합니다 라는 문구가 떠있더라.
- google colab에서 제공하는 gpu옵션을 좀 더 탐구해 보고 사용할 수 있었다면 시간적인 면에서 여러 도전을 해볼 수 있었는데 아쉬웠다.
- 이번 작업을 통해 느낀 점은 나는 다른 사람의 코드를 읽어보는 걸 좋아한다는 것이다. 다만 내가 참여하지 않은 프로젝트는 해당 지식이 없어서 그런지 이해하기 어렵지만 이번 프로젝트 같은 경우 팀원들의 코드의 의도를 파악할 수 있어서 코드정리를 내가 맡아 처리하며 뿌듯함을 느꼈다.
'회고록' 카테고리의 다른 글
국비지원 Playdata Encore후기 (0) | 2023.07.03 |
---|---|
Django와 Spotify로 노래 추천 웹 개발 - 2 (0) | 2023.07.03 |
Django와 Spotify로 노래 추천 웹 개발 - 1 (0) | 2023.07.03 |
Music resting place 프로젝트 (0) | 2023.07.03 |
노인보호구역 지정을 위한 시각화 자료 제공 프로젝트 (0) | 2023.07.03 |