BERT 뉴스 분류 #8 모델 성능평가 - Precision / Recall / F1

BERT 뉴스 분류 #8 모델 성능평가 - Precision / Recall / F1 #

#2026-03-03


#1 평균의 함정

전체 F1이 0.9482라고 했다. 이 숫자는 네 클래스의 가중 평균이다. 평균이라는 건 잘하는 쪽과 못하는 쪽이 서로 상쇄된다는 뜻이다. 시험에서 수학 100점, 영어 100점, 국어 100점, 과학 70점을 받으면 평균 92.5점이다. 꽤 좋은 점수다. 하지만 이 학생의 약점이 과학이라는 사실은 평균만 봐서는 보이지 않는다. 클래스별 세부 지표를 보는 이유가 정확히 이것이다.

전체 F1 = 0.9482 (가중 평균)
         ↑ 이 숫자만 보면 Sports의 완벽함과 Sci/Tech의 부족함이 안 보인다

#

#2 Precision / Recall / F1

클래스PrecisionRecallF1해석
World1.00000.94670.9726예측이면 무조건 맞음, 일부 World를 다른 클래스로 분류
Sports0.98861.00000.9943거의 완벽, Sports 뉴스는 하나도 안 놓침
Business0.81970.92590.8696Precision 낮음 = Sci/Tech가 Business로 잘못 유입
Sci/Tech0.95240.90910.9302Recall 낮음 = Sci/Tech 일부가 Business로 누락

Sports부터 보자. F1이 0.9943으로 거의 완벽하다. Precision이 0.9886이고 Recall이 1.0000이다. Recall이 1.0이라는 건 실제 스포츠 기사 76건을 단 하나도 놓치지 않고 전부 잡아냈다는 뜻이다. Precision이 0.9886이라는 건 모델이 스포츠라고 판정한 것 중 하나만 실제로는 스포츠가 아니었다는 뜻이다. 혼동 행렬에서 봤듯이 스포츠는 어휘가 너무 독특해서 모델이 쉽게 구별한다.

World는 흥미로운 패턴을 보인다. Precision이 1.0000이고 Recall이 0.9467이다. Precision이 1.0이라는 건 모델이 “이건 World 기사야"라고 판정하면 100% 맞다는 뜻이다. 한 번도 틀린 적이 없다. 하지만 Recall이 0.9467이라는 건 실제 World 기사 78건 중 75건만 잡아내고 3건을 놓쳤다는 뜻이다. 모델이 World를 예측할 때는 매우 보수적으로 행동하는 것이다. 확실한 것만 World라고 말하고, 조금이라도 애매하면 다른 클래스로 분류한다. 그래서 예측하면 무조건 맞지만 일부를 놓친다.

Sci/Tech는 Precision이 0.9524로 꽤 높고 Recall이 0.9091로 상대적으로 낮다. 모델이 Sci/Tech라고 판정하면 95%는 맞지만, 실제 Sci/Tech 기사의 9%가 Business로 빠져나간다. 혼동 행렬에서 본 10건의 유출이 여기서 Recall을 깎아먹고 있는 것이다.

Business가 가장 문제다. Precision이 0.8197로 네 클래스 중 유일하게 0.9 아래다. 모델이 Business라고 판정한 것 중 약 18%가 실제로는 Business가 아니다. 주로 Sci/Tech 기사가 Business로 잘못 유입된 것이다. Recall은 0.9259로 나쁘지 않다. 실제 Business 기사 대부분은 잡아내지만, 다른 클래스의 기사가 Business 예측에 섞여 들어와서 Precision이 떨어지는 구조다.

Precision = 내가 "이건 Business야"라고 했을 때 실제 맞은 비율
Recall    = 실제 Business 뉴스를 얼마나 건져냈는가

Business Precision=0.82:
  모델이 Business라고 예측한 81건 중 66건이 진짜 Business
  15건(≈Sci/Tech 10건 + ?)은 Business가 아닌데 잘못 예측

Business Recall=0.93:
  실제 Business 81건 중 75건을 찾아냄
  6건은 놓침(→Sci/Tech로 분류됨)

#

#3 AUROC / AUPRC

클래스AUROCAUPRC의미
World0.98540.9815매우 좋음
Sports0.99950.9988거의 완벽 (분류 경계가 명확)
Business0.98270.8778AUPRC가 상대적으로 낮음
Sci/Tech0.99310.9816좋음

AUROC를 클래스별로 보면 Sports가 0.9995로 거의 1.0이고, 나머지도 0.98~0.99 범위에서 모두 훌륭하다. AUROC 관점에서는 네 클래스 모두 잘 구분되고 있다.

하지만 AUPRC에서 차이가 드러난다. Sports는 0.9988, World는 0.9815, Sci/Tech는 0.9816인데, Business만 0.8778로 눈에 띄게 낮다. AUROC와 AUPRC 사이에 이렇게 큰 격차가 벌어지는 이유가 있다.

AUROC는 양성과 음성의 순위만 본다. Business 기사의 점수가 비Business 기사의 점수보다 대체로 높기만 하면 AUROC는 좋게 나온다. 하지만 AUPRC는 모델이 높은 확률을 부여한 예측들의 정밀도를 더 엄격하게 평가한다. Business의 경우 Sci/Tech 기사 중 기술 기업 관련 기사들이 꽤 높은 Business 확률을 받는다. 이 기사들이 AUROC에서는 큰 영향을 미치지 않지만 AUPRC에서는 Precision을 직접 깎아먹는다.

비유하자면 AUROC는 “전체적으로 순서가 맞는가"를 보고, AUPRC는 “상위권에 엉뚱한 게 섞여 있는가"를 본다. Business 예측의 상위권에 Sci/Tech 기사가 섞여 있으니 AUPRC가 떨어지는 것이다.

#

#4 이 분석이 개선 방향을 어떻게 알려주는가

각 클래스의 지표가 서로 다른 패턴을 보이므로, 개선 전략도 클래스별로 달라야 한다.

Business의 Precision을 올리려면 Sci/Tech 기사가 Business로 잘못 유입되는 것을 막아야 한다. Business 뉴스만의 고유한 특징, 예를 들어 “revenue”, “quarterly earnings”, “stock price”, “merger” 같은 순수 비즈니스 어휘를 모델이 더 강하게 인식하도록 학습시키는 것이 방법이다. FinBERT처럼 금융 텍스트로 사전학습된 모델을 쓰면 이런 어휘의 표현이 이미 더 정교하게 학습되어 있어서 효과적일 수 있다.

Sci/Tech의 Recall을 올리려면 Sci/Tech 기사가 Business로 빠져나가는 것을 막아야 한다. 특히 “기술 기업의 경영 뉴스"처럼 두 카테고리의 경계에 있는 기사들을 더 많이 학습시켜서, 모델이 이 경계에서 더 세밀한 판단을 할 수 있게 만들어야 한다.

이전 망막증 프로젝트에서 혼동 행렬을 보고 “등급 2와 3의 경계가 문제"라는 진단을 내린 것과 같은 구조다. 전체 점수는 대략적인 건강 상태를 알려주고, 클래스별 지표는 정확히 어디가 아픈지를 짚어주고, 그 진단을 바탕으로 구체적인 치료 방향을 잡는 것이다.