ggplot2를 활용한 혼동행렬 시각화 방법

데이터 분석에서 혼동행렬(Confusion Matrix)은 분류 모델의 성능을 평가할 때 중요한 도구입니다. 이번 포스트에서는 R의 ggplot2 패키지를 사용하여 아래 그림과 같이 혼동행렬 시각화 방법을 설명하고, 혼동행렬의 각 요소를 쉽게 이해할 수 있도록 시각적으로 표현하는 방법을 소개합니다.

혼동행렬 시각화 그림
( ggplot2를 활용한 혼동행렬 시각화 )

ggplot2를 사용한 혼동행렬 시각화

혼동행렬 시각화 개요 그림
( 혼동행렬 시각화 개요 )

우선, ggplot2는 R에서 가장 많이 사용되는 시각화 라이브러리 중 하나입니다. 이를 통해 혼동 행렬을 직관적으로 표현할 수 있습니다. 아래 코드를 통해 혼동 행렬을 데이터프레임 형태로 생성하고, 이를 ggplot2를 사용해 혼동행렬 시각화 방법을 단계별로 설명하겠습니다.

1. 필수 라이브러리 로드

혼동행렬 시각화를 위해 먼저 ggplot2 라이브러리를 로드해야 합니다. ggplot2는 R에서 다양한 시각화를 할 때 필수적으로 사용되며, 직관적이고 세련된 플롯을 만들 수 있는 강력한 도구입니다.

# 필수 라이브러리 로드
library(ggplot2)

2. 혼동 행렬 데이터 생성

혼동 행렬을 나타내는 데이터를 데이터프레임으로 생성합니다. 예측값과 실제값을 설정하고, 혼동 행렬의 각 항목에 대한 레이블(TP, FP, FN, TN)을 추가합니다.

# 혼동 행렬을 나타내는 데이터 프레임 생성
confusion_data <- data.frame(
  Predicted = factor(c("Y", "Y", "N", "N"), levels = c("N", "Y")),  # 예측값: N과 Y 레벨 설정 (N이 아래)
  Actual = factor(c("Y", "N", "Y", "N"), levels = c("Y", "N")),     # 실제값: Y와 N 레벨 설정 (Y가 왼쪽)
  Label = c("True Positive (TP)", "False Positive (FP)", "False Negative (FN)", "True Negative (TN)")  # 각 항목에 대한 라벨
)

코드설명:

  • Predicted 열은 모델이 예측한 값입니다. 여기서는 YN으로 이루어져 있으며, Y는 긍정, N은 부정을 나타냅니다.
  • Actual 열은 실제 값이며ㅑ, 예측값과 마찬가지로 YN을 사용합니다.
  • Label은 혼동 행렬의 각 항목에 해당하는 레이블로, TP(참 긍정), FP(거짓 긍정), FN(거짓 부정), TN(참 부정)을 나타냅니다.

3. ggplot2로 혼동행렬 시각화

이제 ggplot2를 사용해 혼동 행렬을 시각화해보겠습니다. geom_tile()을 사용하여 각 항목을 타일 형태로 표현하고, 각 타일에 텍스트 레이블(TP, FP, FN, TN)을 추가합니다.

# ggplot2를 사용해 혼동 행렬 시각화
ggplot(confusion_data, aes(x = Actual, y = Predicted)) +   
  geom_tile(fill = "lightblue", color = "black", width = 1, height = 1) +     # 타일 생성, 색상 및 테두리 설정
  geom_text(aes(label = Label), size = 5) +                                  # 타일에 텍스트 레이블 추가
  labs(title = "Confusion Matrix", subtitle = "Actual (Reference)") +        # 제목과 부제목 추가
  scale_x_discrete(position = "top") +                                       # x축 레이블을 상단에 배치
  theme_minimal() +                                                          # 간결한 테마 설정
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold", margin = margin(b = 10)),    # 제목 설정
    plot.subtitle = element_text(hjust = 0.5, size = 12, face = "bold", margin = margin(b = 20)), # 부제목 설정
    axis.title.x = element_blank(),                                           # x축 제목 제거
    axis.title.y = element_text(size = 12, face = "bold", margin = margin(r = 20)),               # y축 제목 설정
    axis.text.x = element_text(size = 12, face = "bold", margin = margin(b = 10)),                # x축 레이블 설정
    axis.text.y = element_text(size = 12, face = "bold"),                     # y축 레이블 설정
    panel.grid = element_blank(),                                             # 그리드 제거
    axis.ticks = element_blank(),                                             # 축 눈금 제거
    plot.margin = margin(t = 50, b = 40)                                      # 여백 설정
  )

