R

[R] caret 패키지 confusion matrix (2 by 2 case)

StatZealot 2020. 11. 12. 11:10
예측 관측
  Event Not event
Event A B
Not Event C D

1. precision = A / (A + B)

2. recall = A / (A + C)

3. F1 = 2 * precision * recall / (precision + recall)

 

만약 factor 수준의 알파벳에 의해 event level 이 나중에 나온다면, 즉

 

  FALSE (not event) TRUE (event)
FALSE (not event) D, cell1 C, cell2
TRUE (event) B, cell3 A, cell4

 

이라면 F1은 cell 순서는 위와 같다.

결론적으로 cell 순서는 row-major order로 (1, 1) 에서 (2, 2)로 번호가 달린다.

 

따라서 위의 예제에서 

 

cell1 = 11, cell2 = 0, cell3 = 8, cell4 = 0 이면 F1 = NA

cell1 = 11, cell2 = 0, cell3 = 0, cell4 = 8 이면 F1 = 1

cell1 = 9, cell2 = 2, cell3 = 2, cell4 = 6 이면 F1 = 0.75

cell1 = 9, cell2 = 2, cell3 = 7, cell4 = 0 이면 F1 = NaN

 

이다.

 

NA의 경우 caret::confusionMatrix 실행시

2 by 2 행렬의 하나의 열/행 전체가 0이면 오류가 발생한다.

이 값을 NA로 저장한다.

(즉 factor level 수가 예측, 데이터 모두 2개로 같아야 한다.)

 

NaN의 경우 4개의 cell 중 1개만 0인 경우 F1 값이 0 / 0 일 때 결과값이다.

(R에서 1/0 이면 Inf로 출력)

 

 

< 2021년 1월 22일 업데이트 >

 

F1은 정의상 값이 0이 될 수 없다. 

따라서 F1이 NA 혹은 NaN 이면 0으로 놓고 그것을 NA, NaN으로 해석 할 수 있다.