본문 바로가기
Project

[Qualcomm Institute][UCSD] Reflections on the Artificial Intelligence Development Project

by SolaBreeze 2024. 2. 21.

6주간의 샌디에이고가 끝이났다!

약 6주간 진행됐던 인공지능 AI 프로젝트였다. 샌디에이고에서의 기억은 나에게 너무나도 특별했고 좋은 경험이었다. 
그 기억을 잊지 않기 위해서 회고록을 통해 기록하려고 한다!

 

목차 🔽

더보기

1. 프로그램 신청했을때의 마음가짐

2. 데이터셋 선정 이유
3. 데이터에서 찾은 의미, 논문 주제 선정
4. 첫번째 시도
5. 갈아엎고, 두번째 시도
6. 최종 결과 분석
7. 앞으로 시도해볼 계획들..
8. 프로젝트 이후 소감문 

 

프로그램을 신청했을 때의 마음가짐

 

나는 백엔드 개발자의 지망하는 컴공 복전생이었다. AI에 관해서도 매우 흥미가 많고 공부해본 것들이 꽤 있었지만 나는 1년간의 연구실 생활을 토대로 대학원은 들어가지 않겠다고 생각했었다. 그래서 취직을 생각하다 보니 가장 많이 뽑는 백엔드 직군을 희망하게 되었다. 백엔드에 관한 공부도 약 일년간 열심히 준비 했었다. 
그런 나에게 3학년 겨울방학은 매우 중요한 시기였다. 이번 방학에는 코딩테스트 준비를 탄탄하게 해둬야하는 시기였다.

하지만 눈에 띈 QI AI 프로그램...
미국에 간다는 점도 매우 매력적이었지만, 정말 좋은 학교 UCSD에서의 연구한다는것은 내 마음을 뛰게 만들기에 충분했다!

대학원 진학에 뜻이 없었기에 AI 분야로의 취직을 외면했었지만, AI 분야 공부는 나에게 항상 흥미로웠다.
그렇게 나는 3학년 겨울방학동안의 모든 플랜을 접어두고 이 프로그램을 신청하게 되었다.
이왕 미국에 가서 AI 프로젝트를 진행하는거, 정말 최선을 다해서 열심히 하고 싶었다.

 

데이터셋 선정 이유

 

Qualcomm institute에서는 해당 프로그램을 진행하면 수료증을 발급해주는데, 수료증을 발급해주는 조건은 크게 두가지였다.
AI 시험 보기, 논문 작성하기.

나는 AI 시험을 보는것도 매우 뜻깊고 좋은 경험이라고 생각했지만, 이 프로그램 이후에 남는것이 있으면 좋겠다고 생각해서 고민없이 논문 작성하기를 선택했다.

논문 프로젝트는 팀으로 진행되었다. 4명이 한팀이었고, 우리팀은 나와 기계과 언니오빠들 3명으로 구성되었다. 다들 이번 프로그램을 통해 AI 를 거의 처음 접해본다고 했다. 때문에 이번 AI 프로젝트에서는 "내가 주도적으로 책임감있게 프로젝트를 진행하자"라고 생각하였다.

논문 프로젝트를 시작하며 논문을 쓸만한 데이터셋을 찾고자 했다. 우리가 데이터셋을 찾기 위해 4가지 저장소를 고려했다.
UC Irvine machine learning repository, Dacon, Kaggle, Google
4일 내내 데이터를 찾아보았지만, 의미가 있어보이거나 논문 거리가 될만한 데이터를 찾기는 정말 힘들었다. 어느정도 샘플량도 많아야하고, 피쳐들도 너무 적지 않아야하며 논문을 쓰기에 의미있는 종속변수가 있을지 등등 고려해야되는 것들이 많았다. 자칫 잘못하면 AI 모델 예측이 아니라 통계, 계산과 같은 주제가 될 수 있는 애매한 데이터들은 지양하고자 했다.
또한 미국까지 왔는데, 한국의 데이터를 사용해서 논문을 작성하고 싶지 않았다. 

그러던 와중 이번 프로그램의 TA 분께서 VAERS(Vaccine Adverse Event Reporting System)에 대해서 알려주셨다. VAERS는 백신 부작용 보고를 수집, 분석하는데 중요한 자료를 제공하는 미국의 시스템이다. 해당 데이터셋에는 환자의 기본 정보와 백신 정보, 그리고 부작용 증상에 대한 정보가 담겨있었다.

