Machine Learning/Theory

혼동 행렬과 교차 검증

ju_young 2021. 5. 19. 19:18
728x90

혼동 행렬

 
혼동 행렬(confusion matrix)는 모델의 성능을 평가할 때 사용되는 지표이다. 예를 들어서 다음과 같은 표를 말한다.
 

  예측값
A B C D
실제값 A 9 1 0 0
B 1 15 3 1
C 5 0 24 1
D 0 4 1 15


여기서 B를 C로, C를 A로, D를 B로 혼동한다는 정보를 알 수 있고 대략적인 모델의 성능도 한 눈에 확인할 수 있다. 모델의 성능은 바로 이 혼동 행렬을 기반으로 하나의 수치로 표현할 수 있다.
 

TP(true positive)

 
TP는 데이터의 실제값을 올바르게 예측한 케이스를 말한다. 아래의 혼동 행렬에서 대각선 부분이 TP이다.

  예측값
A B C D
실제값 A 9 1 0 0
B 1 15 3 1
C 5 0 24 1
D 0 4 1 15

 

TN(true negative)

 
TN은 틀린 것을 올바르게 예측한 것을 말하는데 말로 설명하기보다는 아래 혼동 행렬을 보는 것이 이해가 빠르겠다. 아래 혼동 행렬에서 A의 TN은 A라 예측하지 않거나 A를 다른 것으로 예측하지 않은 것이다. 간단히 말하면 A와 관련되어 있지 않은 모든 값들을 A의 TN이라 생각하면 될 것 같다.

  예측값
A B C D
실제값 A 9 1 0 0
B 1 15 3 1
C 5 0 24 1
D 0 4 1 15

 

FP(false positive)

 
FP는 틀린 것을 맞다고 잘못 예측한 것을 말한다. 아래 혼동 행렬에서 A의 FP라고 하면 다른 것들을 A라고 잘못 예측한 값들이라고 생각하면 된다.

  예측값
A B C D
실제값 A 9 1 0 0
B 1 15 3 1
C 5 0 24 1
D 0 4 1 15

 

FN(false negative)

 
FN는 맞는 것을 틀렸다고 잘못 예측한 것을 말한다. 아래 혼동 행렬에서 A의 FN이라고 하면 A를 다른 것들로 잘못 예측한 값들인데 여기서 FP와 약간 헷갈릴 것이다.
 
다시 정리하면 A의 FP는 다른 것들을 A라고 잘못 예측한 값들이고 A의 FN은 A를 다른 것이라고 잘못 예측한 값들이다. 또 예를 들어 B, C, D가 나열되어 있는데 B, C, D를 A라고 잘못 예측한 것을 FP, A가 있는데 B 또는 C 또는 D라고 잘못 예측한 것을 FN이라 한다.

  예측값
A B C D
실제값 A 9 1 0 0
B 1 15 3 1
C 5 0 24 1
D 0 4 1 15

 

정확도(Accuracy)

 
정확도는 모델이 입력된 데이터에 대해 얼마나 정확하게 예측하는지를 나타낸다. 혼동 행렬에서는 TP를 전체 셀로 나눈 값이 정확도가 된다.
 

정확도 = TP / 전체 셀 값

 

정밀도(precision)

 
정밀도는 모델의 예측값이 얼마나 정확하게 예측됐는가를 나타낸다. 예를 들어 다음과 같은 두 가지 모델의 혼동 행렬이 있다고 하자.

 

[모델 A]

  암환자 일반환자
암환자 9 1
일반환자 30 60

[모델 B]

  암환자 일반환자
암환자 9 1
일반환자 30 60

정확도를 계산해보면 A 모델이 69%, B 모델이 71%이므로 B모델이 더 높은 정확도를 가지지만 B 모델이 더 나은 모델이라고 할 수 없다. 왜나하면 암환자에 대한 예측은 A 모델이 뛰어나기 때문이다. 이처럼 예측값이 얼마나 정확한가를 나타내는 것이 정밀도이다. 다시 말해 정밀도는 얼마나 잘 예측했는 지를 나타내는 정확도와 달리 예측한 것이 얼마나 정확한 지를 나타내는 것이다.
 

