BERT 뉴스 분류 #7 모델 성능평가 - Confusion matrix

BERT 뉴스 분류 #7 모델 성능평가 - Confusion matrix #

#2026-03-03


#1

F1이 0.9482라는 건 알겠다. 하지만 이 숫자 하나로는 모델이 어디서 잘하고 어디서 못하는지를 알 수 없다. 네 카테고리 모두를 골고루 95% 맞추는 모델과, 세 카테고리는 100% 맞추고 한 카테고리는 80%만 맞추는 모델이 같은 F1을 가질 수 있다. 둘의 약점은 완전히 다른데도 전체 점수로는 구분이 안 된다.

혼동 행렬은 이 한계를 해결한다. 실제 정답과 모델 예측을 4×4 격자로 교차 집계해서 “어떤 클래스를 어떤 클래스로 오분류했는가"를 빠짐없이 보여준다. 이전 망막증 챕터에서 5×5 혼동 행렬로 어떤 등급 쌍에서 오분류가 집중되는지를 진단했던 것과 같은 도구다.

#

#2 confusion matrix 읽기

confusion matrix는 4개 클래스 각각에 대해 “실제 정답"과 “모델 예측"을 교차 집계한 표다. 행렬의 각 행은 실제 정답 클래스이고, 각 열은 모델이 예측한 클래스다. 대각선에 있는 숫자는 모델이 정확히 맞힌 것이고, 대각선 바깥에 있는 숫자는 오분류다.

WorldSportsBusinessSci/Tech
World75120
Sports07600
Business00756
Sci/Tech001059

World 행을 보자. 실제 World 기사 78건 중 75건을 World로 정확히 분류했고, 1건을 Sports로, 2건을 Business로 잘못 분류했다. Sci/Tech로 잘못 분류한 건은 0건이다. Sports 행은 완벽하다. 실제 Sports 기사 76건을 전부 Sports로 맞혔다. 오분류가 단 한 건도 없다. Business 행을 보면 81건 중 75건을 맞혔지만 6건을 Sci/Tech로 잘못 분류했다. Sci/Tech 행은 69건 중 59건만 맞혔고, 10건을 Business로 잘못 분류했다. 여기서 뚜렷한 패턴이 보인다.

스포츠 기사는 다른 카테고리와 어휘가 거의 겹치지 않는다. “touchdown”, “championship”, “quarterback”, “goal”, “match” 같은 단어들은 스포츠에서만 등장한다. BERT의 Self-Attention이 이런 단어들을 보면 다른 모든 맥락을 볼 필요도 없이 스포츠라고 확신할 수 있다. [CLS] 토큰의 768차원 벡터 안에 “이건 확실히 스포츠"라는 신호가 매우 강하게 인코딩되는 것이다. 이걸 DNA 분석과 비교하면, 특정 전사인자의 결합 모티프가 매우 뚜렷해서 Conv1D 필터가 쉽게 잡아내는 경우와 같다. 신호가 강하면 모델은 쉽게 분류한다.

전체 오분류 16건 중 무려 16건이 Business와 Sci/Tech 사이에서 발생했다. Business를 Sci/Tech로 잘못 분류한 게 6건, Sci/Tech를 Business로 잘못 분류한 게 10건이다. 이 두 카테고리가 모델에게 가장 어려운 경계라는 게 명확하다. 왜 이 둘이 혼동되는가를 생각해보면, 현실 세계에서 이 두 카테고리의 경계 자체가 모호하기 때문이다. “Apple announces new chip partnership with TSMC"라는 기사를 생각해보자. 애플이라는 기업의 사업 전략에 초점을 맞추면 Business이고, TSMC의 반도체 기술 혁신에 초점을 맞추면 Sci/Tech다. 같은 기사를 사람이 분류해도 의견이 갈릴 수 있다. 기업이 기술 혁신을 주도하는 현대 경제에서 “기업 뉴스"와 “기술 뉴스"의 경계는 본질적으로 흐릿하다.