해당 데이터들은 전문가들이 직접 라벨링을 통해 가공한 데이터이기 때문에 신뢰할 만한 데이터셋이었고, 1년간의 데이터셋이 백만개가 넘을 정도 샘플 수도 충분했다. 그렇기 때문에 우리는 VAERS 2021년1월1일 부터 21년 12월 31일까지 약 1년간의 데이터셋을 사용하여 논문을 작성하기로 결정했다.

 

데이터에서 찾은 의미, 논문 주제 선정

 

이 백신 부작용 데이터셋을 이용하여 무슨 연구를 진행할지 관해서 많이 생각해보았다. 어떤 주제가 의미가 있을지에 대해서 생각해보았다.
데이터셋에는 환자의 기저질환과 알러지에 관한 데이터가 담겨있었고 이를 이용하여 환자 개인별 기저질환과 알러지를 고려하여 백신 부작용 예측해보자! 라고 생각했다.

물론 우리가 의사도 아니고 의료 전문가도 아니지만 머신러닝을 통해 백신 접종 이후 환자에게 발생할 수 있는 부작용을 예측하여 미리 예방할 수 있도록 알려주는것은 매우 의미있는 주제라고 생각했다.

또한 같은 데이터셋을 사용한 선행 연구들을 찾아보는 시간을 많이 가졌다. 선행 연구를 찾아보는 시간을 매우 중요한것 같다.

선행 연구를 보며 데이터에 대해서 더욱 깊이 있게 이해할 수 있었고, 이전 연구자들은 이 데이터셋에서 어떤것이 중요하다고 생각하여 독립변수 혹은 종속변수로 설정했는지에 대해서 그 사람들의 생각을 볼 수 있다는게 참 의미있었다.
앞으로의 연구에서도 선행 연구를 분석하고 그 경험에서 많은것을 깨닳을 수 있도록 시간 투자를 많이 해야겠다라는 생각을 하게 되었다.

 

첫번째 시도

 

초기 데이터에서 총 컬럼(피쳐)는 53개였다. 그 중 증상을 예측하는데 있어서 불필요하다고 판단되는 모든 컬럼을 삭제했다. 또한 COVID-19 백신에 대한 부작용을 연구하고자, COVID-19 이외의 백신 데이터는 모두 제거하였다.

메인 독립변수는 기저질환과 알러지이다.
초기 데이터에서 기저질환과 알러지는 텍스트 형태로 나타나있었다.
그렇기 때문에 텍스트형태를 정제하여 리스트형태로 뽑는 과정과 리스트형태로 뽑은 이후 Many-Hot Encoding을 통해 컬럼화하는 과정을 거쳤다.

환자들의 수많은 기저질환과 알러지를 모두 독립변수로 설정할 수 없었기 때문에 COVID-19 백신을 맞은 사람들 중에 가장 빈도수 높은 기준으로 기저질환과 알러지 각각 상위 10개의 항목을 선정하였다.

종속변수인 "부작용 증상" 또한 텍스트 형태로 나타나있었는데, 이는 선행 연구 중 자연어처리가 완료된 데이터를 깃허브에서 다운받아서 사용하였다. 
하지만 약 1년간의 사람들의 부작용 증상 종류가 1만개가 넘었기 때문에, 이도 빈도수 높은 기준으로 상위 10개의 항목을 선정하였고 Many-Hot Encoding을 통해 컬럼화 했다.

우리는 이 데이터셋을 학습시키기 위해 Multi label Classifier을 사용했다.

Multi label Classifier과 Multi class classifier의 차이는? 왜 레이블 분류를 선택하여 사용했는지? 🔽

더보기

멀티 클래스 분류기 (Multi-class Classifier)

  • 멀티 클래스 분류기는 하나의 샘플을 여러 클래스 중 하나의 클래스에 할당하는 분류 모델.
    즉, 각 샘플은 정확히 하나의 클래스에만 속할 수 있다.
  • 예로 들자면, 동물 이미지를 '고양이', '개', '말' 등으로 분류하는 문제에서, 각 이미지는 위 세 카테고리 중 하나에만 속한다.
  • 전형적인 분류 문제에 사용되며, 소프트맥스 함수를 사용해 각 클래스에 속할 확률을 계산한 후 가장 높은 확률을 가진 클래스를 선택한다.

