고령화 시대의 의료 불균형 해소를 위한 치매 진단 파이프라인 구축
-Kim Oh Choi-
퇴행성 질환인 치매 관련 AI 기술의 필요성을 탐색하고 비정형, 정형 데이터를 통해 치매의 위험 인자를 탐색, 예측, 판단 할 수 있는 모델을 개발한다.
라이프로그 데이터 : 웨어러블 기기를 통해 수집한 정형 데이터로 치매 위험 인자를 판별하고 M.L / D.L 모델을 통해 경도 인지 장애 단계를 조기에 예측한다.
비정형 데이터(MRI) : 영상 이미지 데이터를 통해 치매를 판단한다.
1-2. 주제 선정의 배경
👵🏼 치매 유병률 증가와 가속화되는 의료 불균형
고령화 : 고령화에 따른 치매 유병률은 기하급수적으로 늘어나는데, 의료 불균형은 가속화 되고 있다. 의료인력 부족 문제가 지방에서는 이미 발생하고 있으며, 이런 추세라면 의료 공백 문제가 더욱 심화될 것이다.
의료산업 : 의료 인력을 도울 수 있고 효율성을 향상시키는 'AI(인공지능)'를 활용한 의료기술 산업은 성장성이 높고 낮음을 떠나서 '반드시 성장해야 하는 분야'라고 생각한다. 실제로 구글이나 애플, 아마존과 같은 글로벌 선도기업들도 관련 분야에 엄청난 투자를 쏟고 있다.
# 데이터 : OASIS-2 데이터셋 중 인구통계학적 정보
# 형식 : xlsx
df_demographic = pd.read_excel('../OASIS-2 dataset/demographics.xlsx')
display(df_demographic.head(5))
df_demographic.shape
# 데이터 : OASIS-2 데이터셋 중 MRI 이미지 정보
# 형식 : nifti.img
data_dir = '../OASIS-2 dataset/'
img_paths = sorted(glob(os.path.join(data_dir, '**/*.nifti.img'), recursive=True))
imgs = []
for img_path in img_paths:
try:
img_arr = nib.load(img_path).get_fdata()
imgs.append(img_arr)
except Exception as e:
print(f"{img_path} : {e}")
# 3차원 이미지(영상)이기 때문에 127개 차원 중 원하는 영역만 불러오기
fig, axes = plt.subplots(1, 5, figsize=(30, 5))
for i in range(5):
axes[i].imshow(imgs[i][:, :, 60]);
print(len(imgs))
3-2. 활용 라이브러리 등 기술적 요소
pandas
Pandas는 데이터 분석 및 조작에 사용되는 Python 라이브러리입니다. 1차원 데이터와 2차원 데이터를 각각 처리하기 위한 Series와 DataFrame과 같은 데이터 구조를 제공합니다. Pandas는 또한 누락된 데이터, 데이터 시각화 및 다양한 파일 형식의 입력/출력을 처리하는 방법을 제공합니다.
numpy
NumPy는 수치 계산에 사용되는 Python 라이브러리입니다. 대규모 다차원 배열 및 행렬에 대한 지원과 이러한 배열에서 작동하는 광범위한 수학적 함수를 제공합니다. NumPy는 과학 컴퓨팅, 데이터 분석 및 기계 학습 애플리케이션에 널리 사용됩니다.
matplotlib
. Matplotlib는 다양한 플로팅 방법과 사용자 지정 옵션을 제공하는 Python의 포괄적인 데이터 시각화 라이브러리입니다.
seaborn
Seaborn은 Matplotlib를 기반으로 하는 Python 데이터 시각화 라이브러리로, 유익하고 매력적인 통계 그래픽을 만들기 위한 고급 인터페이스를 제공합니다.
Seaborn은 또한 Matplotlib과 함께 사용하여 Matplotlib이 제공하는 그래프 기능을 보완할 수 있습니다.
plotly
Plotly는 사용자가 대화형 및 공유 가능한 플롯, 차트 및 대시보드를 만들 수 있는 웹 기반 데이터 시각화 라이브러리입니다.
sklearn
Scikit-learn(sklearn)은 분류, 회귀, 클러스터링 및 차원 감소를 포함하여 데이터 마이닝 및 분석을 위한 도구를 제공하는 기계 학습용 Python 라이브러리입니다.
tensorflow
TensorFlow는 Google에서 개발한 수치 계산 및 대규모 기계 학습을 위한 강력한 오픈 소스 소프트웨어 라이브러리입니다. 다양한 플랫폼과 장치에서 심층 신경망을 포함한 기계 학습 모델을 구축하고 교육하기 위한 도구를 제공합니다.
streamlit
Streamlit은 데이터 과학 및 기계 학습 프로젝트를 위한 맞춤형 웹 애플리케이션을 구축하는 데 사용되는 Python 라이브러리입니다. 이를 통해 개발자는 HTML, CSS 또는 JavaScript에 대한 지식 없이도 간단한 Python 스크립트를 사용하여 대화형 데이터 앱을 빠르게 만들고 배포할 수 있습니다.
networkx
NetworkX는 파이썬에서 복잡한 그래프 및 네트워크를 다루는 데 사용되는 라이브러리입니다. 그래프 객체를 만들고 Node와 Edge를 추가하는 도구뿐만 아니라, 연결성, 중심성, 최단 경로 길이와 같은 다양한 메트릭을 계산하는 기능을 제공합니다.
정형 데이터 모델
LogisticRegression
로지스틱 회귀분석은 데이터 집합의 관측된 개별 결과가 양성 또는 음성인 두 가지 결과 중 하나일 때, 독립 변수와 종속 변수 간의 관계를 모델링하는 데 사용됩니다.
DecisionTreeClassifier
의사결정나무 분류기는 입력 변수에 대한 결정 규칙을 학습하고, 이를 사용하여 관측 결과의 클래스를 예측하는 데 사용됩니다.
SVC
SVM은 고차원 공간에서 선형 및 비선형 분류, 회귀 및 이상치 탐지 문제를 해결하는 데 사용되는 강력한 분류 알고리즘입니다.
KNeighborsClassifier
KNN 분류기는 새로운 관측값의 클래스를 예측할 때 가장 가까운 이웃 데이터의 클래스를 사용하는 분류 알고리즘입니다.
RandomForestClassifier
랜덤 포레스트는 여러 개의 의사결정나무를 생성하고 그들의 예측을 조합하여 보다 정확한 예측을 수행하는 데 사용됩니다.
XGBClassifier
XGBoost는 Gradient Boosting 알고리즘을 기반으로 하며, 빠른 속도와 높은 예측 정확도를 제공하는 데 사용됩니다.
LGBMClassifier
LightGBM은 Gradient Boosting 알고리즘을 기반으로 하며, 대규모 데이터 집합에서 빠른 학습 및 높은 예측 정확도를 제공하는 데 사용됩니다.
Catboost
Catboost는 Gradient Boosting 알고리즘을 기반으로 하며, 범주형 변수를 처리하는 데 있어서 다른 Gradient Boosting 라이브러리와 비교하여 보다 뛰어난 예측 성능을 제공하는 데 사용됩니다.
DNN
Deep Neural Network는 여러 층으로 구성된 인공 신경망 모델로, 이미지, 음성, 텍스트 등 다양한 데이터 유형의 예측 및 분류에 사용됩니다.
비정형 데이터 모델
CNN
CNN은 Convolutional Neural Network의 약자로, 이미지와 같은 고차원 데이터를 처리하기 위한 인공 신경망의 한 종류입니다. 이미지 분류, 객체 검출, 분할 등 다양한 이미지 처리 작업에서 사용됩니다.
Canny
Canny Edge Detection은 이미지에서 에지(Edge)를 검출하는 알고리즘 중 하나입니다. 이미지의 밝기 변화가 큰 지점을 찾아서 에지로 인식합니다.
Contour
Contour는 이미지에서 최외곽의 경계선 위치를 검출하고, 그 위에 검은색 선을 덮어 씌워 두개골을 지우는 방식입니다.
Augmentation
Augmentation은 데이터 증강 기술로, 기존 데이터에 다양한 변형을 적용하여 데이터셋을 보강합니다. 예를 들어 이미지에서는 회전, 크기 조정, 반전 등의 변형을 적용하여 데이터를 다양하게 만들어 모델의 성능을 향상시킵니다.
프로젝트 초기에 데이터 수집과정에서 개인 정보 및 의료 데이터다 보니 원하는 데이터를 얻어내는게 어려웠다. 처음 시각화를 진행할때 어떤 방식으로 시각화를 해야할까에 대해서 고민을 했는데 팀원들과 소통을 통해 방향성을 잡고 진행할 수 있었다.
김지민
분석에 용이한 좋은 데이터를 구하는게 얼마나 어려운지 실감했다.
비정형 데이터를 다뤄본 경험이 없어서 데이터를 가져오는 단계에서부터 굉장히 어려웠지만 팀원들과 서로 모르는 내용을 공유하면서 조금씩 해결할 수 있었다.
김희묵
의료데이터다보니 데이터를 구하기가 어려웠으며, 이미지 경로 설정 부분이 어려웠지만 팀원들의 도움으로 극복했습니다. 또한 CNN 모델을 만들 때 어떻게 쌓아야 적절한지를 이론적으로 이해하지 못하고 진행한 것이 아쉬웠습니다. 팀원들 덕분에 여러가지 전처리 방식을 배워 이미지 데이터를 다루는 것이 재밌었습니다. 또한 여러 시각화 기술을 배운 것도 많이 도움이 되었습니다.
오정현
의료데이터이다보니 데이터셋 구하기가 어려웠다. 또한 이미지 데이터를 다루어 본 경험이 부족하여 이미지 차원에 대한 에러나 의료데이터의 확장자를 로드하는 부분에서 어려움이 많았다. 팀원들과 협업하면서 에러 해결, 인사이트 공유 등으로 스킬 업할 수 있었다.
최용현
주제 선정이 초기에 쉽게 되어 진행하는데 어려움은 없었지만, 기술적 한계를 마주 칠 때 마다 많이 좌절했던 기억이 난다. 조원들과 같이 상의하고 다각적으로 접근하며 문제점을 해결 할 수 있었다.
최유현
데이터를 구하는 것에 어려움이 있었고 계획했던 방향이 쉽지 않아서 여러 번의 시행착오를 하게 되었다. 그 과정에서 많은 회의를 통해 방향을 잡아갈 수 있었고 팀원들의 다양한 의견과 스킬로 많은 인사이트를 얻을 수 있었다.
특히 예측 모델의 정확도가 높지 않은 점은 아쉽지만 더 많은 변수들로 훈련한다면 더 좋은 모델이 될 것 같다.
4-3. 개선점 (팀 내에서 논의 및 합의된 개선 방향)
예측 모델의 정확도
➡️ 같은 환자의 더 많은 변수 데이터를 수집하면 정확도를 높일 수 있을 것이다.
4-4. 추후 개선 계획
종합 모델 대시보드
➡️ 두개골을 제거하는 전처리 코드를 사용하는 모델을 스트림릿으로 배포하면 더 좋은 모델을 많은 사람들이 사용해 볼 수 있을 것이다.