정밀도 = TP / (TP + FP)

 
위 암 예측 모델로 또 다시 설명하면 정확도는 암 예측 모델 자체가 얼마나 잘 예측했는지를 나타내는 것이고 정밀도는 암환자를 예측한 예측 값이 얼마나 정확한 값인지를 나타내는 것이다.
 

재현율(recall)

 
재현율은 실제값 중에서 모델이 검출한 실제값의 비율이다. 무슨 소리인지 모르겠으니 정밀도를 설명했을 때 사용한 암 예측 모델을 예로 들어 보겠다. 여기서 실제 암환자들이 병원에 갔을 때 암환자라고 예측될 확률을 구하는 것을 바로 재현율이라고 한다.
 

재현율 = TP / (TP + FN)

 
이제 정밀도와 재현율이 약간 헷갈릴 수도 있다. 정리하면 정밀도는 암환자와 일반환자가 있을 때 암환자라고 얼마자 정확하게 예측하는가를 말하고 재현율은 암환자를 암환자인지 일반환자인지 얼마나 정확하게 예측하는가를 말하는 것이다.
 

F1 점수 (조화평균)

 
F1 점수는 정밀도와 재현율을 조화평균내서 하나의 수치로 나타낸 것을 말한다.
 

F1 점수 = 2 * 재현율 * 정밀도 / (재현율 + 정밀도 )

 
F1 점수는 정밀도, 재현율의 값이 크게 상이할 때 조화평균 값을 내주어 성능 평가에 많이 사용된다. 그리고 다음과 같이 레이블이 불균일하게 분포돼어 있을 경우를 보자.

 

[모델 1]

  예측값
A B C D
실제값 A 955 5 0 0
B 8 0 1 1
C 10 0 0 1
D 0 1 9 0

[모델 2]

  예측값
A B C D
실제값 A 700 100 100 100
B 0 9 1 0
C 0 0 9 1
D 0 1 0 9

정확도를 계산해보면 모델 2가 A 에 대한 예측율은 떨어지지만 보편적으로 예측을 잘하는 모델임에도 모델 1보다 낮게 평가되는 것을 확인 할 수 있다. 하지만 F1 점수를 계산하여 확인하면 모델 2가 더 나은 점수를 얻은 것을 알 수 있다.
 
이처럼 F1 점수는 한쪽 레이블에 치우치지 않는 레이블의 전체적인 성능에 대해 올바르게 평가하는 것을 확인할 수 있다.
 

k-폴드 교차 검증

 
보통 데이터셋의 구성은 20% = 테스트 데이터, 나머지 80%중 90% = 학습 데이터, 10% = 검증 데이터로 많이 사용한다. 하지만 데이터가 충분하지 않을 경우 검증 데이터를 나누는데 어려움이 있다. 그리고 이런 문제를 해결하기위해 'k-폴드 교차 검증'이라는 방법이 고안되었다.
 
k-폴드 교차 검증은 n번의 검증 과정을 통해 학습 데이터의 모든 데이터를 한 번씩 검증 데이터로 사용해서 n개의 검증 결과를 평균낸 값을 말한다.
 

교차검증


출처: [https://tykimos.github.io/2017/03/25/Dataset_and_Fit_Talk/]
 
위에서처럼 모든 데이터를 한 번씩 검증 데이터로 사용해서 검증 데이터가 한쪽 데이터에 편향돼지 않아 학습 데이터에 대한 전반적인 검증 정확도를 구할 수 있다.

 

** 본글은 나의 첫 머신러닝/딥러닝 책을 참고하여 정리한 글입니다.

728x90

'Machine Learning > Theory' 카테고리의 다른 글

의사결정 트리(decision tree)  (0) 2021.05.30
SVM(Support Vector Machine)  (0) 2021.05.25
k-최근접 이웃(k-Nearest Neighbor, kNN)  (0) 2021.05.21
과대적합과 과소적합  (2) 2021.05.19
지도학습과 비지도학습  (0) 2021.05.19