멀티 레이블 분류기 (Multi-label Classifier)

  • 멀티 레이블 분류기는 하나의 샘플이 여러 개의 레이블을 동시에 가질 수 있는 분류 모델.
    이는 하나의 샘플이 여러 클래스에 속할 수 있음을 의미한다.
  • 예시로는 영화를 장르별로 분류하는 문제에서, 하나의 영화는 '액션', '코미디', '드라마' 등 여러 장르에 동시에 속할 수 있다.
  • 각 레이블(클래스)마다 독립적인 이진 분류기를 사용하거나, 네트워크가 여러 레이블을 동시에 예측하도록 설계하여 적용한다. 이 경우, 출력층에서 시그모이드 함수를 사용해 각 클래스에 대한 독립적인 확률을 계산한다.

멀티 클래스 분류기는 소프트맥스 활성화 함수를 사용하여 모든 클래스 확률의 합이 1이 되도록 한다. 멀티 레이블 분류기는 각 클래스에 대해 독립적인 시그모이드 활성화 함수를 사용하여, 각각의 클래스가 독립적인 이진 분류 문제로 처리된다.

우리의 종속변수는 증상으로, 환자가 하나의 증상만을 가지는것이 아닌 여러개의 증상을 가질 수 있기 때문에 멀티 레이블 분류를 사용하는것이 맞다.

 

우리는 첫번째 전처리를 이용하여 RandomForest Classifier 모델에 돌려보았다.

우와 정말 결과는 충격적이었다.
증상이 없다고 예측(TN + FN)하는 성능(f1 score 기준)이 0.9 점인것에 반해
증상이 있다고 예측(TP+FP)하는 성능이 0.01점인 것이다...

우리는 무엇인가 문제가 있다고 판단했고 두번째 시도를 하였다.

 

갈아엎고, 두번째 시도

 

기존에 제거했던 컬럼들 중 "백신 맞은 부위"와 같이 조금이라도 연관 있어 보이는 컬럼들을 다시 추가했다. 

날씨도 부작용 증상 발현에 영향을 미칠 것이라고 생각되어 사는 거주지역과 백신을 맞은 날을 조합하여 날씨를 고려하고자 했다.
미국 내 사계절이 뚜렷하고 월별 계절 변화가 유사한 특정 주(NY, MA, PA, IL, OH)의 데이터만을 선택하였다. 그러고 나서 해당 지역에서 백신 접종날을 기반으로 "MONTH" 변수를 새롭게 생성하여 계절적 변화를 고려하였다.

우리가 데이터를 곰곰히 쳐다보며 생각해보았을때, 아무래도 빈도수를 기준으로 기저질환, 알러지, 부작용 증상을 선정하는것은 서로 연관성을 찾기 힘들다고 생각했다. 그래서 선행 연구에서 전문의와 논의해보았을때 COVID-19과 연관성 있다고 판단되는 기저질환 25개와 부작용 증상 52개를 참고했고, 서로 비슷한 기저질환과 부작용 증상을 통합하여 각각 20개와 35개로 추려내었다. 

알러지와 같은 경우 COVID-19과 관련된 항목에 대해서 선행 연구나 기사들을 찾을 수 없었기 때문에 빈도수 기준으로 11개 추려내었다.

추려낸 기저질환과 알러지, 부작용 증상은 저번(첫번째 시도)과 같이 처리하여 컬럼화 시켜주었다.

논문을 쓰기에 앞서 추려낸 35개의 증상을 모두 종속변수로 설정하여 모델을 돌려보기에는 추후 파라미터 튜닝 과정에서도 매우 복잡해 지기 때문에 심각한 증상으로 이어질 수 있는 증상 중 하나인 "호흡곤란(Dyspnoea)"를 하나의 타겟값으로 설정했다.

또한 첫번째 시도에서의 정확도를 보았을때 굉장히 Imbalanced한 데이터라고 판단할 수 있었다.
실제로 계산결과 호흡곤란 증상의 경우 증상이 없는 사람(0) :  증상이 있는 사람(1) 의 비율이 15 : 1 로 상당했다.

그래서 Imbalanced한 데이터를 balanced하게 처리해주기 위해 샘플링 기법을 사용하였다.

샘플링 기법은 크게 Over Sampling 과 Under Sampling이 있다. 우리는 Over Sampling 의 경우 SMOTE 기법을 사용하였다.
🔽 (참고)

더보기

