안녕하세요. 저는 'MBTIgram'의 AI 개발을 맡은 BTSpa Winter(지유경)입니다.😆
이번 포스팅에서는 지난 7월과 8월 'MBTIgram'의 MBTI 예측 알고리즘을 구현하면서 얻은 개발 경험에 대해서 소개해볼까 합니다. 'MBTIgram'의 예측 알고리즘은 Kaggle의 MBTI 데이터셋을 통해 개발되었습니다. 이번 포스팅을 통해서 'Machine Learning'과 'Deep Learning' 분야에 많은 관심을 가진 분들에게 소소한 도움이 되었으면 좋겠습니다.
💻 개발환경: Google Colab Pro
✅ 사용 데이터셋
(MBTI) Myers-Briggs Personality Type Dataset
[Link] https://www.kaggle.com/datasets/datasnaek/mbti-type
mbti_1.csv
MBTI Personality Types 500 Dataset
[Link] https://www.kaggle.com/datasets/zeyadkhalid/mbti-personality-types-500-dataset
MBTI 500.csv
kaggle에 있는 2개의 MBTI 데이터셋을 사용했습니다.
type, posts 2개의 열을 가진 데이터로, type은 mbti 종류이며 posts는 해당 mbti가 작성한 텍스트 데이터입니다.
1) 데이터셋 부족 문제
: 초반에는 MBTI 500.csv 데이터셋만을 이용했는데 리샘플링을 시도하기 전이라 일부 MBTI 타입에서 샘플 수가 많이 부족하다고 느꼈습니다. 더 많은 데이터셋을 이용하고 싶어, mbti_1.csv 데이터셋을 추가했습니다.
2) 데이터 클래스 불균형 문제
: 두 가지 데이터셋을 합쳐도 클래스 불균형 문제는 심각했습니다.
3) 언더 샘플링 이후 정확도(accuracy) 감소
모델링 관련 포스트에서 한번 더 설명드릴 내용입니다. 초반에는 RAM 용량 초과로 SMOTE를 사용했을 때 런타임이 끊기는 문제가 발생했습니다. 결국, 언더 샘플링을 시도했고 학습 데이터(training data)의 각 샘플 수가 180개인 상태로 학습을 진행했습니다. 데이터 수가 극단적으로 줄었기 때문에 불균형한 상태로 학습을 진행했을 때보다 정확도가 감소한걸 확인할 수 있었습니다. 물론, 불균형한 데이터를 이용해 모델링을 한 것이기 때문에 다른 평가 지표 또한 고려해서 성능 평가를 해야하지만 그닥 개선되지 않았기 때문에 다양한 모델을 이용하여 모델링을 다시 진행하기로 했습니다.
4) 전처리와 EDA를 꼼꼼하게 하자..
컴공과 출신 윈터는 대부분 깔끔하게 전처리된 데이터셋으로 모델링만 주구장창 해왔기 때문에 전처리와 EDA의 소중함을 늦게 깨달았습니다.. 미국에서 짧은 기간안에 진행한 프로젝트이기에 더욱 모델링과 Accuracy에만 신경을 써서 불균형 데이터셋으로 학습을 시켜버렸습니다. 이때문에 한국에 와서 성능 향상을 위해서 알고리즘을 다시 짤 때, 더 많이 고생을 했습니다🥲 모델링을 하다가 전처리, EDA 과정을 왔다갔다하는 상황까지 갔습니다..
최종적인 모델 성능 결과부터 보여드리겠습니다.
XGBoost | RNN | LinearSVC | |
---|---|---|---|
accuracy | 0.50 | 0.59 | 0.967 |
F1-score | 0.48 | 0.40 | 0.966 |
위와 같이 뛰어난 성능 평가 결과를 보여준 LinearSVC가 최종 모델로 선정이 되었습니다. 초반에 짰던 알고리즘 또한 LinearSVC를 이용했지만 최종 결과물보다는 많이 성능이 떨어졌는데요, 이 부분 또한 자세히 설명해드리겠습니다. 앞으로의 포스트에서 전처리 및 EDA, 각각의 모델링 과정 등을 설명해드리겠습니다😃
모델링을 전부 마치고 velog를 작성하려니.. 그동안 지새웠던 눈물겨운 밤들이 하나 둘 떠오릅니다..😂
수많은 에러 메세지가 눈 앞을 가리고.. 에러를 해결하지 못하면 잠이 안오는 그런 개발자의 삶을..👩💻 힘들었지만 미국에서부터 팀원들과 재미있게 진행했던 프로젝트라 더욱 애정을 가지고 임했습니다! 앞으로 포스팅될 MBTIgram의 'AI 이야기'로 재미있고 유익한 시간 보내실 수 있도록 하겠습니다🙏
본격적으로 AI의 이야기를 들려드리기에 앞서, 앞으로의 포스트 목차를 설명해드리겠습니다.
[2] 전처리 및 EDA
[3] XGBoost와 RNN
[4] LinearSVC
순차적으로 업로드 예정입니다.
아직 미숙한 대학생이라 아직 많이 부족하다는 점 양해부탁드립니다.. 조언해주실 부분이 있으시다면, 댓글 부탁드립니다😃 열심히 보고 배우겠습니다!
이상으로 AI의 첫 번째 이야기를 마치겠습니다..🙋♀️
재미있겠네요^^ 기대가 됩니다😝