안녕하세요 :)
저번주에 MBTI 예측 업무분배 및 주제구체화에 이어
1주만에 다시 돌아온
브라이티스 서포터즈 3기 이상민입니다.
이번주는 머신러닝, 딥러닝 모델로 MBTI를
분류하고 성능을 검증해보았는데요.
어떤 MBTI가 예측하기 쉬운지,
성능은 어느정도로 나왔는지
한 번 알아보러 가실까요??
머신러닝, 딥러닝 모델로 MBTI 분류하기
저번주까지는 MBTI 데이터셋을
토큰화하는 과정까지 진행했는데요.
이번에는 토큰화 후, 임의의 벡터로 변환하는 과정과
그 벡터를 머신러닝, 딥러닝 모델에 넣어 학습하는
과정을 소개하겠습니다.
먼저 앞서 토큰화한 단어들을
브라이틱스 내에 있는 Bag of Words라는 함수를 사용해
텍스트를 숫자로 변환할 수 있는 토대를 만들어줍니다.
Bag of Words란?
단어들의 순서는 고려하지 않고
오로지 빈도수를 기준으로 값을 산정하는 기법
예를 들면 "나는 너를 매우 매우 좋아해"라는 문장이 있다면
나는:1, 너를:1, 매우:2, 좋아해:1
위와 같이 빈도수를 벡터로 변환하는 기법입니다!
그 후 Bag of words에서 숫자로 변환해줬다면
이제는 각 index(document 단위)별로 단어들을 벡터로 처리해줘야 하는데요.
브라이틱스에서는 Term-document matrix라는 함수를 통해
처리해줄 수 있습니다.
이는 document와 term(단어)들을 matrix형태로 변환해주는 함수인데요.
데이터와 model을 넣으면 자동으로 변환해주는
매우매우 편리한 기법입니다.
그 후 따로 원본 데이터에서 mbti 열만 불러와 주는데요
이 작업은 단어들을 matrix형태로 변환하면 label은 없기 때문에
따로 붙여주기 위한 작업입니다.
다시 label과 단어들의 matrix를 붙여주고
label encoding을 진행해주는데요.
label encoding이란 string으로 되어있는 값들을
integer형태로 변환해주는 기법인데요.
mbti는 ENFJ, INTP처럼 string형태로 되어있잖아요??
이 string을 컴퓨터가 알아들을 수 있도록 0,1처럼 변환해주는
작업이라고 보면 됩니다 :)
데이터를 다 변환했다면
split data 함수를 사용해 데이터를 분할해줍니다.
이 때 분할해주는 이유는 데이터를 일부 학습해주고
학습한 데이터와는 다른 데이터를 평가에 사용해주기 위해서
데이터를 분할해줍니다.
또한 여기서 데이터 분할 비율을 지정해줄 수 있는데
보통 7:3, 8:2를 많이 사용하는데
데이터의 개수가 비교적 적다고 판단하여 8:2로
데이터를 분할하였습니다.
그리고 seed라는 파라미터가 있는데,
이는 데이터를 고정적으로 똑같은 set으로
분할해주는 파라미터인데요.
여기서는 계속 똑같은 데이터 분할로 성능을 비교할 것이기 때문에
seed를 1234로 고정해줍니다.
데이터를 분할해주고
먼저 xgb라는 머신러닝 기법을 통해
데이터를 학습해줍니다.
xgb를 간단히 설명하자면
여러 개의 decision tree모델을 둔 다음
앙상블하는 기법인데요.
부스팅 기법중에 하나로
약한 예측 모형들의 학습 에러에 가중치를 둔 다음
순차적으로 다음 학습 모델에 반영하여
강한 예측 모델을 만드는 기법입니다.
이 때 학습시간은 총 16분이 걸렸는데요.
feature가 많다보니 학습기간이
오래 걸린 것 같습니다.
학습을 진행했다면 이제 검증을 위해
예측을 해야하는데요.
예측은 앞서 분할한 test data셋을 토대로
진행했습니다.
마지막으로 성능을 검증하기 위해서는
브라이틱스에 있는 evaluate classification함수를
사용하였는데요.
이는 분류 모델의 성능을 검증하는 함수로
label과 prediction만 넣어주면
자동으로 성능을 측정해줍니다.
최종적으로 0.66이라는 score가 나왔는데요
label이 16개인 것을 감안하자면
성능이 비교적 높게 나온 것 같습니다.
또한 여기서 label별로 f1, precision, recall값을
비교할 수 있는데요.
저는 이 값들이 높다면 비교적 예측하기 쉬운 mbti로 보고
낮아면 예측하기 어려운 모호한 mbti로 생각했습니다.
결과를 해석해봤을 때, ENFJ와 INFP가 점수가 낮게 나왔고
ESFP, ESTJ, ESTP가 점수가 높게 나왔습니다.
다음은 딥러닝 모델중 MLP를 사용하여
학습을 진행했는데요.
MLP란 layer들을 겹겹이 쌓아서 만든
퍼셉트론 모델로
가장 보편적인 딥러닝 모델입니다!
딥러닝 모델을 하이퍼 파라미터가 중요한데요.
여기서 layer 크기는 8로
activation function을 relu를 사용했습니다.
relu함수란 0보다 작으면 모두 0으로,
0보다 크거나 같으면 y=x의 형태로 값을
변환해주는 함수인데요.
이 함수가 역전파 진행 시 값을 잘 처리해준다고
알고 있어 relu함수를 사용하였습니다.
다음 파라미터는 adam optimizer와
lr는 0.01로 사용하였습니다.
여기서 optimizer란 학습속도를
빠르고 안정적이게 하는 최적화 알고리즘인데요.
adam옵티마이저란
각 파라미터마다 다른 크기의 업데이트를 적용시켜주는
옵티마이저인데요.
SAM이나 adamW등 최근에 나온 옵티마이저를 제외하고
가장 좋은 성능을 가지고 있다고 알려져 있습니다.
더 자세히 알아보실 분은
아래 논문을 읽어보시길 바랍니다!
딥러닝 MLP모델도 성능을 도출해봤는데요.
머신러닝 모델에 비해 현저히 낮은 점수를 얻었습니다.
이 점을 해석해봤을 때,
먼저 적합한 하이퍼 파라미터 값을 선정해주지 않았거나
데이터의 특성상
딥러닝 모델보다 머신러닝 모델이 이 데이터셋에는
좀 더 적합한 모델이지 않았나 생각이 듭니다.
이번 포스팅에서도 정말 많은
브라이틱스 함수들을 사용해봤는데요.
텍스트 분류 모델에서 이처럼 편하게
모델링을 진행한 적은 처음인 것 같습니다.
그만큼 브라이틱스 내에는 다양한 함수와
자동화되어있는 시스템이 많았다는 점인데요.
다음 포스팅에는 팀 내에서 진행한 다양한
기법들을 섞어서 최종적으로 모델링을 진행하고
분석 결과를 도출해보고자 합니다.
지금까지 삼성 SDS Brightics 서포터즈 3기 이상민이었습니다!
귀한 시간 내어 읽어주셔서 감사합니다.
* 본 포스팅은 삼성SDS Brightics 서포터즈 3기 활동의 일환으로 작성하였습니다.
'삼성 SDS Brightics' 카테고리의 다른 글
[Brightics Studio] # 팀 미션 - 홍보 영상 제작 01 (MBTI 과몰입 소개팅) (0) | 2022.09.15 |
---|---|
[Brightics Studio] # 팀 분석 프로젝트 - 04 MBTI 예측하기 최종 (0) | 2022.09.06 |
[Brightics Studio] # 팀 분석 프로젝트 - 02 업무분배 및 주제구체화, 텍스트 데이터로 MBTI 예측하기 (0) | 2022.08.23 |
[Brightics Studio] # 팀 분석 프로젝트 - 01 기획 및 구상, 텍스트 데이터로 MBTI 예측하기 (0) | 2022.08.17 |
[Brightics Studio] #02-3 영화 리뷰 데이터를 분석하기 - Modeling and Text Analysis (0) | 2022.07.12 |
최근댓글