배경
미션3에서 두통과 오심 클래스의 F1 score가 0에 가깝게 나왔다. 전체 데이터의 30%만 해당 증상 키워드가 텍스트에 직접 등장하고, 나머지 70%는 간접 표현("혈압이 높다", "말이 어눌하다")만 있는 구조라 단순 키워드 기반 접근으로는 분류가 어렵다는 걸 먼저 확인했다.
열상(F1 0.87), 복통(F1 0.80)처럼 잘 맞추는 클래스도 있었기 때문에, 두통·오심이 유독 실패하는 원인을 데이터 분포 차원에서 확인할 필요가 있었다.
분석 설계
KoELECTRA [CLS] 벡터를 뽑아 PCA로 2D/3D로 축소한 뒤, 각 증상 라벨이 임베딩 공간에서 어떻게 분포하는지 확인하는 구조로 설계했다. Plotly로 인터랙티브 시각화를 출력해서 팀원들이 HTML 파일로 직접 확인할 수 있게 했다.
분석은 크게 세 파트로 구성했다.
- -PCA 2D/3D 산점도 — 증상별 색상으로 임베딩 클러스터 분포 확인. 두통·오심 샘플이 공간상에 흩어져 있는지, 특정 영역에 몰리는지를 봄
- -증상 공출현 히트맵·버블 차트 — 9개 증상 간 동시 등장 빈도를 행렬로 시각화. 오심↔구토, 두통↔어지러움처럼 함께 붙어 다니는 쌍을 파악
- -두통·오심 특화 PCA — 해당 클래스 양성 샘플만 빨갛게 강조한 산점도 2장. 선형 분리 가능 여부를 눈으로 확인
팀 활용 방향
공출현 분석에서 오심↔구토, 두통↔어지러움 쌍의 공출현이 높게 나온다면, 두 클래스의 threshold를 함께 낮추는 후처리 전략의 근거로 쓸 수 있다.
다연님이 이 분석을 참고해 클래스별 threshold 탐색을 진행했고, 이후 전 클래스를 0.5로 고정해 재학습에 들어갔다.