코드설명:

  • geom_tile(): 혼동 행렬의 각 항목을 타일 형식으로 그립니다. 타일의 색상은 연한 파란색으로 설정했고, 테두리는 검은색으로 설정했습니다.
  • geom_text(): 각 타일 위에 혼동 행렬의 레이블(TP, FP, FN, TN)을 표시합니다.
  • labs(): 제목과 부제목을 설정합니다. 부제목에는 “Actual (Reference)”를 추가하여 실제값이 참조 데이터임을 나타냅니다.
  • theme_minimal(): 배경을 흰색으로 설정하고, 불필요한 요소들을 제거하여 그래프를 간결하게 만듭니다.

4. 결과 시각화 및 그래프 스타일 설정

혼동 행렬을 시각화한 결과는 포스트 초반부와 같이 나타납니다. 타일 형식으로 표시된 각 항목에는 True Positive, False Positive, False Negative, True Negative라는 레이블이 추가되어 혼동 행렬의 의미를 쉽게 이해할 수 있도록 돕습니다.

최종 전체코드

# 필수 라이브러리 로드
library(ggplot2)

# 혼동 행렬을 나타내는 데이터 프레임 생성
confusion_data <- data.frame(
  Predicted = factor(c("Y", "Y", "N", "N"), levels = c("N", "Y")),  # 예측값: N과 Y 레벨 설정 (N이 아래)
  Actual = factor(c("Y", "N", "Y", "N"), levels = c("Y", "N")),     # 실제값: Y와 N 레벨 설정 (Y가 위)
  Label = c("True Positive (TP)", "False Positive (FP)", "False Negative (FN)", "True Negative (TN)")  # 각 항목에 대한 라벨
)

# ggplot2를 사용해 혼동 행렬 시각화
ggplot(confusion_data, aes(x = Actual, y = Predicted)) +   
  geom_tile(fill = "lightblue", color = "black", width = 1, height = 1) +     
  geom_text(aes(label = Label), size = 5) +                                  
  labs(title = "Confusion Matrix", subtitle = "Actual (Reference)") +        
  scale_x_discrete(position = "top") +                                       
  theme_minimal() +                                                          
  theme(
    plot.title = element_text(hjust = 0.5, size = 16, face = "bold", margin = margin(b = 10)),    
    plot.subtitle = element_text(hjust = 0.5, size = 12, face = "bold", margin = margin(b = 20)), 
    axis.title.x = element_blank(),                                           
    axis.title.y = element_text(size = 12, face = "bold", margin = margin(r = 20)),               
    axis.text.x = element_text(size = 12, face = "bold", margin = margin(b = 10)),                
    axis.text.y = element_text(size = 12, face = "bold"),                     
    panel.grid = element_blank(),                                             
    axis.ticks = element_blank(),                                             
    plot.margin = margin(t = 50, b = 40)                                      
  )

마무리

이번 포스트에서는 R의 ggplot2를 활용하여 혼동행렬 시각화 방법을 배웠습니다. 혼동 행렬은 분류 모델의 성능을 평가하는 중요한 도구이며, 각 항목(TP, FP, FN, TN)의 의미를 시각적으로 표현함으로써 모델이 얼마나 정확한지 쉽게 이해할 수 있습니다. 이 방법을 통해 혼동 행렬을 보다 직관적으로 분석할 수 있으며, 다양한 데이터에 적용해보세요!

혼동행렬을 실제 활용을 위해서 그 의미를 알기 위해서 R 데이터분석 예제: 붓꽃 Iris 데이터셋으로 배우는 분류와 시각화 포스트를 리뷰해보세요. 정확도, 재현율 등 모델의 성능을 확인하는 의미를 이해하실 수 있을 겁니다.

유사한 게시물