[R] caret 패키지 confusion matrix (2 by 2 case)
예측 | 관측 | ||
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으로 해석 할 수 있다.