SMOTE (Synthetic Minority Over-sampling Technique)

  • SMOTE는 소수 클래스의 샘플을 합성하여 오버샘플링하는 기법이다.
    이 방법은 소수 클래스의 샘플 사이에 존재하는 특성 공간을 활용하여 새로운, 합성된 소수 클래스 샘플을 생성한다.
  • 기존 소수 클래스 샘플들 사이에서 임의로 점을 선택하고, 선택된 점들 사이의 벡터에 따라 새로운 데이터 포인트를 생성한다. 이 과정을 반복하여 소수 클래스의 샘플 수를 증가시킨다.
  • 데이터의 다양성을 증가시켜 모델이 소수 클래스를 더 잘 일반화할 수 있게 한다. 오버샘플링을 통해 정보 손실 없이 클래스 간 균형을 맞출 수 있다.
  • 합성 샘플이 실제 데이터 분포를 완벽하게 반영하지 못할 수 있으며, 이로 인해 모델이 과적합되는 경향이 있을 수 있다.

언더샘플링 (Under-sampling)

  • 언더샘플링은 다수 클래스의 샘플 수를 줄여 데이터셋의 클래스 간 균형을 맞추는 방법이다.
    이는 다수 클래스에서 무작위로 샘플을 제거함으로써 수행된다.
  • 다수 클래스에서 샘플을 임의로 선택하여 제거하고, 소수 클래스와의 샘플 수를 비슷하게 맞춘다. 이렇게 하여 데이터셋의 전체 크기를 줄이면서도 클래스 간 균형을 달성한다.
  • 과적합의 위험을 줄일 수 있으며, 계산 비용을 감소시킨다.
  • 중요한 정보가 손실될 수 있으며, 이는 모델의 성능 저하로 이어질 수 있다. 또한, 극단적인 언더샘플링은 모델이 데이터의 다양성을 충분히 학습하지 못하게 할 수 있다.

샘플링 기법을 사용하니 증상이 있다는 것(TP + FP)을 맞추는 정확도가 눈에 띄게 올라갔다. 
하지만 모델을 돌릴때 SMOTE를 사용하면 시간이 너무 오래걸리고, 언더샘플링을 이용하면 데이터가 너무 줄어든다는 단점이 있었다.

그래서 SMOTE를 이용해서 "1"의 값을 가진 데이터를 늘리고, 언더샘플링을 이용하여 "0"의 값을 가진 데이터를 줄여서 6:4 정도로 맞추는 시도를 해보았다.

 

 

하이퍼 파라미터 튜닝

 

정확도도 올라왔겠다. 이제 여러가지 모델들을 시도해보며 최적의 파라미터 값을 찾는 과정이 필요했다.

시도해본 모델은 다음과 같다.
RandomForest, Decision Tree, Gradient Boost, XGBoost, MLP, Logistic Regression

이 중 가장 성능이 좋은 RandomForest와 XGBoost, MLP를 선정하여 파라미터 튜닝을 해보았다.

Python이 아닌 AI 툴 KNIME을 이용하기 때문에 AUTO 파라미터 튜닝을 할 수 없었고, 각 파라미터마다 권장되는 구간을 알아보고 그 사이에서 직접 수동으로 하나하나씩 바꿔가면서 옵티멀값을 찾고자 했다.

KNIME에서 파라미터 튜닝을 하는 모습의 일부이다.

거의 100번의 수동적인 시도 끝에 각 모델에 따른 최적의 옵티멀 값을 찾을 수 있었다.

 

 

최종 결과 분석 및 비교

 

<Without Sampling>

증상이 있다(1)에 대한 성능지표임

 

<Under Sampling>

증상이 있다(1)에 대한 성능지표임

 

<Over Sampling>

증상이 있다(1)에 대한 성능지표임

 

<Over & Under Sampling>

증상이 있다(1)에 대한 성능지표임

 

종합적으로, Without Sampling일 때, Under Sampling과 Over Sampling을 각각 적용하였을 때,
Under Sampling과 Over Sampling을 결합하여 사용했을 때를 비교하면,
XGBoost 모델을 사용하여 Over Sampling만 사용한 경우,
F-measure 0.942, Accuracy 0.943으로 가장 높은 예측 성능
을 보였다.

또한, Under Sampling과 Over Sampling 기술을 사용하여 종속변수를 예측했을 때
모델의 성능이 전반적으로 향상되는 것을 확인할 수 있었다.