"Apple announces new chip partnership with TSMC"
         ↑ Business 뉴스인가? Sci/Tech 뉴스인가?
         → 애플(기업)이 주체면 Business
         → TSMC 반도체 기술이 주제면 Sci/Tech
         → 경계가 모호하다

오분류 사례들의 신뢰도를 보면 이 해석이 더 확실해진다. Business를 Sci/Tech로 잘못 분류한 사례의 확신도가 0.38, Sci/Tech를 Business로 잘못 분류한 사례의 확신도가 0.40이다. 4개 클래스의 균등 확률이 0.25이니까, 0.38~0.40은 “아주 약간 이쪽 같은데 확신은 없다"는 수준이다. 모델 자체도 이 경계 사례들이 어렵다는 걸 인지하고 있는 셈이다. 이건 이전 Step 3에서 본 ECE 문제와도 연결된다. 모델이 낮은 확신도로 내린 예측들이 실제로 많이 틀린다면, 이 낮은 확신도의 예측들을 별도로 처리하는 전략이 효과적일 수 있다. “확신도 0.5 미만은 사람이 검토한다"는 규칙을 세우면 Business-Sci/Tech 경계의 오분류 대부분을 걸러낼 수 있다.

실제 혼동 사례 (error_taxonomy.json):
true=Sci/Tech, pred=Business, conf=0.40  ← 확신 없이 틀림
true=Business, pred=Sci/Tech, conf=0.38  ← 확신 없이 틀림
-> 모두 0.4대의 낮은 신뢰도에서 발생 → 모델도 어렵다고 느끼는 경계 사례

#

#3 recall 분석

클래스맞힌 수 / 전체재현율
World75 / 780.96
Sports76 / 761.00
Business75 / 810.93
Sci/Tech59 / 690.86

각 클래스의 재현율(실제 해당 클래스 중 모델이 정확히 잡아낸 비율)을 보면, Sports가 1.00으로 완벽하고, World가 0.96, Business가 0.93, Sci/Tech가 0.86으로 가장 낮다. Sci/Tech 기사 69건 중 10건이 Business로 빠져나갔기 때문이다.

방향성도 주목할 만하다. Sci/Tech에서 Business로의 유출(10건)이 Business에서 Sci/Tech로의 유출(6건)보다 많다. 이건 기술 기사에 등장하는 기업명, 시장 규모, 투자 관련 어휘가 모델을 Business 쪽으로 끌어당기기 때문일 수 있다. “TSMC plans $40 billion investment in new chip fabrication facility"라는 문장에서 “$40 billion investment"라는 표현이 Business의 강한 신호로 작용하는 것이다. 이전 망막증 혼동 행렬에서 등급 2(중등도)와 등급 3(중증)이 혼동되었던 것과 같은 패턴이다. 인접한 카테고리, 즉 의미적으로 가까운 카테고리 사이에서 오분류가 집중된다. 망막증에서는 질병의 심각도가 연속적이어서 인접 등급이 혼동되었고, 뉴스 분류에서는 기술과 비즈니스라는 주제가 현실에서 밀접하게 연관되어 있어서 혼동되는 것이다.

#

#4 정리

혼동 행렬이 알려주는 핵심 메시지는 “모델의 약점이 어디에 있는가"다. F1 0.9482라는 전체 점수만 보면 모델이 전반적으로 훌륭하다는 것만 안다. 혼동 행렬을 보면 “Sports는 완벽하고, World도 거의 완벽하고, 문제는 Business-Sci/Tech 경계에 집중되어 있다"는 구체적인 진단이 나온다.

이 진단이 있어야 개선 방향을 잡을 수 있다. 모든 카테고리의 데이터를 무차별적으로 늘리는 대신, Business-Sci/Tech 경계의 애매한 기사들을 집중적으로 추가해서 학습시킬 수 있다. 또는 이 두 카테고리에 특화된 사전학습 모델을 쓰거나, 아예 두 카테고리를 “Business/Tech"로 합쳐서 3클래스 분류로 바꾸는 것도 검토할 수 있다. 혼동 행렬 없이는 이런 구체적인 전략을 세울 수 없다.