특히 XGBoost 모델의 경우, Without Sampling 을 사용했을 때 F-measure 값 0.004 이었지만,
Over Sampling 을 사용했을때는 F-measure 값 0.942으로 예측 성능 향상을 보였다.

 

앞으로 시도해볼 계획들

 

사실 전처리에서 너무 많은 시간이 들었고, 파라미터 튜닝에서도 많은 시간이 들었기 때문에 데이터 자체로 뭔가 해볼 시간이 없었다.
논문 작성까지 6주만에 완성해야됐기 때문에 시간이 빠듯하여 아쉬웠다...😢

그래서 이 프로젝트 이후에는 이 데이터를 좀 더 들여다보고 의미를 찾아서 이것저것 시도해보고 싶다.

아직 어떤 기저질환 및 알러지가 증상과 연관있는지 제대로 분석해보지 못했다. 
그리고 어떤 연령대에서 어떤 증상이 가장 빈번하게 일어나는지,
남자/여자 생각해보았을때 증상 발현에 차이점이 있는지? 등등 이 데이터를 토대로 해볼건 매우 많다!!

데이터를 들여다보고 이것저것 시도해보다가 재미있는 사실을 발견할 수도 있지 않을까?!
그 부분을 논문 Discussion 부분에 쓰면 매우 좋을것 같다!

 

⭐️ San Diego에서 6주간 프로젝트 이후 소감 ⭐️
(사실 이게 제일 중요함)

 

결론적으로 말하자면, San Diego에서의 프로젝트 경험은 정말 환상적이었고 내 미래 진로 및 사고관을 바꾸기에 충분했다.

대학원? 무조건 가야된다. 안가면 손해다. (가스라이팅 아님)

6주간 연구 하는게 너무나도 재미있었다. 놀면서도 연구 생각을 하고, 빨리 다른 시도 해보고싶고,
집 도착하면 바로 노트북 켜서 데이터 만져보고..

내가 직접 데이터를 찾아서 그 데이터의 의미를 찾는다는게 엄청 추상적이고 힘들었지만 나는 그 과정에서 "재미"를 느낄 수 있었다.

UCSD에서 수업이 끝나고 도서관을 가는 시간이 정말 행복했다.

차분하게 Geisel 도서관을 가서 전처리하고 어떤 시도를 해볼까 고민해보는 시간이 너~무 행복했다.

보통 도서관이 10시에 문을 닫았기 때문에 10시 이후에는 CSE 건물 creative space에 가서 마저 공부를 하다가 들어갔다.

샌디에이고는 치안이 매우 안전한 도시이기 때문에 새벽 2-3까지 학교에 있다가 가도 문제 없었다. 

그때 그 새벽 공기가 아직도 잊혀지지 않는다...

샌디에이고에서의 6주간 연구생활은 나에게 행복이었고, 내가 어떻게 살아야지 행복할 수 있는지 알 수 있게 해주는 소중한 경험이었다.

Geisel Libary in afternoon
Geisel Libary in night

 

날씨도 정말 환상적이다.

날씨 하나만으로 사람 기분이 이렇게 좋을 수 있음을 처음 경험했다.

한국에서 22년 살면서 느낀 모든 날씨 중에 가장 좋은 날도 샌디에이고의 보통의 하루만 못하다.

그냥 길을 걷는게 기분이 좋았고, 프로젝트가 잘 안풀려서 머리속이 복잡할때도 그냥 밖에 나와서 산책 몇분하면 싹 가셨다.

 

특히 UCSD 에는 해먹과 water fountain이 함께 있는 공간이 있는데,
그곳 해먹에서 따사로운 햇살을 받으며 누워있는 시간은 평생 잊지 못 할것이다.

동영상이라.. 화질이 좀...

여러 인종이 섞여서 자유롭게 캠퍼스를 거니는것이 정말 감명 깊었다.
서로가 서로를 존중하는 문화, 그것은 정말 배우고 싶은 문화였다.

6주간 나에게 소중한 경험을 준 로컬 친구들에게도 감사함을 전한다.
(기숙사 초대 너무 고마워!ㅋㅋ)

왼쪽 맨 밑에가 나!!

그리고 6주간 동거동락한 우리 QI 친구들!! 진짜 사랑하고 너무 고마워!

사랑해❤️

 

 

대학원생으로 꼭 다시 San Diego에 올것이다! 기다려라! UCSD!